Convertir HTML + CSS en PDF avec PHP? [fermé]

j'ai un document HTML (pas XHTML) qui rend fine in Firefox 3 et IE 7. Il utilise des CSS assez basiques pour le style et rend fine en HTML.

je cherche maintenant un moyen de le convertir en PDF. J'ai essayé:

  • DOMPDF : il avait d'énormes problèmes avec les tables. J'ai pris en compte mes grandes tables emboîtées et cela m'a aidé (avant cela, je consommais JUSQU'à 128M de mémoire, puis je mourais). php.ini) mais il fait un désordre complet des tables et ne semble pas obtenir des images. Les tableaux n'étaient que des éléments de base avec quelques styles de bordure pour ajouter quelques lignes à divers points;
  • HTML2PDF et HTML2PS : j'ai en fait eu plus de chance avec cela. Il a rendu certaines des images (Toutes les images sont des URLs de carte de Google) et le formatage de la table était beaucoup mieux, mais il semblait avoir un problème de complexité que je n'ai pas encore compris et a continué à mourir avec inconnu node_type() erreurs. Pas sûr où aller à partir de là; et
  • Htmldoc : cela semble bien fonctionner sur HTML de base mais n'a presque pas de support pour CSS que ce soit donc vous devez tout faire en HTML (Je ne savais pas que c'était encore 2001 dans Htmldoc-land...) il est donc inutile pour moi.

j'ai essayé une application Windows appelée html2pdf pilote qui a fait un travail assez décent, mais j'ai besoin de quelque chose qui à tout le moins fonctionne sur Linux et fonctionne idéalement à la demande via PHP sur le serveur web.

Ce qui me manque, ou comment puis-je résoudre ce problème?

1431
demandé sur cletus 2008-12-24 11:14:20

30 réponses

Important: Veuillez noter que cette réponse a été écrite en 2009 et qu'elle pourrait ne pas être la solution la plus rentable aujourd'hui en 2018. Les alternatives en ligne comme PDFShift sont aujourd'hui mieux à ce qu'ils étaient à l'époque.


regarder PrinceXML .

c'est certainement le meilleur HTML/CSS à PDF converter là-bas, bien que ce ne soit pas gratuit (Mais bon, votre programmation n'est peut-être pas gratuite non plus, donc si cela vous permet d'économiser 10 heures de travail, vous êtes libre à la maison (puisque vous devez aussi tenir compte du fait que les solutions alternatives vous obligeront à configurer un serveur dédié avec le bon logiciel)

Oh oui, ai-je mentionné que c'est la première (et probablement la seule) solution de HTML2PDF qui remplit ACID2 ?

PrinceXML Échantillons

460
répondu SchizoDuckie 2018-06-04 09:32:03

regardez wkhtmltopdf . Il est open source, basé sur webkit et gratuit.

nous avons écrit un petit tutoriel ici .

MODIFIER( 2017 ):

si c'était pour construire quelque chose aujourd'hui, je n'irais plus par là.

Mais utiliserait http://pdfkit.org / à la place.

Probablement le dépouillant de toutes ses dépendances nodejs, pour l'exécuter dans le navigateur.

634
répondu Mic 2016-12-23 11:07:35

après quelques recherches et en général tirer les cheveux la solution semble être HTML2PDF . DOMPDF a fait un travail terrible avec des tables, des bordures et même la mise en page modérément complexe et htmldoc semble raisonnablement robuste mais est presque complètement CSS-ignorant et je ne veux pas retourner à faire la mise en page HTML sans CSS juste pour ce programme.

HTML2PDF semblait le plus prometteur mais j'ai continué à avoir cette erreur étrange à propos des arguments de référence null vers node_type. J'ai enfin trouvé la solution à cette question. Fondamentalement, PHP 5.1.x worked fine with regex remplace (preg_replace_*) sur des chaînes de n'importe quelle taille. PHP 5.2.1 introduit un php.ini config directive appelée pcre.backtrack_limit . Ce que fait ce paramètre de configuration est de limiter la longueur de la chaîne pour laquelle la correspondance est faite. Je ne sais pas pourquoi cela a été introduit. La valeur par défaut a été fixée à 100 000. Pourquoi une valeur aussi basse? Encore une fois, aucune idée.

