2017-06-27 3 views
0

Dans la semaine dernière, j'ai travaillé dans l'automatisation de la génération de facturation pour une organisation que je soutiens. Le processus se compose de 3 étapes:Impression html en pdf ne fonctionne pas comme prévu dans ni pdfkit ni weasyprint

  1. produire de la facture
  2. facture d'impression en pdf
  3. facture
  4. d'envoi attaché dans un e-mail

J'éprouve des difficultés dans la deuxième étape où J'ai besoin d'imprimer un pdf à partir d'une URL renvoyée par le module de génération de facture. J'ai essayé 2 différents modules de python, mais n'est d'imprimer le document correctement:

I) lors de l'impression par le navigateur: Ceci est le résultat souhaité où le code HTML est imprimé à l'aide pleine page

enter image description here

II) using pdfkit: Pour une raison quelconque, pdfkit considère que le HTML a une page supplémentaire (2 au lieu de 1) et imprime les deux dans la même page. Je n'ai aucune idée qu'il se comporte comme this.enter image description ici

enter image description here

III) avec l'impression WeasyPrint: a du travail, mais pas non plus avec l'effet inverse de PDFKit. La facture ne rentre pas dans la page.

Pour clarifier davantage le problème, la facture est une grande table html avec beaucoup de styles colspan et inline. Je voudrais un peu d'aide pour comprendre pourquoi les pdf ne se comportent pas bien et que dois-je faire pour le réparer.

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title></title>  
    <style type="text/css"> a {text-decoration: none} </style> 
</head> 
<body text="#000000" link="#000000" alink="#000000" vlink="#000000"> 
    <table width="100%" cellpadding="0" cellspacing="0" border="0"> 
    <tbody> 
     <tr> 
     <td width="50%">&nbsp;</td> 
     <td align="center"> 
      <a name="JR_PAGE_ANCHOR_0_1"></a> 
      <table style="width: 892.5px; border-collapse: collapse; empty-cells: show" cellpadding="0" cellspacing="0" border="0" bgcolor="white"> 
      <tbody> 
       <tr> 
       <td style="width: 31.5px; height: 1.5px;"></td> 
       <td style="width: 1.5px; height: 1.5px;"></td> 
       <td style="width: 3px; height: 1.5px;"></td> 
       <td style="width: 114px; height: 1.5px;"></td> 
       <td style="width: 16.5px; height: 1.5px;"></td> 
       <td style="width: 10.5px; height: 1.5px;"></td> 
       <td style="width: 4.5px; height: 1.5px;"></td> 
       <td style="width: 16.5px; height: 1.5px;"></td> 
       <td style="width: 1.5px; height: 1.5px;"></td> 
       <td style="width: 67.5px; height: 1.5px;"></td> 
       <td style="width: 27px; height: 1.5px;"></td> 
       <td style="width: 7.5px; height: 1.5px;"></td> 
       <td style="width: 21px; height: 1.5px;"></td> 
       <td style="width: 69px; height: 1.5px;"></td> 
       <td style="width: 15px; height: 1.5px;"></td> 
       <td style="width: 25.5px; height: 1.5px;"></td> 
       <td style="width: 27px; height: 1.5px;"></td> 
       <td style="width: 6px; height: 1.5px;"></td> 
       <td style="width: 4.5px; height: 1.5px;"></td> 
       <td style="width: 10.5px; height: 1.5px;"></td> 
       <td style="width: 21px; height: 1.5px;"></td> 
       <td style="width: 40.5px; height: 1.5px;"></td> 
       <td style="width: 34.5px; height: 1.5px;"></td> 
       <td style="width: 37.5px; height: 1.5px;"></td> 
       <td style="width: 1.5px; height: 1.5px;"></td> 
       <td style="width: 1.5px; height: 1.5px;"></td> 
       <td style="width: 1.5px; height: 1.5px;"></td> 
       <td style="width: 51px; height: 1.5px;"></td> 
       <td style="width: 49.5px; height: 1.5px;"></td> 
       <td style="width: 15px; height: 1.5px;"></td> 
       <td style="width: 126px; height: 1.5px;"></td> 
       <td style="width: 1.5px; height: 1.5px;"></td> 
       <td style="width: 31.5px; height: 1.5px;"></td> 
       </tr> 
       <tr valign="top"> 
       <td colspan="33" style="width: 892.5px; height: 30px;"></td> 
       </tr> 
       <tr valign="top"> 
       <td colspan="33" style="width: 892.5px; height: 4.5px;"></td> 
       </tr> 
       <tr valign="top"> 
       <td style="width: 31.5px; height: 1.5px;"></td> 
       <td colspan="31" style="border-top: 1.5px dashed #000000; "></td> 
       <td style="width: 31.5px; height: 1.5px;"></td> 
       </tr> 
       <tr valign="top"> 
       <td colspan="33" style="width: 892.5px; height: 30px;"></td> 
       </tr> 
       . 
       . 
       . 

Merci beaucoup!

Répondre

0

Depuis que vous utilisez python, vous pouvez utiliser des plugins comme fpdf. J'ai moi-même essayé html et xhtml en pdf mais échoué. Fpdf plugin travaillé.

+0

Merci pour la réponse @Adithya! J'ai essayé 'fpdf' mais il a commencé à lancer différentes erreurs que je n'avais pas faites dans le débogage. Ma solution finale n'était pas idéale mais bonne pour commencer. Au lieu de faire la conversion 'html> pdf', j'ai dû faire un' html> png> pdf' pour obtenir le bon dimensionnement. Étant donné que la plupart des documents seront imprimés, cette méthode est acceptée pour commencer à exécuter le processus. – fernandosjp