1619 votes

Convertir HTML + CSS PDF avec PHP?

Ok, je suis maintenant à se taper la tête contre un mur de briques avec celui-ci.

J'ai un code HTML (pas de XHTML) un document qui rend bien dans Firefox 3 et internet explorer 7. Il utilise assez CSS de base pour le style et les rend beaux en HTML.

Je suis maintenant, après un chemin de conversion au format PDF. J'ai essayé:

  • DOMPDF: il avait d'énormes problèmes avec les tables. J'ai pris en compte mes grands tableaux imbriqués et il a aidé (avant c'était juste de consommer jusqu'à 128M de mémoire, puis la mort-c'est ma limite sur la mémoire en php.ini), mais ça fait un désordre complet des tables et ne semble pas pour obtenir des images. Les tables étaient juste des trucs de base avec certains styles de bordure pour ajouter quelques lignes à plusieurs points;
  • HTML2PDF et HTML2PS: en fait j'ai eu plus de chance avec cette. Elle a rendu certaines images (toutes les images sont Google Chart Url) et la mise en forme du tableau était beaucoup mieux, mais il semblait avoir une certaine complexité du problème, je n'ai pas encore appris et gardé en train de mourir avec des inconnus node_type() erreurs. Vous ne savez pas où aller à partir d'ici; et
  • Htmldoc: cela semble fonctionner sur HTML de base, mais a presque pas de soutien pour le CSS que ce soit, de sorte que vous devez tout faire en HTML (je ne savais pas que c'était encore en 2001 dans Htmldoc-terre...) il est donc inutile pour moi.

J'ai essayé une application Windows appelé Html2Pdf Pilote qui fait un bon travail, mais j'ai besoin de quelque chose qui à un minimum fonctionne sur Linux et idéalement s'exécute à la demande via PHP sur le Serveur.

J'ai vraiment ne peux pas croire que je suis coincé. Ai-je raté quelque chose?

667voto

Mic Points 13418

Jetez un oeil à WKHTMLTOPDF . Il est open source, basé sur webkit et gratuit.

Nous avons écrit un petit tutoriel ici.

551voto

SchizoDuckie Points 6420

Jetez un oeil à PrinceXML.

C'est certainement le meilleur HTML/CSS PDF convertisseur là, bien qu'il n'est pas gratuit (Mais bon, votre programmation n'est pas libre non plus, donc si il vous permet d'économiser de 10 heures de travail, vous êtes chez vous gratuitement.)

Ah oui, ai-je mentionné que c'est la première (et sans doute le seul) HTML2PDF solution complète ACID2!?

PrinceXML Échantillons

150voto

cletus Points 276888

Après quelques recherches, et en général de tirer les cheveux, la solution semble être HTML2PDF. DOMPDF a fait un travail terrible avec des tables, des frontières et même modérément complexes de mise en page et de htmldoc semble assez solide, mais est presque entièrement les feuilles de style CSS ignorant et je ne veux pas revenir à faire la mise en page HTML sans CSS juste pour que programme de.

HTML2PDF regardé le plus prometteur, mais j'ai continué à avoir cette erreur bizarre à peu près nulle référence arguments pour node_type. J'ai enfin trouvé la solution à cette question. Fondamentalement, PHP 5.1.x a bien fonctionné avec la regex remplace (preg_replace_*) sur les cordes de n'importe quelle taille. PHP 5.2.1 introduit un php.ini config directive appelée pcre.backtrack_limit. Ce que cette config paramètre n'est les limites de la longueur de la chaîne pour laquelle la comparaison est effectuée. Pourquoi cela a été introduit, je ne sais pas. La valeur par défaut a été choisi à 100 000. Pourquoi ce faible valeur? Encore une fois, aucune idée.

Un bug a été soulevée à l'encontre de PHP 5.2.1 pour ce, qui est encore ouvert près de deux ans plus tard.

Ce qui est horrible, c'est que lorsque la limite est dépassée, remplacer juste silencieusement échoue. Au moins si une erreur a été recueilli et enregistré, vous auriez une indication de ce qui s'est passé, pourquoi et ce qu'il faut changer pour le fixer. Mais non.

J'ai donc un 70k fichier HTML pour le transformer en PDF. Il requiert les éléments suivants php.paramètres ini:

  • pcre.backtrack_limit = 2000000; # probablement plus que ce que j'ai besoin mais c'est OK
  • memory_limit = 1024M; # oui, un gigaoctet; et
  • max_execution_time = 600; # oui, 10 minutes.

Maintenant, le lecteur attentif aura peut-être remarqué que mon fichier HTML est plus petit que 100. La seule raison pour laquelle je peux deviner pourquoi j'ai frappé ce problème, c'est que html2pdf fait une conversion en xhtml en tant que partie du processus. Peut-être que m'a fallu plus d' (bien que près de 50% de la météorisation semble étrange). Quel que soit le cas, le ci-dessus a travaillé.

Maintenant, html2pdf est un mangeur de ressources. Mon 70k fichier prend environ 5 minutes et à moins de 500-600M de RAM pour créer un 35 page du fichier PDF. Pas assez rapide (de loin) pour un vrai temps de téléchargement, malheureusement, et l'utilisation de la mémoire met l'utilisation de la mémoire ratio de l'ordre de 1000 à 1 (600M de RAM pour un 70k fichier), ce qui est tout à fait ridicule.

Malheureusement, c'est le meilleur que j'ai trouvé.

125voto

Karthick Points 281

Pourquoi n'essayez-vous pas mPDF la version 2.0? Je l'ai utilisé pour la création de fichiers PDF d'un document. Il fonctionne très bien.

Pendant ce temps mPDF est à la version 5.7 et il est activement maintenu, contrairement à HTML2PS/HTML2PDF

36voto

Somnath Muluk Points 10173

Si votre intention est de créer un fichier PDF à partir de PHP, pdflib va vous aider.

Sinon, si vous souhaitez convertir une page HTML en PDF via PHP, vous trouverez un peu de mal à outta ici.

Donc, les options que je connais sont:

DOMPDF: classe PHP qui enveloppent le HTML et construire le PDF. Les bonnes œuvres, personnalisable (si vous connaissez PHP), basé sur la pdflib, si je me souviens bien, il accepte même un peu de CSS. Mauvaise nouvelle: lente lorsque le HTML est grand ou très complexe.

HTML2PS: la même que DOMPDF, mais celui-ci convertir d'abord en .ps (ghostscript), alors, quel que soit le format que vous souhaitez (pdf, jpg, png). Pour moi, ce n'est guère mieux alors dompdf, mais qui ont le même problème de vitesse. Il a un meilleur support pour les CSS.

Ces deux sont des classes PHP, mais si vous pouvez installer un logiciel sur le serveur, et y accéder par passthru() ou system(), regardez ces trop:

wkhtmltopdf: basé sur webkit (safari wrapper), est vraiment très rapide et puissant.. sembler comme la meilleure (atm) pour les convertir à la volée des pages html au format pdf, en ne prenant que 2 secondes pour les 3 pages de document xHTML avec CSS2. Est un projet récent, de toute façon, le google.code de la page est souvent mis à jour.

htmldoc: c'est un réservoir, il plante souvent. Le projet semble avoir disparu en 2007, mais de toute façon si vous n'avez pas besoin de CSS compatibilité de ce qui pourrait fonctionner pour vous.

tcpdf - c'est amélioré et maintenu version de fpdf. Principales Caractéristiques de tpdf et il a aussi un meilleur temps d'exécution avec la grande sortie. Pour un tutoriel détaillé sur l'utilisation de deux des plus populaires de la génération de PDF classes: TCPDF et de FPDF, veuillez suivre ce lien

Voir ces messages aussi.

  1. La conversion de HTML dans le Fichier PHP en Fichier PDF
  2. Meilleur générateur de pdf en PHP , mpdf ou fpdf?
  3. Exportation html en PDF en PHP?
  4. L'écriture de code HTML avec des variables PHP en fichier PDF?
  5. Comment convertir le html en pdf avec php?
  6. Outil pour l'exportation de html au format pdf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X