a bug a été soulevé contre PHP 5.2.1 Pour ce , qui est toujours ouvert presque deux ans plus tard .

ce qui est terrifiant à ce sujet est que lorsque la limite est dépassée, le remplacement juste échoue silencieusement . Au moins si une erreur avait été relevée et consignée, vous auriez une indication de ce qui s'est passé, pourquoi et quoi changer pour la corriger. Mais non.

donc j'ai un fichier HTML de 70k à transformer en PDF. Il nécessite le php suivant.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 astucieux peut avoir remarqué que mon fichier HTML est plus petit que 100k. La seule raison pour laquelle je peux deviner pourquoi j'ai frappé ce problème est que html2pdf fait une conversion en xhtml dans le cadre du processus. Peut-être cela m'a pris en charge (bien que près de 50% de bloat semble étrange). Quoi qu'il en soit, ce qui précède a fonctionné.

maintenant, html2pdf est un porc de ressource. Mon fichier 70k prend environ 5 minutes et au moins 500-600M de mémoire vive pour créer un fichier PDF de 35 pages. Pas assez rapide (de loin) pour un téléchargement en temps réel malheureusement et l'utilisation de la mémoire place le ratio d'utilisation de la mémoire de l'ordre de 1000 à 1 (600M de RAM pour un fichier de 70k), ce qui est tout à fait ridicule.

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

143
répondu cletus 2015-11-24 02:08:31

pourquoi ne pas essayer mPDF version 2.0 ? Je l'ai utilisé pour créer PDF un document. Il fonctionne très bien.

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

Mais gardez à l'esprit que la documentation peut être vraiment dur à gérer. Par exemple, regardez cette page: https://mpdf.github.io / .

tâches très basiques autour du html au pdf, peut être fait avec cette bibliothèque, mais des tâches plus complexes prendront du temps à lire et à "comprendre" la documentation.

118
répondu Karthick 2016-08-25 12:06:03

1) utiliser MPDF !

a) extrait de yourfolder

B) créer fichier.php dans yourfolder et insérer ce code:

<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p style="color:red;">Hallo World<br/>Fisrt sentencee</p>');
$mpdf->Output();   exit;
 ?>

c) ouvrir fichier.php de votre navigateur







2) Utiliser pdfToHtml !

1) extrait pdftohtml.exe à votre dossier racine:

2) dans ce dossier, dans anyfile.php fichier, mettre ce code (en supposant, Il ya un exemple de source.pdf aussi):

<?php
$source="example.pdf";
$output_fold="FinalFolder";

    if (!file_exists($output_fold)) { mkdir($output_fold, 0777, true);}
$result= passthru("pdftohtml $source $output_fold/new_filename",$log);
//var_dump($result); var_dump($log);
?>

3) Entrez FinalFolder , et il y aura les fichiers convertis (autant de pages, que la source PDF avait..)

63
répondu tazo todua 2016-08-26 06:49:41

Checkout TCPDF . Il a une certaine fonctionnalité HTML à PDF qui pourrait être assez pour ce que vous avez besoin. C'est aussi gratuit!

53
répondu Darryl Hein 2016-12-09 17:43:14

je suggère DocRaptor (qui utilise PrinceXML comme "moteur")

29
répondu aRahmanS29 2015-01-24 11:25:42

juste pour heurter le fil, J'ai essayé DOMPDF et ça a fonctionné parfaitement. J'ai utilisé DIV et d'autres éléments au niveau du bloc pour tout positionner, pour le garder strictement CSS 2.1 et il s'est très bien passé.

27
répondu Filip Dupanović 2013-08-13 20:47:05

bonne nouvelle! Snappy !!

Snappy est un très facile open source PHP5 bibliothèque, permettant la miniature, de l'instantané ou la génération de PDF à partir d'une url ou d'une page html. Et... il utilise le excellent basé sur webkit wkhtmltopdf

Profitez-en! ^_^

25
répondu Paulo Coghi 2011-11-21 20:23:29

