wkhtmltopdf aujourd’hui · Installation

wkhtmltopdf dans Docker

Debian 13 n’a aucun paquet wkhtmltopdf, ni officiel ni à elle : une image construite sur debian:13, ou sur une image de langage qui en dérive, ne peut pas l’installer. pdfkiln publie ghcr.io/jamalofski/pdfkiln, pour amd64 et arm64.

Convertir

curl -fsSO https://raw.githubusercontent.com/Jamalofski/pdfkiln/main/docker/seccomp.json
docker run --rm -i --security-opt seccomp=seccomp.json ghcr.io/jamalofski/pdfkiln wkhtmltopdf - - < page.html > page.pdf

Debian 13 slim avec le paquet Debian de pdfkiln, sous un utilisateur sans privilèges. Le point d’entrée est pdfkiln ; wkhtmltopdf ou wkhtmltoimage en premier argument passe au mode compatible.

Pourquoi un profil seccomp

Le profil par défaut de Docker n’autorise clone et unshare que sans drapeaux d’espaces de noms, ce qui bloque la sandbox de Chromium. seccomp.json est ce profil, plus clone et unshare pour les espaces de noms utilisateur, PID et réseau que crée la sandbox ; montage, cgroup, UTS et IPC restent refusés. L’intégration continue le vérifie.

--security-opt seccomp=unconfined et --cap-add SYS_ADMIN font aussi démarrer la sandbox, mais sont déconseillés : le premier retire tout le filtre, le second aide à sortir d’un conteneur. --security-opt apparmor=unconfined n’y change rien.

Polices

L’image contient les polices Liberation et DejaVu. Les modèles qui en demandent d’autres les obtiennent d’une image dérivée :

FROM ghcr.io/jamalofski/pdfkiln
USER root
RUN apt-get update && apt-get install -y --no-install-recommends fonts-noto-core \
 && rm -rf /var/lib/apt/lists/*
USER pdfkiln

Ensuite

Votre bibliothèque appelle wkhtmltopdf : son guide de migration dit comment la brancher sur pdfkiln. Sur un serveur sans Docker, le dépôt APT fait de même.