Awesome Open Source
Awesome Open Source


Gem Version Build Status RubyGems Downloads


gem 'prawn-rails'

Note: prawn and prawn-table are dependencies of prawn-rails so there is no need to mention it in the projects Gemfile unless you want to use a specific version of either of those libraries.


Create a view with pdf as format and prawn as handler so filename should look like example.pdf.prawn.

It provides a helper called prawn_document which builds a PrawnRails::Document with default options. You can override any options as you please. Example:

prawn_document do |pdf|
  pdf.text "Hello World"

No need to call pdf.render, it is called by prawn_document.

You can customize the name of the generated PDF and the file's delivery format with the :filename and :disposition keys:

prawn_document(filename: "my-file.pdf", disposition: "attachment") do |pdf|
  pdf.text "Direct download incoming!"

You can also override the content disposition using the Content-Disposition HTTP header. If you've already set this, prawn-rails will not override it. Here's an example of setting the header directly:

def download
  respond_to do |format|
    format.pdf do
      headers["Content-Disposition"] = "attachment; filename=\"charts-#{}.pdf\""

You can also override the file's name from the controller via @filename:

def show
  @filename = "my_report.pdf"

If no options are given, the file's name will match to your browser's default and the delivery format will default to inline.

Default configuration

Add a prawn-rails.rb config to your Rails app under config/initializers like this:

PrawnRails.config do |config|
  config.page_layout = :portrait
  config.page_size   = "A4"
  config.skip_page_creation = false

Please note that these are the defaults.

For a list of all available options:

For a list of all metadata the the :info option supports, please see

If skip_page_creation is set to true then you have to create the first page yourself. Example:

# OR
pdf.start_new_page size: "A4", page_layout: :portrait


Hello World

# hello.pdf.prawn

prawn_document do |pdf|
  pdf.text 'Hello World!'

Using Active Record

# myproducts.pdf.prawn

prawn_document do |pdf|
  pdf.text 'Current Products are:'
  pdf.move_down 20
  pdf.table @products.collect{|p| [,p.price]}

Using Custom options

# landscape.pdf.prawn

prawn_document(page_layout: :landscape) do |pdf|
  pdf.text 'Landscape Page!'


Maintained by Weston Ganger - @westonganger

Created by Carlos Ortiz - @cortiz

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
ruby (12,190
html (10,252
pdf (394
handler (36

Find Open Source By Browsing 7,000 Topics Across 59 Categories