si vous voulez trouver une bibliothèque parfaite XHTML+CSS to PDF converter, oubliez-le. C'est loin d'être possible. Parce que c'est comme trouver un navigateur parfait (XHTML+CSS rendering engine). Ne nous en avez un? IE ou FF?

j'ai eu du succès avec DOMPDF. La chose est que vous devez modifier votre code HTML+CSS pour aller avec la façon dont la Bibliothèque est censée fonctionner. Autre que cela, j'ai d'assez bons résultats.

voir ci-dessous:

original HTML

convertir HTML en PDF

22
répondu datasn.io 2013-05-08 05:41:49

il a déjà été mentionné, mais je voudrais juste confirmer que mpdf est le plus facile, le plus puissant et le plus libre html au convertisseur pdf là-bas. Le ciel est vraiment la limite. Vous pouvez même générer des fichiers PDF de données dynamiques générées par l'utilisateur.

par exemple, un client voulait un système CMS afin de pouvoir mettre à jour la liste des morceaux qu'il jouait dans son club. Ce n'était pas un problème, mais il voulait aussi que les utilisateurs puissent télécharger A.pdf de la playlist, et donc ceci les fichiers PDF téléchargeables devaient également être mis à jour par le cms. Grâce à mpdf, avec quelques boucles simples et des variables intercalées je pourrais faire exactement cela. Quelque chose qui me prendrait des semaines, des minutes.

Grand article qui m'a aidé à obtenir commencé.

22
répondu Starkers 2018-06-12 08:05:38

le HTML2PDF et HTML2PS qui a été mentionné à l'origine dans l'article d'ouverture parlait d'un 2009 paquet avec ce lien

mais il y a une meilleure HTML2PDF

il est basé sur TCPDF bien qu'il soit en partie en français.

vous pouvez avoir des en-têtes de tableau ou des pieds de page qui se répètent sur les pages et ont des numéros de page et des pages totales. Voir ses exemples . Je l'utilise depuis plus de trois ans et de le recommander.

20
répondu Luke Wenke 2018-06-12 04:29:19

il y a un tutoriel sur le devzone de Zend sur la génération de pdf à partir de php ( partie 1 , partie 2 ) sans aucune bibliothèque externe. Je n'ai jamais implémenté ce genre de solution, mais puisque c'est tout php, vous pourriez La trouver plus flexible pour implémenter et déboguer.

18
répondu yoavf 2008-12-24 09:46:11

j'utilise fpdf pour produire des fichiers pdf en utilisant php. Cela fonctionne bien pour moi jusqu'à présent de produire de simples sorties.

18
répondu 2009-02-21 20:21:17

en termes de coût, l'utilisation d'un service Web (API) peut dans de nombreux cas être l'approche la plus raisonnable. De plus, en externalisant ce processus, vous déchargez votre propre infrastructure/backend et - à condition que vous utilisez un service de bonne réputation - assurer la compatibilité avec l'ajustement des normes web, le temps de disponibilité, les temps de traitement courts et la livraison rapide de contenu.

j'ai fait quelques recherches sur la plupart des services web actuellement sur le marché, s'il vous plaît trouver ci-dessous les API que je pense sont il est intéressant de mentionner sur ce fil, dans un ordre basé sur le rapport prix/valeur. Tous offrent des classes et des paquets PHP pré-composés.

  1. pdflayer.com - coût: $ - qualité:"
  2. docraptor.com - coût: $ $ $ - qualité:"
  3. pdfcrowd.com - coût: $ $ - qualité:"

qualité:

ayant le moteur de haute qualité PrinceXML comme épine dorsale, DocRaptor offre clairement la meilleure qualité PDF, en retournant les documents PDF hautement polis et bien convertis. Cependant, le service PDFLAYER API est assez proche ici. Pdfcrowd ne marque pas nécessairement avec la qualité, mais avec la vitesse de traitement.

coût:

pdflayer.com - comme indiqué ci-dessus, l'option la plus rentable est pdflayer.com, offrant un plan d'abonnement entièrement gratuit pour 100 pdf mensuels et des abonnements haut de gamme allant de 9,99 $-119,99$. le prix de 10 000 documents PDF mensuels est de 39,99$.

