[Awesome Ruby Gem] Use pdfkit gem to create PDFs using plain old HTML+CSS on the backend which renders HTML using Webkit
PDFKit
Create PDFs using plain old HTML+CSS. Uses wkhtmltopdf - http://wkhtmltopdf.org/downloads.html on the back-end which renders HTML using Webkit.
Installation
imkit
You can install it as a gem:
1 | gem install pdfkit |
or add it into a Gemfile (Bundler):
1 | # Gemfile |
Then, run bundle install
.
1 | bundle install |
wkhtmltopdf
-
- Install by hand (recommended):
-
You can install it as a gem:
1
gem install wkhtmltopdf-binary
or add it into a Gemfile (Bundler):
1
2
3
4
5# Gemfile
# zakird/wkhtmltopdf_binary_gem: Ruby gem containing easily installable access to wkhtmltopdf application
# https://github.com/zakird/wkhtmltopdf_binary_gem
gem 'wkhtmltoimage-binary', '0.12.6.5'Then, run
bundle install
.1
bundle install
Usages
1 | # PDFKit.new takes the HTML and any options for wkhtmltopdf |
Resolving relative URLs and protocols
If the source HTML has relative URLs (/images/cat.png
) or protocols (//example.com/site.css
) that need to be resolved, you can pass :root_url
and :protocol
options to PDFKit:
1 | PDFKit.new(html, root_url: 'http://mysite.com/').to_file |
Using cookies in scraping
If you want to pass a cookie to cookie to pdfkit to scrape a website, you can pass it in a hash:
1 | kit = PDFKit.new(url, cookie: {cookie_name: :cookie_value}) |
Configuration
If you’re on Windows or you would like to use a specific wkhtmltopdf you installed, you will need to tell PDFKit where the binary is. PDFKit will try to intelligently guess at the location of wkhtmltopdf by running the command which wkhtmltopdf. If you are on Windows, want to point PDFKit to a different binary, or are having trouble with getting PDFKit to find your binary, please manually configure the wkhtmltopdf location. You can configure PDFKit like so:
1 | # config/initializers/pdfkit.rb |
Middleware
PDFKit comes with a middleware that allows users to get a PDF view of any page on your site by appending .pdf to the URL.
Rails apps
1 | # in application.rb(Rails3) or environment.rb(Rails2) |
With PDFKit options
1 | # options will be passed to PDFKit.new |
With conditions to force download
1 | # force download with attachment disposition |
Saving the generated .pdf
to disk
Setting the PDFKit-save-pdf
header will cause PDFKit to write the generated .pdf
to the file indicated by the value of the header.
For example:
1 | headers['PDFKit-save-pdf'] = 'path/to/saved.pdf' |
Will cause the .pdf
to be saved to path/to/saved.pdf
in addition to being sent back to the client. If the path is not writable/non-existent the write will fail silently. The PDFKit-save-pdf header is never sent back to the client.
References
[2] pdfkit | RubyGems.org | your community gem host - https://rubygems.org/gems/pdfkit
[7] prawnpdf/prawn: Fast, Nimble PDF Writer for Ruby - https://github.com/prawnpdf/prawn
[9] HexaPDF - Home - https://hexapdf.gettalong.org/index.html