PDFkit is a powerful library which generates PDF from HTML + CSS. It uses “wkhtmltopdf” on the back-end which renders HTML using Webkit. Here is a simple example which describes the installation of “wkhtmltopdf” and usages of pdfkit. I have used rails 3.2.8 and ruby 1.9.3 as my environment.
Step-1:
Install the “wkhtmltopdf” library
Download the “wkhtmltopdf” library from the link
http://code.google.com/p/wkhtmltopdf/
Windows
- Download the exe file and install it.
- Remember the installation path
Linux
- Download the binary for your architecture at the http://code.google.com/p/wkhtmltopdf/downloads/list
- Extract the file to a directory that is in your PATH, such as /opt or /usr/local/bin and run from there.
For Debian/Ubuntu use the following command:
apt-get install wkhtmltopdf
Step-2: Installing PDFKit
In your bundle file write
gem 'pdfkit'
Then install
bundle install
Step-3: Configuration of PDFKit
Create a new file “pdfkit.rb” in “config/initializers/” path and write the following
If you are in windows then you need to give the path to the exe file generated after installation. If you are in linux and the path is set as the default path then you don’t need to give the path.
PDFKit.configure do |config| config.wkhtmltopdf = 'C:Program Fileswkhtmltopdfwkhtmltopdf .exe' config.default_options = { :page_size => 'Legal', :print_media_type => true } # config.root_url = "http://localhost" # Use only if your external hostname is unavailable on the server. end
Step-4: Middleware Setup
Write the following in the “config/application.rb”
require 'pdfkit' config.middleware.use PDFKit::Middleware config.threadsafe!
Step-5: Usages
Creating PDF in a file path
Now to generate the pdf file by writing down the following codes on one of your controller actions
kit = PDFKit.new"<h1>Hello</h1><p>This is PDF!!!</p>" file_path = your_file_path pdf = kit.to_file file_path
Now you can find the PDF file being generated on the file path.
Displaying PDF on browser
<p id="pdf_link"><%= link_to "Download Invoice (PDF)", order_path(@order, :format => "pdf") %></p>
Your PDF will be displayed on the browser.
You can also add “.pdf” to any of our application’s URLs to get a PDF version of that page.