docraptor.com -offrir une période d'essai gratuite de 7 jours. Les forfaits d'abonnement Premium vont de 15$à 2250$. le prix pour 10.000 documents PDF mensuels est ~ $300.00.

pdfcrowd.com - offre 100 PDFs une fois gratuitement. Les forfaits d'abonnement Premium vont de 9 $à 89$. le prix pour 10.000 documents PDF mensuels est ~ $49.00.

je les ai tous les trois utilisés et ce texte est censé aider n'importe qui à décider sans avoir à payer pour tous. Ce texte n'a pas été écrit pour approuver un produit et je n'ai aucune affiliation avec l'un des produits.

13
répondu Frank 2016-02-11 18:00:11

La mention de Darryl Hein ci-dessus de TCPDF est probablement une bonne idée. Le code de Nicola Asuni est assez pratique et puissant. Le seul tueur est si vous jamais projetez de fusionner des fichiers PDF avec votre PDF généré il n'a pas ces fonctionnalités. Vous devez créer le PDF et ensuite le fusionner en utilisant quelque chose comme PDFTK par Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).

13
répondu Arachnid 2016-07-28 08:51:15

Essayez-le saisissant la dernière nightly dompdf build - j'ai été en utilisant une ancienne version qui a été une terrible mangeur de ressources et a pris une éternité pour rendre mon pdf. Après avoir attrapé une nuit de ici .

il n'a fallu que quelques secondes pour générer le PDF - et il a été tout aussi bien rendu qu'avec PrinceXML / Docraptor . On dirait qu'ils ont sérieusement optimisé le code dompdf depuis la dernière fois que je l'ai utilisé!

12
répondu Arni J 2014-01-02 18:38:18

si vous avez accès à la ligne de commande, il est possible d'utiliser PhantomJS pour créer le PDF à partir d'un URL (distant ou local).

Il fonctionne vraiment bien, et est une solution libre.

jetez un oeil à ce exemple script fait pour ce problème exact.

12
répondu Hjortlund 2015-01-24 11:23:47

cette question est déjà assez ancienne, mais je n'ai vu personne mentionner CutyCapt donc je vais:)

CutyCapt

CutyCapt est une petite croix-plate-forme utilitaire de ligne de commande pour capturer le rendu WebKit d'une page Web dans une variété de vecteur et formats bitmap, y compris SVG, PDF, PS, PNG, JPEG, TIFF, GIF, et BMP

11
répondu Koen. 2012-02-20 15:19:17

peut-être pourriez-vous essayer D'utiliser Tidy avant de remettre le fichier au convertisseur. Si l'un des rendus s'étouffe sur un problème HTML (comme unclosed tag), cela pourrait l'aider.

9
répondu PhiLho 2008-12-24 09:16:29

Je ne pense pas qu'une classe php sera la meilleure pour rendre une page xHtml avec css.

Ce qui se passe quand une nouvelle règle css? (bientôt css 3.0...)

la meilleure façon de rendre une page html est, en principe, un navigateur. Firefox 3.0 peut nativement "imprimer" en format pdf, torisugary a développé une extension (impression en ligne de commande) pour l'utiliser. ici vous le trouverez.

de toute façon, il y a encore beaucoup de problèmes runninr firefox juste comme un convertisseur pdf...

