Guides de migration · Ruby on Rails

Remplacer wkhtmltopdf par pdfkiln dans wicked_pdf

wicked_pdf rend les vues Rails en PDF avec wkhtmltopdf, installé en général par la gem wkhtmltopdf-binary. Retirez la gem, installez pdfkiln, faites pointer wicked_pdf dessus.

1. Installer pdfkiln

Sous Debian et Ubuntu, amd64 et arm64 : le dépôt APT signé installe /usr/bin/wkhtmltopdf, à la place du paquet wkhtmltox, et apporte les correctifs de Chromium avec apt upgrade.

curl -fsS https://apt.pdfkiln.org/pdfkiln-archive-keyring.asc | sudo tee /usr/share/keyrings/pdfkiln-archive-keyring.asc > /dev/null
printf 'Types: deb\nURIs: https://apt.pdfkiln.org\nSuites: stable\nComponents: main\nSigned-By: /usr/share/keyrings/pdfkiln-archive-keyring.asc\n' \
  | sudo tee /etc/apt/sources.list.d/pdfkiln.sources
sudo apt update && sudo apt install pdfkiln

Ailleurs : l’image Docker, les archives et le programme d’installation pour Windows.

2. Brancher wicked_pdf sur pdfkiln

# Gemfile: remove the gem that bundled wkhtmltopdf
# gem 'wkhtmltopdf-binary'

# config/initializers/wicked_pdf.rb
WickedPdf.config = { exe_path: '/usr/bin/wkhtmltopdf' }

3. Vérifier

wkhtmltopdf --version
# wkhtmltopdf 0.12.6 (with patched qt), pdfkiln 1.0.3, Chromium 156.0.8078.73

La réponse commence comme celle de wkhtmltopdf 0.12.6 : les bibliothèques qui lisent la version continuent de fonctionner.

Ce qu’attend wicked_pdf, et ce que fait pdfkiln

  • wicked_pdf lit wkhtmltopdf --version avec wkhtmltopdf\s*(\d*\.\d*\.\d*\w*) pour choisir sa syntaxe : la réponse de pdfkiln commence par wkhtmltopdf 0.12.6, la syntaxe actuelle reste.
  • Les en-têtes et pieds de page rendus depuis des vues sont des pages --header-html et --footer-html : leur JavaScript, et les variables que wkhtmltopdf met dans leur adresse (page, topage, section…), fonctionnent sans changement.

Testé

La suite de tests de wicked_pdf 2.7.0 passe avec pdfkiln à la place de wkhtmltopdf (Ubuntu, job d’intégration continue libraries).

Un rendu diffère ? Ouvrez un ticket avec le HTML et les deux PDF : github.com/Jamalofski/pdfkiln/issues. Les différences connues sont listées dans le README.