J'ai un document HTML (pas XHTML) qui rend bien dans Firefox 3 et IE 7. Il utilise un code CSS assez basique pour le styler et un bon rendu en HTML.
Je cherche maintenant un moyen de le convertir en PDF. J'ai essayé:
J'ai essayé une application Windows appelée Html2Pdf Pilot qui a en fait fait un travail assez décent, mais j'ai besoin de quelque chose qui fonctionne au minimum sous Linux et fonctionne idéalement à la demande via PHP sur le serveur Web.
Qu'est-ce qui me manque ou comment puis-je résoudre ce problème?
Important: Notez que cette réponse a été écrite en 2009 et qu'elle n'est peut-être pas la solution la plus rentable aujourd'hui en 2019. Les alternatives en ligne sont meilleures aujourd'hui cela qu'ils étaient à l'époque.
Voici quelques services en ligne que vous pouvez utiliser:
Jetez un oeil à PrinceXML .
C'est certainement le meilleur convertisseur HTML/CSS pour PDF, bien que ce ne soit pas gratuit (mais, votre programmation risque de ne pas être gratuite non plus, donc si vous économisez 10 heures de travail, vous êtes chez vous gratuitement (étant donné que vous devez également prendre en compte le fait que les solutions alternatives nécessitent de configurer un serveur dédié avec le logiciel approprié)
Ah oui, est-ce que j'ai déjà mentionné qu'il s'agit de la première (et probablement de la seule) solution HTML2PDF qui fonctionne à plein ACID2 ?
Regardez wkhtmltopdf
. Il est open source, basé sur webkit et gratuit.
Nous avons écrit un petit tutoriel ici .
EDIT (2017):
Si c'était pour construire quelque chose aujourd'hui, je n'irais plus dans cette voie.
Mais utiliserait plutôt http://pdfkit.org/ .
Le dépouillant probablement de toutes ses dépendances nodejs pour s'exécuter dans le navigateur.
Après quelques recherches et un tiraillement général, la solution semble être HTML2PDF . DOMPDF a fait un travail épouvantable avec des tableaux, des bordures et même une mise en page moyennement complexe et htmldoc semble raisonnablement robuste mais est presque complètement ignorant des CSS et je ne veux pas y aller. Retour à la mise en page HTML sans CSS uniquement pour ce programme.
HTML2PDF semblait le plus prometteur, mais je continuais à avoir cette erreur étrange concernant les arguments de référence nuls pour node_type. J'ai finalement trouvé la solution à cela. Fondamentalement, PHP 5.1.x a bien fonctionné avec le remplacement de regex (preg_replace_ *) sur des chaînes de toutes tailles. PHP 5.2.1 a introduit une directive de configuration php.ini appelée pcre.backtrack_limit . Ce paramètre de configuration limite la longueur de la chaîne pour laquelle la correspondance est effectuée. Pourquoi cela a été introduit, je ne sais pas. La valeur par défaut a été choisie comme 100 000. Pourquoi une valeur aussi faible? Encore une fois, aucune idée.
Un n bogue a été soulevé contre PHP 5.2.1 pour cela , qui est toujours ouvert près de deux ans plus tard .
Ce qui est horrible à ce sujet, c’est que lorsque la limite est dépassée, le remplacement vient de échouer en silence . Au moins, si une erreur avait été générée et consignée, vous auriez une idée de ce qui est arrivé, du pourquoi et de ce qu'il faut changer pour la réparer. Mais non.
J'ai donc un fichier HTML de 70k à convertir en PDF. Il nécessite les paramètres php.ini suivants:
Maintenant, le lecteur astucieux a peut-être remarqué que mon fichier HTML est inférieur à 100 Ko. La seule raison pour laquelle je peux deviner pourquoi je rencontre ce problème est que html2pdf effectue une conversion en xhtml dans le cadre du processus. Peut-être cela m'a-t-il pris (bien que près de 50% de gonflement semble étrange). Quel que soit le cas, ce qui précède a fonctionné.
Maintenant, html2pdf est une ressource. Mon fichier 70k prend environ 5 minutes et au moins 500 à 600 M de RAM pour créer un fichier PDF de 35 pages. Malheureusement, le téléchargement en temps réel n’est pas assez rapide (de loin) et l’utilisation de la mémoire place le rapport d’utilisation de la mémoire dans l’ordre de 1000-pour-1 (600 M de RAM pour un fichier de 70 Ko), ce qui est: tout à fait ridicule.
Malheureusement, c'est le meilleur que j'ai trouvé.
Pourquoi ne pas essayer mPDF version 2. ? Je l'ai utilisé pour créer PDF un document. Ça fonctionne bien.
En attendant, mPDF est à la version 5.7 et il est activement maintenu, contrairement à HTML2PS/HTML2PDF
Mais gardez à l'esprit que la documentation peut être vraiment difficile à gérer. Par exemple, jetez un oeil à cette page: https://mpdf.github.io/ .
Des tâches très basiques autour du HTML au format PDF peuvent être effectuées avec cette bibliothèque, mais des tâches plus complexes prendront un certain temps à lire et à "comprendre" la documentation.
a) extraire dans yourfolder
b) créez fichier.php dans yourfolder
et insérez 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) ouvrez file.php à partir de votre navigateur
1) extrayez pdftohtml.exe dans votre dossier racine:
2) dans ce dossier, dans le fichier anyfile.php , insérez ce code (en supposant qu'il existe également un exemple source.pdf):
<?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 ..)
Commander TCPDF . Il contient des fonctionnalités HTML à PDF qui pourraient suffire à vos besoins. C'est aussi gratuit!
Je suggère DocRaptor (qui utilise PrinceXML
comme "moteur")
Juste pour cogner le fil, j'ai essayé DOMPDF et cela a fonctionné parfaitement. J'ai utilisé DIV
et d'autres éléments de niveau bloc pour tout positionner. Je l'ai gardé strictement sous CSS 2.1 et tout s'est très bien passé.
Cela a déjà été mentionné, mais je voudrais juste confirmer que mpdf est le convertisseur de HTML à pdf le plus simple, le plus puissant et le plus gratuit qui soit. Le ciel est vraiment la limite. Vous pouvez même générer des pdf de données dynamiques générées par l'utilisateur.
Par exemple, un client souhaitait un système CMS afin de pouvoir mettre à jour la liste de pistes de la musique qu'il diffusait dans son club. Ce n'était pas un problème, mais il souhaitait également que les utilisateurs puissent télécharger un fichier .pdf de la liste de lecture. Ce fichier PDF téléchargeable devait donc également être mis à jour par le cms. Grâce à mpdf, avec quelques boucles simples et des variables intercalées, je pouvais faire exactement cela. Quelque chose que je pensais me prendre des semaines me prenait littéralement des minutes.
Génial article qui m'a aidé à démarrer.
Bonnes nouvelles! Snappy !!
Snappy est une très facile librairie PHP5 open source, permettant la génération de vignettes, d'instantanés ou de PDF à partir d'une URL ou d'une page HTML. Et ... il utilise le excellent basé sur le webkit wkhtmltopdf
Prendre plaisir! ^ _ ^
Eh bien, si vous voulez trouver une bibliothèque de conversion XHTML + CSS parfaite pour PDF, oubliez-la. C'est loin d'être possible. Parce que c'est comme trouver un navigateur parfait (moteur de rendu XHTML + CSS). En avons-nous un? IE ou FF?
J'ai eu du succès avec DOMPDF. Le fait est que vous devez modifier votre code HTML + CSS en fonction de la manière dont la bibliothèque est censée fonctionner. En dehors de cela, j'ai de très bons résultats.
Voir ci-dessous:
Le HTML2PDF et HTML2PS qui était mentionné à l'origine dans le message d'ouverture parlait d'un paquet 2009 avec ceci lien
Mais il y a un meilleur HTML2PDF
Il est basé sur TCPDF bien qu’il soit en partie en français.
Vous pouvez avoir des en-têtes ou des pieds de page qui se répètent sur les pages et qui ont des numéros de page et le nombre total de pages. Voir ses exemples . Je l'utilise depuis plus de trois ans et le recommande.
Essayez de récupérer la dernière version nocturne de dompdf - J'utilisais une version plus ancienne qui était une ressource épouvantable et qui prenait 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 était 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é!
La mention ci-dessus de Darryl Hein de TCPDF est probablement une excellente idée. Le code de Nicola Asuni est plutôt pratique et puissant. Si vous envisagez de fusionner PDF fichiers avec vos fichiers générés PDF, le seul problème est qu'il ne possède pas ces fonctionnalités. Vous devrez créer le PDF, puis le fusionner à l'aide de PDFTK de Sid Steward (www.pdflabs.com/tools/pdftk-the-pdf-toolkit/).
En termes de coût, l’utilisation d’un service Web (API) peut dans de nombreux cas être l’approche la plus judicieuse. De plus, en externalisant ce processus, vous déchargez votre propre infrastructure/back-end et, si vous utilisez un service réputé, vous assurez la compatibilité avec les normes Web, la disponibilité, les délais de traitement courts et la livraison rapide du contenu.
J'ai effectué des recherches sur la plupart des services Web actuellement sur le marché. Veuillez trouver ci-dessous les API que je pense mériter de mentionner sur ce fil, dans un ordre basé sur le rapport prix/valeur. Tous proposent des classes et des packages PHP pré-composés.
Qualité:
Avoir le moteur de haute qualité PrinceXML
comme colonne vertébrale, DocRaptor offre clairement la meilleure qualité PDF, en renvoyant des documents très polis et bien convertis PDF . 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 économique ici est pdflayer.com, qui propose un plan d'abonnement entièrement gratuit pour 100 PDF et prime mensuels abonnements compris entre 9,99 $ et 119,99 $. Le prix pour 10 000 documents mensuels PDF est de 39,99 $.
docraptor.com - Offre d'une période d'essai gratuit de 7 jours. Les plans d'abonnement Premium vont de 15 à 2250 USD. Le prix pour 10 000 documents mensuels PDF est d'environ 300,00 $.
pdfcrowd.com - Offrir 100 PDF une fois gratuitement. Les plans d’abonnement Premium varient de 9 à 89 dollars. Le prix pour 10 000 documents mensuels PDF est d'environ 49,00 $.
Je les ai utilisées toutes les trois et ce texte est censé aider tout le monde à prendre une décision sans avoir à les payer toutes. Ce texte n'a pas été écrit pour approuver un seul produit et je n'ai aucune affiliation avec aucun des produits.
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). ).
Cela fonctionne vraiment bien et est une solution gratuite.
Jetez un oeil à ce exemple le script est fait pour ce problème exact.
Cette question est déjà ancienne, mais je n'ai vu personne mentionner CutyCapt alors je le ferai :)
CutyCapt
CutyCapt est un petit utilitaire de ligne de commande multiplate-forme permettant de capturer le rendu d'une page Web par WebKit dans une variété de formats vectoriels et bitmap, notamment SVG, PDF, PS, PNG, JPEG, TIFF, GIF. et BMP
Je recommande TCPDF ou DOMPDF, dans cet ordre.
Je ne pense pas qu'une classe php sera la meilleure pour rendre une page xHtml avec css.
Que se passe-t-il quand une nouvelle règle CSS sort? (bientôt css 3.0 ...)
Le meilleur moyen de rendre une page html est, bien entendu, un navigateur. Firefox 3.0 pouvant "imprimer" nativement au format pdf, torisugary a développé une extension (impression en ligne de commande) pour l'utiliser. Ici vous le trouverez.
Quoi qu’il en soit, il reste encore de nombreux problèmes à exécuter firefox en tant que convertisseur de 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 également ... donnez-lui un coup d'oeil
Vous pourriez peut-être essayer d’utiliser Tidy avant de remettre le fichier au convertisseur. Si l'un des moteurs de rendu étouffe un problème HTML (comme une balise non fermée), cela pourrait aider.
J'ai développé une API publique pour construire PDF fichiers à partir de pages Web. Il a une belle classe de clients PHP qui le rend super facile à utiliser. Il utilise wkhtmltopdf pour rendre 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 aussi sur localhost (dev machine).
Actuellement, le service a des points d'extrémité dans 4 régions Azure: Est des États-Unis, Ouest des États-Unis, Nord de l'UE et Asie du Sud-Est.
C'est rapide, car il utilise un protocole propriétaire pour envoyer le contenu de la page Web à l'API afin de le convertir au format PDF.
C'est fiable car tous les ordinateurs d'extrémité sont équilibrés en charge.
Compte gratuit disponible pour des tests ou une faible utilisation. Détails sur le site web:
Bien que de nombreuses solutions soient déjà proposées, je recommande les deux suivantes:
La différence entre ces deux API et toutes les solutions mentionnées précédemment est que, outre la conversion de HTML en PDF avec CSS et JavaScript, il offre également PDF la gestion des droits, le tatouage et le cryptage. . C'est donc une solution tout-en-un pour ceux qui veulent se mettre au travail.
Disclaimer: Je travaille pour Kaiomi, une société qui exploite ces deux sites.
Un bon rendu ne veut rien dire. Est-ce que ça valide?
Tous les navigateurs font de leur mieux pour afficher quelque chose à l'écran, quelle que soit la qualité de la saisie. Et bien sûr, ils ne font pas la même chose. Si vous souhaitez obtenir le même rendu que FireFox, vous pouvez utiliser son moteur de rendu. Il existe des générateurs pdf pour cela. C'est beaucoup de travail, cependant.
TCPDF fonctionne bien, pas de dépendances, il est gratuit et corrige constamment. Il a une vitesse raisonnable si le contenu HTML/CSS fourni est bien formulé. Je génère normalement de 50 à 300 Ko d’entrée HTML (CSS comprise) et j’ai la sortie PDF dans un délai de 1 à 3 secondes avec 10 à 15 PDF pages.
Je recommande fortement d'utiliser la bibliothèque tidy comme formatage HTML avant d'envoyer quoi que ce soit à TCPDF.
La conversion HTML en PDF _ a-t-elle vraiment besoin de se produire côté serveur à l'aide de PHP?
Je viens de tomber sur jsPDF , une solution côté client utilisant HTML5/JavaScript. La licence MIT le code est sur GitHub , aussi.
J'ai essayé beaucoup de bibliothèques différentes pour PHP. Tous les énumérés, j'ai essayé. À mon avis TCPDF la bibliothèque est le meilleur compromis performance/convivialité. C’est très simple à installer et à utiliser, ainsi que de bonnes performances dans les applications de taille moyenne. Si vous avez besoin de hautes performances et d'un très grand document PDF, utilisez le module Zend_PDF , mais préparez-vous à coder de manière rigoureuse!
S'il y a des gens qui recherchent toujours ce genre de choses, il existe un site Web gratuit qui vous permet de convertir le code HTML et les pages en pdf. Il existe également une (très petite) API qui vous permet d’obtenir un fichier pdf à partir de l’URL.
pas PHP, mais une bibliothèque Java , qui fait la chose:
Flying Saucer utilise XML ou XHTML et lui applique des feuilles de style conformes à CSS 2.1 afin de permettre le rendu au format PDF.
Il est utilisable à partir de PHP via system()
ou un appel similaire. Bien que cela nécessite XML la bonne forme de la input
.