Une alternative à HTMLDOC ?
Posté : 17 nov. 2008, 18:24
Bonjour,
Pour générer rapidement des documents PDF, j'utilise HTMLDOC. Comme son nom ne l'indique pas, c'est un logiciel qui prend en entrée un fichier HTML et ressort un fichier PDF. C'est peut-être moins souple que FPDF, mais c'est beaucoup plus facile pour produire rapidement des documents un peu lourds ou complexes. Par exemple, pas besoin de s'amuser à recalculer les tailles des tableaux puisque c'est le HTML qui le fait.
Avantage : c'est un exe, d'où une grande rapidité d'exécution (2 à 3 secondes pour générer un PDF de 800 pages) à partir d'une extraction de base de données et mise en forme en HTML. En plus il est accessible en ligne de commande, ce qui est nickel pour le déclencher depuis PHP.
Seul bémol de ce logiciel, c'est qu'il ne prend pas en compte les feuilles de style (peut-être qu'une prochaine version le fera - partiellement en plus - mais on ne sait pas quand elle sortira).
J'ai de plus en plus de documents HTML saisis par les utilisateurs sous FCKEditor (ou sous d'autres éditeurs Wysiwyg). Et là, problème : les feuilles de style ne sont pas utilisées et les documents imprimés sont plutôt moches.
J'essaye de trouver des solutions utilisables à partir de PHP pour faire cette génération de PDF. J'ai trouvé des trucs en ASP ou interfaçables avec de l'ASP ou online en ASP (par exemple http://www.pdfonfly.com/create-pdf.asp) , mais rien de bien sérieux pour le PHP.
Est-ce que vous connaissez un produit (même payant) qui permet de rendre comme il faut ce genre de tableau avec les couleurs, les fonds grisés, les bordures, .... Par exemple, PDFonFly (ASP) le fait parfaitement.
Pour générer rapidement des documents PDF, j'utilise HTMLDOC. Comme son nom ne l'indique pas, c'est un logiciel qui prend en entrée un fichier HTML et ressort un fichier PDF. C'est peut-être moins souple que FPDF, mais c'est beaucoup plus facile pour produire rapidement des documents un peu lourds ou complexes. Par exemple, pas besoin de s'amuser à recalculer les tailles des tableaux puisque c'est le HTML qui le fait.
Avantage : c'est un exe, d'où une grande rapidité d'exécution (2 à 3 secondes pour générer un PDF de 800 pages) à partir d'une extraction de base de données et mise en forme en HTML. En plus il est accessible en ligne de commande, ce qui est nickel pour le déclencher depuis PHP.
Seul bémol de ce logiciel, c'est qu'il ne prend pas en compte les feuilles de style (peut-être qu'une prochaine version le fera - partiellement en plus - mais on ne sait pas quand elle sortira).
J'ai de plus en plus de documents HTML saisis par les utilisateurs sous FCKEditor (ou sous d'autres éditeurs Wysiwyg). Et là, problème : les feuilles de style ne sont pas utilisées et les documents imprimés sont plutôt moches.
J'essaye de trouver des solutions utilisables à partir de PHP pour faire cette génération de PDF. J'ai trouvé des trucs en ASP ou interfaçables avec de l'ASP ou online en ASP (par exemple http://www.pdfonfly.com/create-pdf.asp) , mais rien de bien sérieux pour le PHP.
Est-ce que vous connaissez un produit (même payant) qui permet de rendre comme il faut ce genre de tableau avec les couleurs, les fonds grisés, les bordures, .... Par exemple, PDFonFly (ASP) le fait parfaitement.
Code : Tout sélectionner
<table style="BORDER-COLLAPSE: collapse" height="129" cellspacing="0" cellpadding="0" width="514" border="1" bordercolor="black" x:str="">
<colgroup><col style="WIDTH: 74pt" width="99"></col><col style="WIDTH: 49pt" width="65"></col><col style="WIDTH: 35pt" width="46"></col><col style="WIDTH: 48pt" width="64"></col><col style="WIDTH: 32pt" width="42"></col><col style="WIDTH: 35pt" width="46"></col><col style="WIDTH: 29pt" width="39"></col><col style="WIDTH: 35pt" width="46"></col><col style="WIDTH: 29pt" width="38"></col><col style="WIDTH: 29pt" span="2" width="39"></col><col style="WIDTH: 35pt" width="46"></col><col style="WIDTH: 29pt" width="38"></col><col style="WIDTH: 35pt" width="46"></col></colgroup>
<tbody>
<tr style="HEIGHT: 15pt" height="20">
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; WIDTH: 74pt; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 15pt; BACKGROUND-COLOR: silver" width="99" height="20"><font face="Trebuchet MS" color="#800000" size="2"><strong><em> </em></strong></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 49pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="65"><font face="Trebuchet MS" color="#800000" size="1"><strong><em> </em></strong></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 83pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="110" colspan="2"><font face="Trebuchet MS" color="#800000" size="1"><strong><em>France</em></strong></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 67pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="88" colspan="2"><font face="Trebuchet MS" color="#800000" size="1"><strong><em>Région</em></strong></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 64pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="85" colspan="2" x:num=""><font face="Trebuchet MS" color="#800000" size="1"><strong><em>27</em></strong></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 58pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="77" colspan="2" x:num=""><font face="Trebuchet MS" color="#800000" size="1"><strong><em>12</em></strong></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 64pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="85" colspan="2" x:num=""><font face="Trebuchet MS" color="#800000" size="1"><strong><em>57</em></strong></font></td>
<td style="BORDER-RIGHT: black 1pt solid; BORDER-TOP: windowtext 1pt solid; BORDER-LEFT: windowtext; WIDTH: 64pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="84" colspan="2" x:num=""><strong><em><font face="Trebuchet MS" color="#800000" size="1">88</font></em></strong></td>
</tr>
<tr style="HEIGHT: 15pt" height="20">
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 15pt; BACKGROUND-COLOR: silver" height="20"><font face="Trebuchet MS" size="1"> </font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; WIDTH: 49pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver" width="65"><font face="Trebuchet MS" size="1">Définition</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Etab.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Eff.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Etab.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Eff.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Etab.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Eff.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Etab.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Eff.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Etab.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Eff.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Etab.</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: silver">
<p align="right"><font face="Trebuchet MS" size="1">Eff.</font></p>
</td>
</tr>
<tr style="HEIGHT: 30pt" height="40">
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 30pt; BACKGROUND-COLOR: white" height="40"><font face="Trebuchet MS" size="1">Insee</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; WIDTH: 49pt; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" width="65"><font face="Trebuchet MS" size="1">NES 16 : EG<sup>1</sup></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right" x:num="10702"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1">659</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right" x:num="3041"><font size="1">246</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right" x:num=""><font size="1">82</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right" x:num="4434"><font size="1">203</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right" x:num=""><font size="1">128</font></td>
<td style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 0.5pt solid; BACKGROUND-COLOR: white" align="right"><font size="1"></font></td>
</tr>
<tr style="HEIGHT: 15.75pt" height="21">
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext 1pt solid; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15.75pt; BACKGROUND-COLOR: silver" height="21">
<p align="left"><font face="Trebuchet MS" size="1">SESSI</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; WIDTH: 49pt; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" width="65">
<div align="left"></div>
<p align="left"><font face="Trebuchet MS" size="1">NES 16 : EG<sup>1</sup></font><font face="Trebuchet MS" size="1"> <br />
</font></p>
</td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1">2 716</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1">209 857</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1">160</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1">6 939</font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 0.5pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
<td style="BORDER-RIGHT: windowtext 1pt solid; BORDER-TOP: windowtext; BORDER-LEFT: windowtext; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: silver" align="right"><font size="1"></font></td>
</tr>
</tbody>
</table>