HtmlToPdf
This gem will generate pdf of the action's html requested as pdf.
Supports Rails 7.x and Rails 8.x (latest).
Installation
Install and setup wkhtmltopdf. Please refer https://wkhtmltopdf.org for more details.
Add this line to your application's Gemfile:
gem 'htmlToPdf'
And then execute:
$ bundle
Or install it yourself as:
$ gem install htmlToPdf
Usage
write following code inside Application Controller
before_action :html_to_pdf
in views:
<%= link_to 'download', your_action_path(:format => 'pdf') %>
customizing pdf downloads:
you can customize pdf like you can give the name and layout for the pdf.to customize pdf use this following example:
<%= link_to 'download', your_action_path(:format => 'pdf',:pdf_options => {title: 'pdf_name', layout: 'layout_name'}) %>
this will generate the pdf of your_action named pdf_name.pdf with layout layout_name.
one can call any action as pdf and he get the pdf file of that action's html.
customizing page padding and wkhtmltopdf options:
<%= link_to 'download', your_action_path(:format => 'pdf', :pdf_options => {
title: 'pdf_name',
layout: 'layout_name',
padding: '10mm',
wkhtmltopdf_options: {
orientation: 'Landscape',
page_size: 'A4',
margin_top: '15mm',
grayscale: true
}
}) %>
padding is a shorthand that sets all four margins at once. wkhtmltopdf_options accepts any option the wkhtmltopdf CLI supports (underscores or dashes both work, e.g. margin_top, page_size, orientation, dpi, zoom, encoding, javascript_delay, disable_smart_shrinking, ...) — see https://wkhtmltopdf.org for the full list. Boolean-style flags (e.g. grayscale: true) are passed as bare flags; anything else is passed as --flag value.
Security note: pdf_options is read from the request's query params and forwarded verbatim as CLI flags to wkhtmltopdf. If your_action_path is publicly reachable, anyone can pass arbitrary wkhtmltopdf flags to it. Only expose the pdf format on actions where that's acceptable, or filter pdf_options yourself before it reaches html_to_pdf (e.g. in a before_action that runs earlier).
Configuration
Set gem-wide defaults in an initializer (e.g. config/initializers/html_to_pdf.rb):
HtmlToPdf.configure do |config|
# Path to the wkhtmltopdf binary. Defaults to "wkhtmltopdf" (resolved via $PATH).
# Useful when it's installed via the wkhtmltopdf-binary gem or a custom location.
config.wkhtmltopdf_path = Wkhtmltopdf.path # or an absolute path string
# Layout used when pdf_options[:layout] isn't given. Defaults to "application".
config.default_layout = "pdf"
# wkhtmltopdf options applied to every PDF, merged under any per-request
# padding/wkhtmltopdf_options. Defaults to {}.
config. = { dpi: 300, margin_top: "10mm" }
# Directory temporary .html/.pdf files are written to. Defaults to Rails.root/tmp.
config.tmp_dir = Rails.root.join("tmp", "pdfs")
end
Make sure you have configured your asset_host in application's Rails environment, otherwise assets might not be loaded properly.
config.action_controller.asset_host = "YOUR_ASSETS_HOST"