Project

htmlToPdf

0.0
Low commit activity in last 3 years
A long-lived project that still receives updates
HtmlToPdf lets any Rails controller action be downloaded as a PDF. Request the action with a PDF format and the gem renders the view exactly as the browser would, then converts it to PDF via wkhtmltopdf. Supports Rails 7.x and 8.x.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

>= 13.0
>= 2.4
 Project Readme

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.default_options = { 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"