pour le moment, je pense que wkhtmltopdf est le meilleur (c'est celui utilisé par le navigateur safari), rapide, rapide, génial. Oui, opensource... lui Donner un look

9
répondu Strae 2009-05-12 21:02:00

j'ai développé une API publique pour construire des fichiers PDF à partir de pages web. Il a une classe de client PHP sympa qui le rend super facile à utiliser. Il utilise wkhtmltopdf pour afficher le PDF dans le nuage.

pas besoin de quelque chose de spécial dans le HTML. Pas besoin D'URL absolues dans les liens images/CSS/js. Fonctionne sur localhost (dev machine) aussi.

à l'heure actuelle, le service a des résultats dans quatre régions azurées: L'est des États-Unis, l'Ouest des États-Unis, le nord de l'Union européenne et l'Asie du sud-est.

c'est rapide car il utilise un protocole propriétaire pour envoyer le contenu de la page web à L'API pour la conversion en PDF.

c'est fiable parce que tous les paramètres sont équilibrés.

compte GRATUIT Disponible pour les tests ou une faible utilisation. Détails sur le site web:

https://rotativahq.com

9
répondu Giorgio Bozio 2016-06-22 14:22:52

bien qu'il existe déjà de nombreuses solutions, je recommande les deux suivantes:

  1. HTM2PDF - offre une API pour convertir HTML en PDF et a également un SDK PHP, ce qui le rend très facile à mettre en œuvre en PHP; il offre un choix d'emplacements de serveurs en Europe, L'Asie et les États-Unis
  2. PDFmyURL - offre une API qui fait URL et HTML à PDF ainsi, avec à peu près la même fonctionnalité comme HTM2PDF, mais travaille sur un paysage de charge équilibrée et a été autour d'un peu plus longtemps

la chose qui est différente au sujet de ces deux API de toutes les solutions mentionnées précédemment, est que - en plus de convertir HTML en PDF avec CSS et JavaScript - il offre également la gestion des droits PDF, filigrane et le cryptage. Par conséquent, c'est un tout-en-un idéale pour ceux qui veulent frapper le sol en cours d'exécution.

avertissement: je travaille pour Kaiomi, une société qui exploite ces deux sites web.

7
répondu user1914292 2014-06-02 17:59:32

Rendu fin ne signifie rien. Est-il valider?

Tous les navigateurs les plus ils peuvent juste vous montrer quelque chose sur l'écran, peu importe à quel point l'entrée. Et bien sûr, ils ne font pas la même chose. Si vous voulez le même rendu que FireFox, vous pouvez utiliser son moteur de rendu. Il y a des générateurs de pdf pour ça. C'est beaucoup de travail, cependant.

6
répondu Stephan Eggermont 2008-12-24 09:09:27

je recommande TCPDF ou DOMPDF ,est-ce l'ordre

5
répondu criss_ae 2013-05-17 12:38:12

j'ai essayé beaucoup de bibliothèques différentes pour PHP. Tous les énumérés j'ai essayé. À mon avis TCPDF Bibliothèque est la meilleure performance de compromis/convivialité. Il est très simple d'installer et d'utiliser, également de bonnes performances dans les petites applications moyennes. Si vous avez besoin de haute performance et très grand document PDF, utilisez zend_pdf module, mais préparez-vous à coder dur!

5
répondu trullallero 2013-05-22 06:47:40

Ne le HTML au format PDF conversion de vraiment besoin de se produire côté serveur à l'aide de PHP?

je viens de découvrir jsPDF , d'un côté client de la solution à l'aide de HTML5/JavaScript. Le code sous licence MIT est aussi sur GitHub .

5
répondu Oliver Schafeld 2013-08-29 15:06:44

TCPDF fonctionne bien, pas de dépendances, est libre et constamment bugfixé. Il a une vitesse raisonnable si le contenu HTML/CSS fourni est bien formaté. Normalement, je génère de 50 à 300 Ko D'entrées HTML (y compris CSS) et j'obtiens des sorties PDF de 1 à 3 secondes avec 10 à 15 Pages PDF.

je recommande fortement d'utiliser tidy bibliothèque comme formatteur de jolis HTML avant d'envoyer quoi que ce soit à TCPDF.

5
répondu lubosdz 2013-12-08 11:09:22

pas PHP , mais un Java bibliothèque , qui fait la chose:

soucoupe volante prend XML ou XHTML et applique conforme CSS 2.1 stylesheets à lui, afin de rendre à PDF

il est utilisable à partir de PHP via system() ou un appel similaire. Bien qu'il exige XML bien-forme de la input .

3
répondu Ivan Kurmanov 2014-01-02 18:37:09

API Web

S'il y a des gens qui cherchent toujours ce genre de choses, Il ya un gratuit site web qui vous permettent de convertir code html & pages en pdf. Il existe également une api (très petite) qui vous permet d'obtenir le fichier pdf à partir de l'url.

Vérifier ici

3
répondu Superdrac 2014-05-23 15:18:40