Yesterday, while trying an elegant way to add pdf functionalities to our last application, I discovered RailsPdf that acts on top of the well known pdf-writer gem adding the amazing ability to move all the pdf-writer instruction in a .rpdf view file!
By act in this way you are able to keep your controller clean and to add your pdf rendering among with all the others (rss,ics, ecc..) by using the respond_to block
Let’s view a sample of this:
Installation
We first need to install both RailsPdf and PdfWriter, to do this just point your terminal inside a fresh rails application and write:
gem install pdf-writer ruby script/plugin install svn://rubyforge.org/var/svn/railspdfplugin/railspdf
Configuration
Next we have to add a line in our environment.rb file that tells our application how to work with .pdf files:
Mime::Type.register "application/pdf", :pdf
First try
Let’s now create a controller with an action that can render both .html and .pdf formats:
class DemoController < ApplicationController
def index
respond_to do |wants|
wants.pdf { render :template=>’pdfindex’ }
wants.html
end
end
end
Now we have just to write our ‘pdfindex.rpdf’ file; railspdf plugin help us giving in our view a ‘pdf’ variable that is an instance of PDF::Writer that we can use to create our output:
pdf.select_font "Times-Roman" pdf.text "Hello word!", :font_size => 72, :justification => :center
Save the pdf to a file
If we need to store somewhere the pdf just created we can use the render_to_string function as follow:
# this variable tell railspdf plugin not to add header infos while creating the pdf
@rails_pdf_inline = 1
f = File.open(File.join(RAILS_ROOT,"pdf","demopdf"), ‘w’)
f.write(render_to_string :template=>’pdfindex’)
f.close
Conclusions
RailsPdf is a very simple yet useful plug-in that helped me keep my controllers clean. Hope it will be useful to you too.