Maison >développement back-end >Problème PHP >Comment convertir un fichier HTML en fichier PDF en utilisant PHP
Comment utiliser php pour convertir des fichiers HTML en fichiers PDF : téléchargez et installez d'abord le PDF ; puis testez l'effet ; puis utilisez la fonction "shell_exec" pour l'appeler en php et enfin résolvez le problème de pagination.
Il y avait un client qui avait besoin de générer des fichiers PDF à partir de certaines pages HTML, puis j'ai recherché des cours qui utilisent PHP pour convertir des pages HTML en fichiers PDF. . On peut dire que j'ai beaucoup cherché des méthodes, j'ai essayé html2pdf, pdflib et FPDF, mais aucune ne répondait à mes exigences.
pdflib, FPDF Ces deux méthodes nécessitent l'écriture de programmes pour générer des fichiers PDF, ce qui signifie qu'elles ne prennent pas en charge la conversion directe des pages html en pdf, bien que html2pdf puisse convertir des pages html en fichiers pdf, il peut uniquement convertir des fichiers simples ordinaires ; codes HTML. Si votre contenu HTML doit être composé via l’éditeur de nouvelles en arrière-plan, cela ne fonctionnera certainement pas.
Après avoir longtemps lutté, j'ai cherché sur Baidu et Google Après de longues recherches, j'ai finalement trouvé une méthode très simple à utiliser que je vais vous présenter ici.
C'est : wkhtmltopdf, wkhtmltopdf peut convertir directement n'importe quelle page Web pouvant être parcourue dans le navigateur en pdf. Tout d'abord, laissez-moi vous expliquer qu'il ne s'agit pas d'une classe php, mais d'une page html qui convertit. pages html en pdf. C'est un logiciel, mais ce n'est pas un simple logiciel de bureau, et il effectue directement le traitement par lots cmd. Et php a une fonction shell_exec(). Ce qui suit est une introduction étape par étape sur la façon d'utiliser PHP pour générer des fichiers PDF.
1. Téléchargez et installez le pdf
Adresse de téléchargement : http://code.google.com/p/wkhtmltopdf/downloads/list
Il existe des packages d'installation pour différentes plateformes, en anglais si c'est le cas. pas bon, il suffit de le traduire par Google. Ce qui suit est un exemple d'utilisation sur la plate-forme Windows. J'ai téléchargé la version wkhtmltopdf-0.9.9-installer.exe, je l'ai installé et testé sur Win7 32 bits 64 bits et Windows 2003 sans aucun problème. Après le téléchargement, installez-le simplement directement. Faites attention au chemin d'installation, qui sera utilisé ci-dessous.
Après l'installation, vous devez ajouter ce qui suit à la variable d'environnement système nommée "Path": ;C:Program Files (x86)wkhtmltopdf, qui est le répertoire dans lequel vous l'avez installé. Après l'installation, redémarrez votre ordinateur.
Deuxièmement, testez l'effet
Saisissez directement dans cmd : wkhtmltopdf http://www.shwzzz.cn/ F:website1.pdf
Le premier est : le nom du logiciel en cours d'exécution (il reste inchangé ) Le deuxième est l'URL et le troisième est le chemin et le nom du fichier générés. Après avoir appuyé sur Entrée, voyez-vous une barre de progression de génération ? Félicitations pour votre succès. Accédez à votre répertoire de génération pour voir s'il existe un fichier PDF nouvellement généré.
3. Appeler en php
Appeler en php est très simple. Utilisez simplement la fonction shell_exec. Si la fonction shell_exec ne peut pas être utilisée, vérifiez si elle est désactivée dans php.ini.
Exemple : b2c7ff02e5174be99b172ec4ea3db754
Troisièmement, résolvez le problème de pagination
wkhtmltopdf est très utile . Mais il y a aussi des aspects insatisfaisants. Que dois-je faire si une page HTML est très longue et que je dois la paginer à un endroit précis ? Les développeurs de wkhtmltopdf n'en ont pas tenu compte lors du développement,
Par exemple, la page html suivante :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>pdf</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <style type="text/css"> *{ margin:0px; padding:0px;} div{ width:800px; height:1362px;margin:auto;} </style> <body> <div style=" background:#030"></div> <div style=" background:#033"></div> <div style=" background:#369"></div> <div style=" background:#F60"></div> <div style=" background:#F3C"></div> <div style=" background:#F0F"></div> <div style=" background:#0FF"></div> <div style=" background:#FF0"></div> <div style=" background:#00F"></div> <div style=" background:#0F0"></div> <div style=" background:#033"></div> <div style=" background:#369"></div> <div style=" background:#F60"></div> <div style=" background:#030"></div> <div style=" background:#033"></div> <div style=" background:#369"></div> <div style=" background:#F60"></div> <div style=" background:#F3C"></div> <div style=" background:#F0F"></div> <div style=" background:#0FF"></div> <div style=" background:#FF0"></div> <div style=" background:#00F"></div> <div style=" background:#0F0"></div> </body> </html>
Lorsque je la génère en pdf, je veux que chaque bloc soit une page, après d'innombrables débogages , une page de PDF fait environ 1362 pixels, mais la valeur devient fausse à mesure que l'on avance. Nous ne savons toujours pas combien de pixels fait une page de PDF.
Mais wkhtmltopdf a une bonne méthode, qui consiste à ajouter un page-break-inside:avoid; après le style p, et tout ira bien.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>pdf</title> <link href="css/style.css" rel="stylesheet" type="text/css" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <style type="text/css"> *{ margin:0px; padding:0px;} div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;} </style> <body> <div style=" background:#030"></div> <div style=" background:#033"></div> <div style=" background:#369"></div> <div style=" background:#F60"></div> <div style=" background:#F3C"></div> <div style=" background:#F0F"></div> <div style=" background:#0FF"></div> <div style=" background:#FF0"></div> <div style=" background:#00F"></div> <div style=" background:#0F0"></div> <div style=" background:#033"></div> <div style=" background:#369"></div> <div style=" background:#F60"></div> <div style=" background:#030"></div> <div style=" background:#033"></div> <div style=" background:#369"></div> <div style=" background:#F60"></div> <div style=" background:#F3C"></div> <div style=" background:#F0F"></div> <div style=" background:#0FF"></div> <div style=" background:#FF0"></div> <div style=" background:#00F"></div> <div style=" background:#0F0"></div> </body> </html>
http://code.google.com/p/wkhtmltopdf/Il s'agit d'une plateforme de communication pour les problèmes wkhtmltopdf, mais en anglais.
Pour de nombreuses connaissances connexes, veuillez visiter le Site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!