web-dev-qa-db-fra.com

wkhtmltopdf avec arrière-plan pleine page

J'utilise wkhtmltopdf pour générer un fichier PDF qui va sur une imprimante et j'ai des problèmes pour que le contenu remplisse une page entière dans le PDF résultant.

Dans le CSS, j'ai défini la largeur et la hauteur sur 2480 X 3508 pixels (a4 300 dpi) et lors de la création du PDF j'utilise 0 pour les marges mais je me retrouve toujours avec une petite bordure blanche pour à droite et en bas. A également essayé d'utiliser mm et pourcentage mais avec le même résultat.

J'aurais besoin de quelqu'un pour fournir un exemple sur la façon de styliser le HTML et les options à utiliser en ligne de commande afin que les pages PDF PDF remplissent tout l'arrière-plan. Une façon pourrait être de inclure des saignements (cela peut être nécessaire de toute façon), mais tous les conseils sont les bienvenus. Pour le moment, je crée une grande page HTML (sans les sauts de page CSS - pourrait aider?) mais si nécessaire, il serait bien de générer chaque page séparément puis de nourrir tous à wkhtmltopdf.

27
Lorentz

wkhtmltopdf v 0.11.0 rc2

Ce qui a fini par fonctionner:

wkhtmltopdf --margin-top 0 --margin-bottom 0 --margin-left 0 --margin-right 0 <url> <output>

raccourci à

wkhtmltopdf -T 0 -B 0 -L 0 -R 0 <url> <output>

tilisation de html depuis stdin (Note tiret)

echo "<h1>Testing Some Html</h2>" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - <output>

tilisation de html de stdin à stdout

echo "Tester du HTML" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - test.pdf

echo "Tester du HTML" | wkhtmltopdf -T 0 -B 0 -L 0 -R 0 - -> test.pdf

Ce que n'a pas fonctionné:

  • En utilisant --dpi
  • En utilisant --page-width and --page-height
  • En utilisant --zoom
33
Ryan Q

Je me rends compte que c'est vieux et froid, mais juste au cas où quelqu'un trouverait cela et aurait le même problème/similaire, voici une solution de contournement qui a fonctionné pour moi après quelques essais et erreurs.

J'ai créé un simple filler.html comme:

<!DOCTYPE html>
<html>
<head>
</head>
<body style="margin: 0; padding: 0;">
<div style="height: 30mm; background-color: #F7EBD4;">
&nbsp;
</div>
</body>
</html>

Utilisez un code HTML valide (! DOCTYPE est important) et uniquement des styles en ligne. Faites correspondre la couleur d'arrière-plan à celle du document principal et utilisez une hauteur égale ou supérieure à vos marges.

J'exécute la version 0.12.0 avec les arguments suivants:

wkhtmltopdf --print-media-type --orientation portrait --page-size A4
 --encoding UTF-8 --T 10mm --B 10mm --L 0mm --R 0mm
 --header-html filler.html --footer-html filler.html - - <file.html >file.pdf

En espérant que cela aide quelqu'un ...

8
savedario

À http://code.google.com/p/wkhtmltopdf/issues/detail?id=359 J'ai découvert que plus de gens "souffraient" de ce bogue. Le --dpi 300 la solution de contournement n'a pas fonctionné pour moi, j'ai dû définir --zoom 1.045 pour zoomer un peu ce qui a fait disparaître la bordure extra droite et inférieure ...

6
lmeurs

Nous venons de résoudre le même problème en utilisant --disable-smart-shrinking option.

5
hangy

Fonctionne bien pour moi avec les options -B 0 -L 0 -R 0 -T 0 et en utilisant votre astuce pour configurer un div au format A4.

Avez-vous pensé à utiliser body {margin: 0; padding: 0;} en haut de votre CSS?

Je ne peux pas vous aider avec les sauts de page CSS car je n'ai pas encore testé ces erreurs, cependant, vous pouvez exécuter des scripts sur la page pour faire des choses intelligentes. Voici un exemple jQuery de la façon de diviser le contenu en morceaux de taille de page en fonction de la longueur du contenu. Si vous pouvez l'adapter pour travailler avec wkhtmltopdf, veuillez poster ici!

http://www.script-tutorials.com/demos/79/index.html

5
ʍǝɥʇɐɯ

J'utilise la version 0.12.2.1 et le réglage:

body { padding: 0; margin 0; }
div.page-layout { height: 295.5mm; width: 209mm;}

travaillé pour moi.

Bien sûr, vous devez ajouter 0 marges en:

wkhtmltopdf -T 0 -B 0 -L 0 -R 0
4
srokatonie

Ce que vous rencontrez est un bug.

Vous devrez définir le --dpi option lors de la conversion du fichier. Dans votre cas, vous voudrez probablement --dpi 300, mais qui peut être réglé plus bas.

1
Paul Haggo