Guides de migration · Python

Remplacer wkhtmltopdf par pdfkiln dans pdfkit

python-pdfkit lance wkhtmltopdf pour from_url, from_file et from_string, trouvé dans le PATH ou dans la configuration que vous lui passez.

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 pdfkit sur pdfkiln

import pdfkit

# Nothing to do if wkhtmltopdf is in the PATH: the Debian package puts it in /usr/bin
pdfkit.from_url('https://example.com', 'out.pdf')

# Otherwise, give its path
config = pdfkit.configuration(wkhtmltopdf='/usr/bin/wkhtmltopdf')
pdfkit.from_string(html, 'out.pdf', configuration=config)

Sous Windows, pdfkiln s’installe dans C:\Program Files\wkhtmltopdf, le chemin des guides de pdfkit : pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe') continue de fonctionner.

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 pdfkit, et ce que fait pdfkiln

  • pdfkit envoie la page sur l’entrée standard et lit le PDF sur la sortie standard (- des deux côtés, avec --quiet) : pdfkiln gère les deux.
  • Sur un code de sortie non nul, pdfkit garde le PDF si l’avant-dernière ligne de la sortie d’erreur est Done : pdfkiln écrit cette ligne, hors --quiet, comme wkhtmltopdf.
  • Les images et feuilles de style locales demandent options={'enable-local-file-access': ''} ou --allow : par défaut, comme dans wkhtmltopdf 0.12.6, une page ne lit aucun autre fichier local.

Testé

La suite de tests de pdfkit 1.0.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.