web-dev-qa-db-fra.com

Comment gérer la pagination PDF dans PhantomJS

J'utilise PhantomJS pour créer des PDF à partir de html.

Cela fonctionne bien, mais je ne peux pas savoir comment travailler avec la pagination; Je veux créer une page pour chaque div de mon document, mais je ne trouve rien dans le document. sur la pagination.

Si mon document est court, il ne fait qu'une page, et s'il est plus grand, il crée une seconde page vide et mon contenu est dans la première page qui devient très longue.

Une idée ? (J'utilise le module phantomJS-node pour nodeJS)

26
Rayjax

PhantomJS s'occupe de l'implémentation css du webkit. Pour implémenter des sauts de page manuels, vous pouvez utiliser ces propriétés:

  • page-break-before: auto/toujours/éviter/...
  • page-break-inside: auto/toujours/éviter/...
  • page-break-after: auto/toujours/éviter/...

Par exemple, un div peut être:

 <div style="page-break-before:always;"><!-- content --></div>

ou

<div style="page-break-after:always;"> <!-- content --></div>

Le contrôle des sauts de page lors de l'impression dans Webkit n'est parfois pas facile, en particulier avec de longues tables html.

45
Cybermaxs

Vous devriez voir ceci problème avec différents conseils.

Essayez d'utiliser display:inline-block dans l'élément que vous ne souhaitez pas interrompre car le saut de page. Le raisonnement derrière est que le webkit essaie déjà de préserver les images de la rupture. Et les images sont des blocs en ligne.

4
gusgard

Très tard, mais j'ai eu des problèmes avec "break-inside: éviter" en utilisant JsReport qui ont été corrigés en changeant le type d'affichage de l'élément en inline-block. Plus d'informations ici: https://github.com/ariya/phantomjs/issues/10638

4
R. Salisbury

La pagination fonctionne bien avec:

 var page = webPage.create();

 page.paperSize = {
  format: 'A4',
  orientation: 'portrait',
  margin: '1cm'
 }

Consultez la documentation ici http://phantomjs.org/api/webpage/property/paper-size.html

1
sbalcerowski