https://github.com/prawnpdf/prawn
Fast, Nimble PDF Writer for Ruby
https://github.com/prawnpdf/prawn
Keywords
pdf pdf-generator prawn ruby
Keywords from Contributors
activerecord activejob mvc rubygems ruby-gem rspec rack feature-flag sinatra afm
Last synced: about 11 hours ago
JSON representation
Repository metadata
Fast, Nimble PDF Writer for Ruby
- Host: GitHub
- URL: https://github.com/prawnpdf/prawn
- Owner: prawnpdf
- License: other
- Created: 2008-04-04T22:37:39.000Z (almost 18 years ago)
- Default Branch: master
- Last Pushed: 2025-05-02T06:47:10.000Z (10 months ago)
- Last Synced: 2026-02-26T23:12:14.851Z (5 days ago)
- Topics: pdf, pdf-generator, prawn, ruby
- Language: Ruby
- Homepage: https://prawnpdf.org
- Size: 42.2 MB
- Stars: 4,794
- Watchers: 87
- Forks: 698
- Open Issues: 88
- Releases: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: COPYING
- Code of conduct: CODE_OF_CONDUCT.md
README.md
Prawn: Fast, Nimble PDF Generation For Ruby
Prawn is a pure Ruby PDF generation library that provides a lot of great
functionality while trying to remain simple and reasonably performant. Here are
some of the important features we provide:
- Vector drawing support, including lines, polygons, curves, ellipses, etc.
- Extensive text rendering support, including flowing text and limited inline
formatting options. - Support for both PDF builtin fonts as well as embedded TrueType fonts
- A variety of low level tools for basic layout needs, including a simple grid
system - PNG and JPG image embedding, with flexible scaling options
- Security features including encryption and password protection
- Tools for rendering repeatable content (i.e headers, footers, and page
numbers) - Comprehensive internationalization features, including full support for UTF-8
based fonts, right-to-left text rendering, fallback font support, and extension
points for customizable text wrapping. - Support for PDF outlines for document navigation
- Low level PDF features, allowing users to create custom extensions by dropping
down all the way to the PDF object tree layer. (Mostly useful to those with
knowledge of the PDF specification) - Lots of other stuff!
Should You Use Prawn?
If you are looking for a highly flexible PDF document generation system, Prawn
might be the tool for you. It is not a reporting tool or a publishing toolchain,
though it could be fairly easily used to build those things.
One thing Prawn is not, and will never be, is an HTML to PDF generator. For
those needs, consider looking into Ferrum. We do have basic support for inline styling
but it is limited to a very small subset of functionality and is not suitable
for rendering rich HTML documents.
Supported Ruby Versions and Implementations
Because Prawn is pure Ruby and all of its runtime dependencies are maintained by
us, it should work pretty much anywhere. We officially support all Ruby versions
suported by Ruby Core Team and JRuby versions of matching Ruby version. However
we will accept patches to fix problems on other Ruby platforms if they aren't
too invasive.
Installing Prawn
Prawn is distributed via RubyGems, and can be installed the usual way that you
install gems: by simply typing gem install prawn on the command line.
You can also install from git if you'd like, the master branch contains the
latest developments. We're trying to keep master branch in working order but
you may encounter some rough edges and fresh bugs along with bugfixes. We
encourage you to try master branch with your application.
Hello World!
If the following code runs and produces a working PDF file, you've successfully
installed Prawn.
require "prawn"
Prawn::Document.generate("hello.pdf") do
text "Hello World!"
end
Of course, you'll probably want to do more interesting things than that...
Manual
The manual is a series of examples that demonstrate use of the wide range of
features Prawn provides. You can get a generated version of the latest released
Prawn version on the Prawn website. The examples
themselves can be found in the manual directory in this repository.
Please note that while the manual is a great introduction and guide to Prawn
it's not exhaustive. Please refer to API docs for more complete information on
what Prawn provides and how to use it.
To build the manual, here's what you need to do:
- Clone the repository
- Run
gem install -g - Run
rake manual, which will generate manual.pdf in the project root
Release Policies
We're trying to not break things unnecessarily but we don't formally follow
Semantic Versioning. The reason is that we release a number of experimental
APIs. We don't make any promises on their stability. You can assume the stable
portion of the API follows Semantic Versioning.
Also note that bug fixes can change behaviour. We don't consider that to be
a breaking change for the purposes of versioning. Please test your applications
after updating Prawn.
Be sure to read the release notes in
CHANGELOG.md each
time we cut a new release, and lock your gems accordingly.
Support
The easiest way to get help with Prawn is to post a message to our
Discussions.
Feel free to post any Prawn related question there, our community is very
responsive and will be happy to help you figure out how to use Prawn, or help
you determine whether it's the right tool for the task you are working on.
Please make your posts as specific as possible, including code samples and
output where relevant. Do not post any information that should not be shared
publicly, and be sure to reduce your example code as much as possible so that
those who are responding to your question can more easily see what the issue
might be.
Code of Conduct
Prawn adheres to the Contributor Covenant. Unacceptable
behavior can be reported to conduct@prawnpdf.org which is monitored by the core
team.
Contributing
If you've found a bug or want to submit a patch, please enter a ticket into our
GitHub tracker.
We strongly encourage bug reports to come with failing tests or at least a
reduced example that demonstrates the problem. Similarly, patches should include
tests, API documentation, and an update to the manual where relevant. Feel free
to send a pull request early though, if you just want some feedback or a code
review before preparing your code to be merged.
If you are unsure about whether or not you've found a bug, or want to check to
see whether we'd be interested in the feature you want to add before you start
working on it, feel free to post to our mailing list.
You can run our test suite in a few different ways:
- Running
rakewill run the entire test suite excluding any unresolved issues - Running
rspecwill run the entire test suite including unresolved issues - Running
rspec -t unresolvedwill run only unresolved issues - Running
rspec -t issue:NUMBERwill run the tests for a specific issue
These filters make it possible for us to add failing test cases for bugs that
are currently being researched or worked on, without breaking the typical full
suite run.
Maintenance team
Prawn has always been heavily dependent on community contributions, with dozens
of people contributing code over the years. In that sense, the lines have
blurred to the point where we no longer have a strong distinction between core
developers and contributors.
That said, there are a few folks who have been responsible for cutting releases,
merging important pull requests, and making major decisions about the overall
direction of the project.
Current maintainers
These are the folks to contact if you have a maintenance-related issue with
Prawn:
- Alexander Mankuta (PointlessOne)
Inactive maintainers
These folks have helped out in a maintenance role in the past, but are no longer
actively involved in the project:
- Gregory Brown (practicingruby)
- Brad Ediger (bradediger)
- James Healy (yob)
- Daniel Nelson (Bluejade)
- Jonathan Greenberg (jonsgreen)
- Jamis Buck (jamis)
- Evan Sharp (PacketMonkey)
License
Prawn is released under a slightly modified form of the License of Ruby,
allowing you to choose between Matz's terms, the GPLv2, or GPLv3. For details,
please see the LICENSE, GPLv2, and GPLv3 files.
If you contribute to Prawn, you will retain your own copyright but must agree to
license your code under the same terms as the project itself.
History
Prawn was originally developed by Gregory
Brown, under the auspices of the Ruby
Mendicant Project, a grassroots initiative in which the Ruby community
collectively provided funding so that Gregory could take several months off from
work to focus on this project.
Over the last several years, we've received code contributions from dozens of
people, which is amazing considering the low-level nature of this project. You
can find the full list of folks who have at least one patch accepted to Prawn on
GitHub Contributors page.
After a long period of inactivity, Prawn reached its 1.0 milestone in 2014
thanks to some modest funding provided to Gregory by Madriska, Inc. (Brad
Ediger's company).
Owner metadata
- Name: PrawnPDF
- Login: prawnpdf
- Email:
- Kind: organization
- Description:
- Website: https://prawnpdf.org/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/1440292?v=4
- Repositories: 12
- Last ynced at: 2024-04-21T09:19:04.937Z
- Profile URL: https://github.com/prawnpdf
GitHub Events
Total
- Pull request event: 15
- Fork event: 21
- Issues event: 20
- Watch event: 116
- Issue comment event: 68
- Push event: 3
- Pull request review comment event: 12
- Pull request review event: 17
Last Year
- Pull request event: 8
- Fork event: 14
- Issues event: 11
- Watch event: 60
- Issue comment event: 39
- Push event: 1
- Pull request review comment event: 8
- Pull request review event: 8
Committers metadata
Last synced: 3 days ago
Total Commits: 2,692
Total Committers: 196
Avg Commits per committer: 13.735
Development Distribution Score (DDS): 0.681
Commits in past year: 3
Committers in past year: 1
Avg Commits per committer in past year: 3.0
Development Distribution Score (DDS) in past year: 0.0
| Name | Commits | |
|---|---|---|
| Gregory Brown | g****n@g****m | 860 |
| Brad Ediger | b****r@m****m | 375 |
| Alexander Mankuta | a****x@p****e | 188 |
| James Healy | j****y@d****m | 160 |
| Felipe Doria | f****a@g****m | 150 |
| Daniel Nelson | d****l@O****) | 114 |
| Evan Sharp | e****n@p****g | 113 |
| Jamis Buck | j****s@3****m | 57 |
| sandal | s****l@s****) | 52 |
| jonathangreenberg | g****g@e****t | 43 |
| Daniel Nelson | d****t@b****m | 39 |
| Alex Dowad | a****g@g****m | 29 |
| Kenneth Kalmer | k****r@g****m | 25 |
| Daniel Nelson | d****n@b****m | 22 |
| Michael Daines | m****l@m****m | 19 |
| Hartwig Brandl | m****l@h****t | 19 |
| Michael Witrant | m****e@l****r | 16 |
| Thomas Leitner | t****r@g****t | 15 |
| Daniel Nelson | d****l@D****) | 15 |
| Petrik | p****k@d****t | 11 |
| Tommy Back | t****k@g****m | 8 |
| Roger Nesbitt | r****r@s****m | 8 |
| Jonathan Greenberg | p****r@t****m | 8 |
| Peter Goldstein | p****n@g****m | 7 |
| Jesse Doyle | j****e@u****a | 7 |
| Adam St. John | a****n@g****m | 7 |
| Simon Hürlimann | s****n@c****h | 6 |
| Otávio de Freitas e Castro Sampaio | o****o@r****r | 6 |
| Gregory Brown | u****r@e****t | 6 |
| Andrew O'Brien | o****w@g****m | 5 |
| and 166 more... | ||
Committer domains:
- optiplex760.(none): 2
- bluejade.com: 2
- redhat.com: 2
- mbs-projects.com: 1
- debian.org: 1
- proactive.cc: 1
- d600.(none): 1
- realdigitalmedia.com: 1
- lenny.ridge.aps.org: 1
- intridea.com: 1
- buddyandselly.com: 1
- issylong.com: 1
- staticfusion.org: 1
- digineo.de: 1
- innu.org: 1
- gethightower.com: 1
- nyh.se: 1
- graysoftinc.com: 1
- scpike.net: 1
- turpana.com: 1
- vinsol.com: 1
- gmx.de: 1
- joncanady.com: 1
- stasiak.at: 1
- dylanmarkow.com: 1
- cracklabs.com: 1
- rphome.(none): 1
- trym-desktop.(none): 1
- madriska.com: 1
- pointless.one: 1
- deefa.com: 1
- packetmonkey.org: 1
- 37signals.com: 1
- seltzer.(none): 1
- entryway.net: 1
- mdaines.com: 1
- hartwigbrandl.at: 1
- lepton.fr: 1
- gmx.at: 1
- d630.(none): 1
- deheus.net: 1
- seriousorange.com: 1
- thinkrelevance.com: 1
- ualberta.ca: 1
- cyt.ch: 1
- riopro.com.br: 1
- eeepc-gregorybr.hsd1.ct.comcast.net: 1
- andrewtimberlake.com: 1
- kubosch.no: 1
- neumeier.us: 1
- kineticweb.com: 1
- piekutowski.net: 1
- reprocessed.org: 1
- skalar.no: 1
- resartus.(none): 1
- fjeldbergconsulting.no: 1
- haslo.ch: 1
- airbladesoftware.com: 1
- sowenga.net: 1
- meuret.net: 1
- vanklinkenbergsoftware.nl: 1
- buckle.com: 1
- oneiros.fr: 1
- chromatin.ca: 1
- vrlaw.com.au: 1
- rednovalabs.com: 1
- erniemiller.org: 1
- practicingdeveloper.com: 1
- peden.biz: 1
- iki.fi: 1
- linux.com: 1
- marnen.org: 1
- markus-napp.de: 1
- lukasdiener.ch: 1
- koriroys.com: 1
- burgestrand.se: 1
- ragnarson.com: 1
- mrkn.jp: 1
- warp.es: 1
- johnford.is: 1
- defv.be: 1
- anyone.no: 1
- pkk.boulder.foraker.com: 1
- giantmonkey.de: 1
- pondurance.com: 1
- optiplexgx620.(none): 1
- lightsky.com: 1
- systino.net: 1
- free.fr: 1
- paperlesspost.com: 1
- paridans.com: 1
- vps.majesticseacreature.com: 1
- radley.com: 1
- wesgarrison.us: 1
- vitork.com: 1
- noname.(none): 1
- youscience.com: 1
- nleger.com: 1
- lucianosousa.net: 1
- insidesystems.net: 1
- arndt.io: 1
- mozilla.pe: 1
- onedoto.com: 1
- waltonhoops.com: 1
- midpackrunner.com: 1
- stefanschuessler.de: 1
- helicoid.net: 1
- covermymeds.com: 1
- inserteffect.com: 1
Issue and Pull Request metadata
Last synced: 18 days ago
Total issues: 136
Total pull requests: 92
Average time to close issues: about 3 years
Average time to close pull requests: over 1 year
Total issue authors: 123
Total pull request authors: 54
Average comments per issue: 4.04
Average comments per pull request: 2.47
Merged pull request: 24
Bot issues: 0
Bot pull requests: 0
Past year issues: 8
Past year pull requests: 12
Past year average time to close issues: about 2 months
Past year average time to close pull requests: about 1 month
Past year issue authors: 7
Past year pull request authors: 9
Past year average comments per issue: 1.0
Past year average comments per pull request: 1.25
Past year merged pull request: 3
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- packetmonkey (3)
- ndbroadbent (3)
- mojavelinux (3)
- jyxjjj (2)
- reiz (2)
- brandoncc (2)
- smithtim (2)
- practicingruby (2)
- Apteryks (2)
- MrSerth (2)
- mrotteveel (1)
- vikash159 (1)
- beatrizodsk (1)
- TheNotary (1)
- orangethunder (1)
Top Pull Request Authors
- petergoldstein (10)
- gettalong (4)
- kbrock (3)
- pointlessone (3)
- maerch (2)
- WhatWasThatt (2)
- JINMAZUER (2)
- Backbone81 (2)
- olleolleolle (2)
- defkode (2)
- skiz (2)
- LukasSkywalker (2)
- bgvo (2)
- afdev82 (2)
- Burgestrand (2)
Top Issue Labels
- confirmed-bug (3)
- change-request (3)
- chore (2)
- documentation (2)
- research (1)
- table (1)
Top Pull Request Labels
Package metadata
- Total packages: 2
-
Total downloads:
- rubygems: 179,843,339 total
- Total docker downloads: 119,151,814
- Total dependent packages: 290 (may contain duplicates)
- Total dependent repositories: 7,295 (may contain duplicates)
- Total versions: 84
- Total maintainers: 8
gem.coop: prawn
Prawn is a fast, tiny, and nimble PDF generator for Ruby
- Homepage: http://prawnpdf.org/
- Documentation: http://www.rubydoc.info/gems/prawn/
- Licenses: Nonstandard,GPL-2.0-only,GPL-3.0-only
- Latest release: 2.5.0 (published almost 2 years ago)
- Last Synced: 2026-03-02T02:03:07.800Z (2 days ago)
- Versions: 42
- Dependent Packages: 0
- Dependent Repositories: 0
- Downloads: 89,925,415 Total
- Docker Downloads: 59,575,907
-
Rankings:
- Dependent repos count: 0.0%
- Dependent packages count: 0.0%
- Average: 0.226%
- Downloads: 0.306%
- Docker downloads count: 0.598%
- Maintainers (8)
rubygems.org: prawn
Prawn is a fast, tiny, and nimble PDF generator for Ruby
- Homepage: http://prawnpdf.org/
- Documentation: http://www.rubydoc.info/gems/prawn/
- Licenses: Nonstandard,GPL-2.0-only,GPL-3.0-only
- Latest release: 2.5.0 (published almost 2 years ago)
- Last Synced: 2026-03-01T22:31:46.912Z (2 days ago)
- Versions: 42
- Dependent Packages: 290
- Dependent Repositories: 7,295
- Downloads: 89,917,924 Total
- Docker Downloads: 59,575,907
-
Rankings:
- Dependent packages count: 0.15%
- Stargazers count: 0.284%
- Downloads: 0.359%
- Dependent repos count: 0.377%
- Average: 0.46%
- Docker downloads count: 0.735%
- Forks count: 0.854%
- Maintainers (8)
Dependencies
- pdf-inspector >= 1.2.1, < 2.0.a development
- pdf-reader ~> 1.4, >= 1.4.1 development
- prawn-dev ~> 0.3.0 development
- prawn-manual_builder >= 0.3.0 development
- matrix ~> 0.4
- pdf-core ~> 0.9.0
- ttfunk ~> 1.7
- actions/cache v2 composite
- actions/checkout v1 composite
- ruby/setup-ruby v1 composite
Score: 33.28738921539967