Comparaison des méthodes de génération de pdf à partir de HTML. Une autre façon de générer des PDF PDF24 Creator - générateur de PDF gratuit

Le créateur PDF24 est pdf gratuit générateur pour votre PC. Génération fichier PDF C'est une tâche incroyablement facile avec ce programme. Combinaison caractéristiques supplémentaires avec la création de fichiers PDF, fait de cet outil l'un des plus reconnus programmes gratuits. Alternativement, vous pouvez également générer des PDF en ligne. Lisez ci-dessous comment cela fonctionne.

PDF24 Creator – générateur de PDF gratuit

PDF24 Creator est un générateur de PDF gratuit pour Windows. La génération de fichiers PDF est implémentée avec en utilisant PDF imprimante. Après l'installation, une nouvelle imprimante PDF virtuelle apparaîtra dans votre Windows. Imprimez simplement tout ce que vous souhaitez transformer en PDF via cette imprimante. L'imprimante PDF est le seul moyen Création de PDF. Le programme comprend un large éventail de fonctionnalités qui vous aideront dans la génération de PDF. Ce programme est gratuit. Vous pouvez télécharger la dernière version sur ce site.

PDF24 Online PDF Generator – Générez des fichiers PDF en ligne

Online PDF Generator est un outil utile si vous souhaitez convertir des documents au format PDF. Sélectionnez simplement un document ou envoyez un document par courrier au générateur de PDF en ligne et en quelques secondes, votre fichier PDF sera disponible en téléchargement ou vous sera renvoyé.

Une interface de messagerie pour ce générateur de PDF est également disponible. Vous devez envoyer les fichiers au générateur et attendre une lettre de réponse, qui contiendra les fichiers convertis en PDF

De nombreux autres générateurs PDF dans la boîte à outils PDF24

Les utilitaires en ligne de PDF24 résolvent de nombreux problèmes liés aux PDF de manière simple, rapide et gratuite. Beaucoup de ces outils génèrent des fichiers PDF. Vous n'êtes pas encore familier avec les utilitaires en ligne PDF24 ? Jetez un œil, vous pouvez utiliser tous ces outils.

L’un des éléments importants de tout système de gestion de projet est la capacité de rendre compte de l’état actuel des choses. Cela vous permet d'évaluer plus précisément l'état actuel des choses. Pour les utilisateurs, un tel rapport peut constituer non seulement une analyse nécessaire au travail, mais également une forme unique de reporting. Par conséquent, Revizto accorde une grande attention à l’aspect technique de la génération de rapports.

Pour certains clients, les rapports sont de gros fichiers PDF contenant des dizaines de milliers de pages. Bien entendu, ces rapports pèsent des gigaoctets et leur génération prend longue durée. Face à une nouvelle augmentation de la taille du rapport, nous avons décidé d'analyser notre architecture de génération pdf.

Traditionnellement, la génération de pdf sur le web se compose de deux étapes :

  1. Génération pages HTML, qui deviendra plus tard pdf
  2. Traduction de HTML en PDF

La première étape dans notre cas a pris pas mal de temps, mais la seconde pourrait durer plus d'une heure. Par conséquent, nous avons fait une petite comparaison des opportunités open source existantes pour générer des fichiers PDF :

    Commande chronométrée : "phantomjs --ssl-protocol=any ./capture.js 1.html 1.pdf" Temps utilisateur (secondes) : 2240,56 Temps système (secondes) : 6,96 Pourcentage de CPU obtenu par cette tâche : 83 % écoulé ( horloge murale) heure (h:mm:ss ou m:ss) : 44:35,89 Taille moyenne du texte partagé (koctets) : 0 Taille moyenne des données non partagées (koctets) : 0 Taille moyenne de la pile (koctets) : 0 Taille totale moyenne (koctets) ) ) : 0 Taille maximale de l'ensemble résident (Ko) : 1821840 Taille moyenne de l'ensemble résident (Ko) : 0 Défauts de page majeurs (nécessitant des E/S) : 28 Défauts de page mineurs (récupération d'une trame) : 489364 Changements de contexte volontaires : 53462 Contexte involontaire commutateurs : 31797 Swaps : 0 Système de fichiers entrées : 4576 Sorties du système de fichiers : 233848 Messages socket envoyés : 0 Messages socket reçus : 0 Signaux délivrés : 0 Taille de la page (octets) : 4096 État de sortie : 0

    Commande chronométrée : "/usr/bin/google-chrome-stable --headless --disable-gpu --print-to-pdf 1.html" Temps utilisateur (secondes) : 54,22 Temps système (secondes) : 7,32 Pour cent de Processeur obtenu par ce travail : 5 % Temps écoulé (horloge murale) (h:mm:ss ou m:ss): 18:49,74 Taille moyenne du texte partagé (en Ko): 0 Taille moyenne des données non partagées (en Ko): 0 Taille moyenne de la pile ( Ko) : 0 Taille totale moyenne (Ko) : 0 Taille maximale de l'ensemble résident (Ko) : 951 796 Taille moyenne de l'ensemble résident (Ko) : 0 Défauts de page majeurs (nécessitant des E/S) : 2 Défauts de page mineurs (récupération d'une trame) : 938614 Changements de contexte volontaires : 184497 Changements de contexte involontaires : 37463 Swaps : 0 Entrées du système de fichiers : 368 Sorties du système de fichiers : 174352 Messages de socket envoyés : 0 Messages de socket reçus : 0 Signaux délivrés : 0 Taille de la page (octets) : 4096 État de sortie : 0

  1. Wkhtmltopdf Commande terminée avec un statut différent de zéro 1 Commande en cours de synchronisation : "wkhtmltopdf 1.html 1.pdf" Temps utilisateur (secondes) : 3356,13 Temps système (secondes) : 7,12 Pourcentage de CPU obtenu par cette tâche : 99 % écoulé (horloge murale) heure (h:mm:ss ou m:ss) : 56:21,54 Taille moyenne du texte partagé (ko) : 0 Taille moyenne des données non partagées (ko) : 0 Taille moyenne de la pile (ko) : 0 Taille totale moyenne (ko) : 0 Taille maximale de l'ensemble résident (en Ko) : 3457744 Taille moyenne de l'ensemble résident (en Ko) : 0 Défauts de page majeurs (nécessitant des E/S) : 8 Défauts de page mineurs (récupération d'une trame) : 977440 Changements de contexte volontaires : 38567 Changements de contexte involontaires : 47975 Swaps : 0 Entrées du système de fichiers : 1240 Sorties du système de fichiers : 197480 Messages de socket envoyés : 0 Messages de socket reçus : 0 Signaux délivrés : 0 Taille de la page (octets) : 4096 État de sortie : 1

D'après le test ci-dessus, il est clair que le meilleur résultat est obtenu avec Chrome, puis phantomJs est deux fois moins mauvais, et puis Wkhtmltopdf est encore bien pire. Ce résultat fait écho aux problèmes de développement de phantomJs

D'un autre côté, Chrome dépend de X11, il y aura donc beaucoup plus de problèmes sur le serveur qu'avec phantomJs.

Si nous tirons une petite conclusion, alors pour tester une machine avec un bureau Chrome, c'est le gagnant incontesté. Il est logique de l'utiliser sur un serveur si vous n'avez pas peur d'y mettre X11, sinon phantomJs sera la meilleure option

En ligne ou hors ligne ?

Créez des fichiers PDF à partir de n'importe quelle application. Travaillez en ligne à l'aide de notre application en ligne ou hors ligne en téléchargeant l'application de bureau Soda PDF sur votre ordinateur.

Créer un fichier

Si vous choisissez de créer un PDF à l'aide d'une application en ligne, téléchargez un fichier existant depuis votre ordinateur ou stockage en ligne, comme Google Drive ou Dropbox.

Envoyer par courrier

Une fois le fichier PDF créé, vous pouvez l'envoyer à votre adresse E-mail ou téléchargez-le sur votre ordinateur et affichez-le dans votre navigateur.

SAVIEZ-VOUS?

Il existe une nouvelle façon écologique d’imprimer des documents !

Il n'est pas nécessaire d'utiliser du papier lorsque vous pouvez utiliser l'impression virtuelle. Lorsque vous téléchargez l'application de bureau Soda PDF, elle installera l'imprimante virtuelle Soda PDF sur votre ordinateur. Vous pouvez ensuite sélectionner l'imprimante Soda PDF à partir de n'importe quel programme pour convertir n'importe quel document en PDF sans ouvrir l'application de bureau Soda PDF ! Lorsque vous êtes prêt à imprimer votre document, sélectionnez simplement l'imprimante Soda PDF dans le menu de l'imprimante et elle créera une copie du document dans Format PDF. Avec Soda PDF, vous pouvez créer des fichiers PDF à partir de plus de 300 formats de fichiers.

INFORMATIONS COMPLÉMENTAIRES SUR LA CRÉATION DE PDF

Format PDF

Le format PDF a été créé par Adobe Systems en 1993. En 2008, il a été standardisé comme format ouvert, qui a été développé par un comité ISO indépendant.

PDF2.0

Le format PDF a considérablement évolué depuis sa création. La plupart dernière version est Version PDF 2.0 dont la norme a été publiée le 28 juillet 2017.

Autres options

Si vous souhaitez créer un fichier PDF en fusionnant plusieurs fichiers, utilisez notre outil gratuit de fusion PDF en ligne. Vous pouvez même choisir la commande fichiers séparés dans un fichier commun.

Où cela peut-il être utile ? Si vous devez générer des fichiers prêts à imprimer dans une application Web à l'aide d'un modèle rigide arbitraire existant : certificats, badges, laissez-passer, etc.

Pourquoi PDF ? Le format PDF permet de créer des documents présentant de nombreux avantages indéniables : ouverture, multiplateforme, diffusion et, surtout, précision et immuabilité du transfert de données tout au long de la chaîne de création, de visualisation et d'impression.

C'est quoi le sel ? Utilisation de fichiers SVG comme modèles avec la possibilité de remplacer les champs requis puis de les convertir en PDF.

Quels sont les bénéfices? La possibilité de créer et de modifier rapidement des modèles très complexes dans des éditeurs vectoriels familiers, tels que Adobe Illustrator, Corel Draw ou Inkscape. Facile à programmer et à utiliser uniquement des logiciels gratuits. Un autre avantage important est la possibilité d'utiliser de manière transparente UTF-8 pour les textes collés.

Que faut-il pour cela ? Pour utiliser cette méthode, vous avez besoin d'un serveur dédié avec la possibilité d'installer vos propres applications (Inkscape et GhostScript) et d'exécuter des commandes système. Dans ce cas, tout fonctionnera aussi bien sur la plateforme Windows que sur Linux.

Je pense que la courte FAQ couvre les principales questions concernant cette méthode, commençons donc immédiatement à analyser son essence.

Comme vous le savez, le format graphique vectoriel SVG est en fait un fichier XML, donc un fichier déjà créé peut être facilement modifié à l'aide des outils de programmation les plus simples. En cas d'utilisation Fichier SVG et en tant que modèle rigide, le processus est considérablement simplifié, car nous n'avons pas besoin de modifier la structure du document, mais seulement de remplacer les valeurs de texte nécessaires ou les bitmaps codés en base64.

Vous pouvez créer un modèle initial dans n'importe quel éditeur de vecteurs prenant en charge l'exportation vers SVG : Adobe Illustrator, Corel Draw ou Inkscape lui-même. Le recours à ce dernier est souhaitable, au moins dans la dernière étape, celle de finition, puisque c'est lui qui devra, en fin de compte, réaliser la transformation dont nous avons besoin.

Lorsque vous utilisez un raster dans un modèle, vous pouvez utiliser 2 méthodes : stocker le raster dans un fichier séparé fichier externe ou intégré dans le fichier SVG lui-même. Si vous devez modifier l'image raster dans le modèle dans le premier cas, vous pouvez également modifier le fichier avant la génération. Lorsque vous stockez une image intégrée dans un fichier, vous devez utiliser la propriété URL de l'objet en dessinant, écrivez la ligne :

où (IMAGE) est le champ permettant au moteur de modèle d'insérer une image codée en base64.

Par exemple, dessinons un modèle de badge simple, je pense que vous me pardonnerez d'être tordu, je ne suis pas un artiste, mais pour un usage réel, vous pouvez commander une mise en page vectorielle à votre designer.


Je n'ai pas utilisé de bitmap redimensionnable, le laissant à devoirs, mais s'est limité uniquement aux champs de texte modifiables.

Je pense que vous avez déjà remarqué que les balises du moteur de template sont insérées aux endroits du texte attendu (dans dans cet exemple utilisé). C'est l'utilisation de balises compatibles XML qui permet de les écrire dans l'éditeur vectoriel lui-même sans recourir à une édition supplémentaire.

Nous avons un modèle et nous pouvons insérer les données dont nous avons besoin sans aucun problème, mais comment allons-nous réellement effectuer la conversion ? Pour ce faire, nous utiliserons l'interface ligne de commande Inkscape :

#convertir en PDF
Inkscape-A

En utilisant la clé " -UN« Nous recevrons immédiatement un fichier PDF, mais malheureusement, le PDF créé directement est très volumineux. Pour résoudre ce problème, vous pouvez adopter une solution de contournement. À savoir, utilisez l'exportation SVG non pas directement au format PDF, mais le long d'une chaîne SVG->PS->PDF. En utilisant l'utilitaire ps2pdf du kit Ghost Script pour générer le fichier PDF final, nous pouvons réduire la taille du fichier final des dizaines de fois.
#convertir en fichier PostScript
Inkscape-P
#convertir un fichier PostScript en PDF
ps2pdf

Le seul inconvénient est que dans ce cas nous perdrons tous les effets de transparence, puisque le format PostScript ne le supporte pas.

Pour une portabilité complète des documents générés, vous pouvez ajouter l'option « -T» Convertissez tout le texte en courbes. De cette façon, nous pouvons nous débarrasser des problèmes de présence de polices sur la machine client, ainsi que des problèmes d'encodage.

Nous avons maintenant tout ce dont nous avons besoin : un modèle SVG et des commandes de transformation. Écrivons un script PHP qui produirait un fichier pdf généré à partir d'un modèle.

/* ****************************************************************************************
* Script pour générer un fichier de passe PDF en utilisant la conversion séquentielle
* modèle en fichier svg, après quoi il est converti en fichier PostScript par Inkscape,
* et ce dernier est converti en pdf à l'aide de l'utilitaire ps2pdf.
*
* Auteur : Shebastyuk V.V. alias. JStingo
* **************************************************************************************** */

/* paramètres du script */

//Chemin d'accès au dossier contenant les fichiers temporaires
//(si non spécifié, les fichiers seront stockés dans le dossier temporaire du système)
$tmp_dir = "" ; // générer des chemins vers des fichiers temporaires svg, ps et pdf
$tmp_svg_file = tempnam ($tmp_dir, "" );
$tmp_ps_file = tempnam($tmp_dir, "");
$tmp_pdf_file = tempnam($tmp_dir, ""); /* Moteur de création de modèles FastTemplate */
inclure( "include/cls_fast_template.php");
$tpl = new FastTemplate("modèles");try( /* Bloc avec les données reçues pour le modèle */
/* ........................... */
$nom_utilisateur = "JStingo" ;
$register_date = "28/09/2007" ;
/* ........................... */
/* forme le nom du fichier résultant sous la forme User_name.pdf */
$pdf_file_name = $user_name . ".pdf" ; /* traitement du modèle et obtention du fichier résultant */$tpl -> définir (array("svg" => "template.svg" ));
$tpl -> attribuer (array("USER_NAME" => $user_name ,
"R_DATE" => $register_date
));
$tpl -> analyser ("SVG" , "svg" ); // enregistre le fichier svg résultant
$tpl -> FastWrite ("SVG" , $tmp_svg_file ); //convertir le fichier svg en utilisant inkscape en fichier ps
//Clés
// -T - sert à convertir le texte en courbes (pour la prise en charge normale des polices)
// -P - indique la nécessité de convertir en fichier PostScript
système( "inkscape -T $tmp_svg_file -P $tmp_ps_file", $succès );if($succès != 0 )
lancer une nouvelle exception ( "Erreur lors de la génération du fichier PS.");//convertir le fichier ps en pdf à l'aide de l'utilitaire ps2pdf

//Clés
// -dUseFlateCompression=true - définit l'utilisation de la compression
// -dPDFSETTINGS=/printer - définit l'optimisation pour l'impression

système( "ps2pdf -dUseFlateCompression=true -dPDFSETTINGS=/printer $tmp_ps_file $tmp_pdf_file", $succès ); //si la conversion échoue, lève une exception
si($succès != 0 )
lancer une nouvelle exception ( "Erreur lors de la génération du fichier PDF.");// en-tête indiquant que nous enverrons un fichier pdf
entête( "Type de contenu : application/pdf");// Sera appelé comme $pdf_file_name
entête( "Contenu-Disposition : pièce jointe ; nom de fichier="". $nom_fichier_pdf . """ ); // transfère le fichier généré
readfile($tmp_pdf_file); //supprime les fichiers temporaires
@unlink($tmp_svg);
@unlink($tmp_ps_file);
@unlink($tmp_pdf_file);catch(Exception $e)(
/* Si une erreur survient quelque part, nous la signalons */
$tpl -> définir (array("error" => "error.tpl" ));
$tpl -> attribuer ("ERREUR" , $e -> getMessage ()); $tpl -> analyser ( "ERREUR" , "erreur" );
$tpl -> FastPrint("ERREUR");
}
?>

Je pense qu’il ne sera pas trop difficile pour quiconque de réécrire le script dans un autre langage de programmation.

Vous pouvez maintenant ajouter un titre pour le rapport. L'objet FPDF utilise le concept de « position actuelle » où le prochain morceau de texte ou autre élément est inséré. Puisque vous souhaitez que le titre du rapport soit situé au milieu de la page, vous devez déplacer la position actuelle vers ce point, qui est situé à une distance de 160 mm du haut de la page (la valeur est stockée dans le $ variable de configuration reportNameYPos). Pour ce faire, utilisez la méthode FPDF Ln(), qui ajoute un saut de ligne à la distance spécifiée :

$pdf->Ln($reportNameYPos);

Si vous ne spécifiez pas de hauteur de saut de ligne, la hauteur de la dernière cellule affichée sera utilisée.

Ajoutons maintenant le titre du rapport. Il existe plusieurs manières d'ajouter du texte à l'aide de FPDF. Dans notre cas, nous utilisons la méthode Cell(), qui permet, entre autres, de centrer facilement le texte.

Cell() prend les arguments suivants (tous facultatifs) :

  • Hauteur et largeur des cellules. Par défaut, la largeur est étirée jusqu'à la marge droite et la hauteur est définie sur 0.
  • Une chaîne de texte à afficher. Défaut "" .
  • Spécifie s'il faut afficher une bordure autour de la cellule. Il peut s'agir soit d'un nombre (0 = pas de cadre, 1 = dessiner un cadre), soit d'une chaîne avec un ou plusieurs paramètres de la liste suivante : "L" (à gauche), "T" (en haut), "R" ( à droite) et "B" (en bas). Valeur par défaut : 0.
  • Où placer la position actuelle après l'affichage de la cellule. La valeur peut être 0 (à droite de la cellule), 1 (début de la ligne suivante) ou 2 (en dessous). Valeur par défaut : 0.
  • Alignement du texte. Les valeurs possibles sont "L" (aligner à gauche), "C" (aligner au centre) ou "R" (aligner à droite). Valeur par défaut : "L" .
  • L’arrière-plan de la cellule doit-il être rempli de couleur ? true = remplir de couleur, false = laisser l'arrière-plan transparent. Valeur par défaut : faux.
  • URL du lien. Si cette option est définie, la cellule contenant le texte devient un lien fonctionnel vers une autre ressource.

Maintenant, à l’aide de la méthode Cell(), insérez le titre du rapport et alignez-le au centre :

$pdf->

Création d'un pied de page et d'un texte d'introduction

La page de titre est donc prête. Nous devons maintenant créer une page comportant un pied de page, un en-tête et un texte d'introduction, suivis d'un tableau et d'un graphique.

Créons un pied de page. Ajoutons nouvelle page, puis le texte d'en-tête de sortie contenant le titre du rapport est aligné au centre de la page et utilise la taille de police Arial 17. Nous utilisons la variable de configuration $headerColour pour définir la couleur du texte :

$pdf->AddPage(); $pdf->SetTextColor($headerColour, $headerColour, $headerColour); $pdf->SetFont("Arial", "", 17); $pdf->Cell(0, 15, $reportName, 0, 0, "C");

Passons maintenant au texte. Tout d'abord, affichons le titre dans une couleur normale et une taille de police Arial de 20. Comme nous n'avons pas besoin de centrer le texte, nous pouvons utiliser une simple méthode Write(), en lui passant la hauteur de ligne et le texte à afficher (vous pouvez également transmettre éventuellement une URL pour former un lien) :

$pdf->SetTextColor($textColour, $textColour, $textColour); $pdf->SetFont("Arial", "", 20); $pdf->Write(19, "2009 a été une bonne année");

Vous pouvez désormais afficher le texte d'introduction dans la taille de police Arial 12. Il y a des espaces de 16 mm à partir du premier paragraphe et de 12 mm entre les paragraphes. Réglez la hauteur de chaque ligne sur 6 mm :

$pdf->Ln(16); $pdf->SetFont("Arial", "", 12); $pdf->Write(6, "Malgré le ralentissement économique, WidgetCo a connu une bonne année. Les ventes de l'HyperWidget en particulier ont dépassé les attentes. Le quatrième trimestre a généralement été le plus performant ; cela était probablement dû à l'augmentation de nos dépenses publicitaires au troisième trimestre. "); $pdf->Ln(12); $pdf->Write(6, "2010 devrait connaître une croissance accrue des ventes à mesure que nous nous développons dans d'autres pays.");

La méthode Write() avance automatiquement le texte à la ligne suivante lorsqu'il atteint le côté droit de la page.

Ajout de données

Vous devez maintenant ajouter un tableau avec des données sous le texte. Commençons par définir la couleur de la bordure du tableau. La méthode SetDrawColor() définit la couleur utilisée pour les bordures et autres lignes, nous pouvons donc l'utiliser pour définir la couleur des bordures des cellules du tableau. Ensuite, nous abaissons la position actuelle de 15 mm pour créer un espace entre le texte et le tableau :

$pdf->SetDrawColor($tableBorderColour, $tableBorderColour, $tableBorderColour); $pdf->Ln(15);

Création d'une ligne d'en-tête de tableau

Le tableau comporte une ligne qui contient les en-têtes de colonne « PRODUIT », « Q1, « Q2 », « Q3 » et « Q4 » dans les cellules. La cellule « PRODUIT » utilise un texte et une couleur d'arrière-plan différents de ceux des autres en-têtes.

Nous avons déjà utilisé la méthode SetTextColor() pour définir la couleur du texte. Pour définir la couleur d'arrière-plan, vous devez utiliser la méthode SetFillColor(), qui a les mêmes arguments que SetTextColor().

Pour créer des cellules de tableau, utilisez la méthode Cell(), qui définit la largeur et la hauteur des cellules, leur contenu et leur alignement. En passant également 1 comme 4ème argument pour définir la bordure, et true comme 7ème argument pour remplir l'arrière-plan avec la couleur définie.

Vous trouverez ci-dessous le code pour créer la ligne d'en-tête. La police grasse est définie en premier. Une cellule « PRODUIT » est ensuite créée avec le texte et l'arrière-plan appropriés. Il définit ensuite la couleur des 4 cellules d'en-tête restantes et parcourt les éléments du tableau $columnLabels pour afficher les cellules avec le texte aligné au centre :

// Crée une ligne d'en-tête de tableau $pdf->SetFont("Arial", "B", 15); // Cellule "PRODUIT" $pdf->SetTextColor($tableHeaderTopProductTextColour, $tableHeaderTopProductTextColour, $tableHeaderTopProductText Colour); $pdf->SetFillColor($tableHeaderTopProductFillColour, $tableHeaderTopProductFillColour, $tableHeaderTopProductFillColour); $pdf->Cell(46, 12, " PRODUIT", 1, 0, "L", vrai); // Cellules d'en-tête restantes $pdf->SetTextColor($tableHeaderTopTextColour, $tableHeaderTopTextColour, $tableHeaderTopTextColour); $pdf->SetFillColor($tableHeaderTopFillColour, $tableHeaderTopFillColour, $tableHeaderTopFillColour); pour ($i=0; $i Cell(36, 12, $columnLabels[$i], 1, 0, "C", vrai); ) $pdf->Ln(12);

Un espace au début du contenu de la cellule « PRODUIT » permet de mettre en retrait la cellule du tableau par rapport à la bordure gauche. La même astuce sera utilisée pour les noms de produits dans la colonne la plus à gauche (malheureusement, il n'existe pas encore de moyen de contrôler l'indentation des cellules à l'aide de FPDF).

Créer des lignes avec des données

Le reste du tableau se compose de 4 lignes avec des données de ventes (une ligne par produit) pour 4 trimestres. Tout d'abord, définissons quelques variables :

// Crée des lignes avec des données $fill = false; $ligne = 0 ;

Les variables sont utilisées pour :

    $fill : Remplissez ou non l'arrière-plan de la cellule. Nous basculerons cette valeur après la sortie de chaque ligne pour obtenir un effet zébré dans le tableau.

    $row : numéro de ligne actuel. Il vous permet d'afficher le numéro correspondant à chaque ligne au fur et à mesure que vous vous déplacez dans le tableau.

Nous pouvons maintenant parcourir les éléments du tableau $data en utilisant foreach pour afficher des lignes. Pour chaque ligne, nous créons une cellule de gauche contenant le nom du produit et quatre cellules contenant des données. Définissez les couleurs appropriées pour le texte et l'arrière-plan de chaque cellule.

Pour afficher les cellules de données, nous utilisons une boucle for pour parcourir un tableau de données à quatre éléments, et pour afficher les données au format séparé par des milliers, nous appelons la fonction PHP number_format().

Après avoir imprimé une ligne, incrémentez la variable $row, activez la variable $fill et utilisez Ln() pour passer au début de la ligne suivante.

Voici le code de la boucle entière :

Foreach ($data as $dataRow) ( // Crée une cellule de gauche avec un en-tête de ligne $pdf->SetFont("Arial", "B", 15); $pdf->SetTextColor($tableHeaderLeftTextColour, $tableHeaderLeftTextColour, $tableHeaderLeftTextColour ); $pdf->SetFillColor($tableHeaderLeftFillColour, $tableHeaderLeftFillColour, $tableHeaderLeftFillColour); $pdf->Cell(46, 12, " " . $rowLabels[$row], 1, 0, "L", $fill); Créer des cellules avec des données $pdf->SetTextColor($textColour, $textColour, $textColour); $pdf->SetFillColor($tableRowFillColour, $tableRowFillColour, $tableRowFillColour); ); pour ($i=0; $i Cell(36, 12, ("$" . number_format($dataRow[$i])), 1, 0, "C", $fill); ) $ligne++; $remplir = !$remplir; $pdf->Ln(12); )

Créer un graphique

Le dernier élément de notre rapport est un graphique à barres qui affiche un résumé des quatre produits pour l'année entière.

Calculer l'échelle et la largeur d'une colonne

Tout d’abord, vous devez calculer l’échelle des axes X et Y. Pour l’échelle X, le calcul consiste simplement à diviser le nombre de produits par la largeur souhaitée du graphique (vous devez prévoir un léger remplissage à gauche et à droite pour cela. un meilleur aperçu) :

/*** Créer un graphique ***/ // Calculer l'échelle le long de l'axe X $xScale = count($rowLabels) / ($chartWidth - 40);

Pour calculer l'échelle de l'axe Y, vous devez trouver la valeur totale de chaque produit, puis déterminer la valeur maximale parmi eux. Le maximum peut ensuite être divisé par la hauteur de tracé souhaitée pour obtenir la valeur de l'échelle de l'axe Y :

// Calcule l'échelle le long de l'axe Y $maxTotal = 0; foreach ($data comme $dataRow) ( $totalSales = 0; foreach ($dataRow comme $dataCell) $totalSales += $dataCell; $maxTotal = ($totalSales > $maxTotal) ? $totalSales: $maxTotal; ) $yScale = $maxTotal / $chartHeight ;

Maintenant, connaissant l'échelle le long de l'axe X, vous pouvez calculer la largeur (en mm) de chaque colonne du graphique. C'est l'inverse de l'échelle de l'axe X, réduite d'une fois et demie pour organiser la distance entre les colonnes :

// Calcule la largeur des colonnes $barWidth = (1 / $xScale) / 1.5;

Ajout de lignes d'axe et d'étiquettes

Vous pouvez désormais ajouter des lignes d'axes X et Y, des étiquettes de données et des étiquettes d'axe. Nous utilisons la police Arial de taille 10 pour les étiquettes de données.

Pour tracer une ligne dans FDPF, utilisez la méthode Line(), qui prend quatre arguments : les coordonnées X et Y du début de la ligne et les coordonnées X et Y de la fin de la ligne.

Pour l'axe X, tracez une ligne horizontale le long du bas du graphique, en laissant 30 mm pour les étiquettes sur l'axe Y à gauche. Ensuite, nous affichons chaque nom de produit dans le tableau $rowLabels sous forme de cellule de texte à l'endroit approprié :

// Ajout d'axes : $pdf->SetFont("Arial", "", 10); // Axe X $pdf->Ligne($chartXPos + 30, $chartYPos, $chartXPos + $chartWidth, $chartYPos); pour ($i=0; $i< count($rowLabels); $i++) { $pdf->SetXY($chartXPos + 40 + $i / $xScale, $chartYPos); $pdf->Cell($barWidth, 10, $rowLabels[$i], 0, 0, "C"); )

La méthode SetXY() vous permet de définir la position actuelle à l'emplacement souhaité sur la page.

Pour l'axe Y, tracez une ligne verticale à gauche du graphique, en laissant 30 mm pour les étiquettes de données sur l'axe Y. Faites en sorte que la ligne d'axe soit 8 mm plus grande que la hauteur souhaitée du graphique afin qu'il y ait de la place pour afficher l'axe. étiquette. Ensuite, nous effectuons une boucle de zéro à la valeur de données maximale $maxTotal, définie précédemment. La taille du pas est définie dans la variable $chartYStep (20 000). A chaque étape, nous affichons la valeur actuelle de la ligne alignée à droite et une courte étiquette :

// Axe Y $pdf->Ligne($chartXPos + 30, $chartYPos, $chartXPos + 30, $chartYPos - $chartHeight - 8); pour ($i=0; $i<= $maxTotal; $i += $chartYStep) { $pdf->SetXY($chartXPos + 7, $chartYPos - 5 - $i / $yScale); $pdf->Cell(20, 10, "$" . number_format($i), 0, 0, "R"); $pdf->Ligne($chartXPos + 28, $chartYPos - $i / $yScale, $chartXPos + 30, $chartYPos - $i / $yScale); )

Vous pouvez maintenant ajouter des étiquettes d'axe. Nous utilisons la taille de police Arial gras 12. Nous plaçons l'étiquette de l'axe X sous les étiquettes de données et l'étiquette de l'axe Y en haut de l'axe Y :

// Ajout d'étiquettes d'axe $pdf->SetFont("Arial", "B", 12); $pdf->SetXY($chartWidth / 2 + 20, $chartYPos + 8); $pdf->Cell(30, 10, $chartXLabel, 0, 0, "C"); $pdf->SetXY($chartXPos + 7, $chartYPos - $chartHeight - 12); $pdf->Cell(20, 10, $chartYLLabel, 0, 0, "R");

Afficher les colonnes du graphique

La dernière étape est la création du planning lui-même. Pour générer des colonnes, utilisez la méthode FPDF Rect(), qui génère un rectangle. La méthode utilise les arguments suivants :

  • Les coordonnées X et Y du coin supérieur gauche du rectangle.
  • La largeur et la hauteur du rectangle.
  • Style rectangulaire. Peut avoir les valeurs "D" ou "" (dessiner un trait), "F" (remplir avec la couleur d'arrière-plan actuelle) ou "DF" / "FD" (trait et remplissage).

Maintenant, nous affichons les colonnes. Définissons la variable $xPos, qui sert à suivre la position actuelle en X. Fixons-la à 40 mm, en tenant compte de la distance des étiquettes sur l'axe Y et du retrait de la première colonne. Créons maintenant une variable $bar qui contiendra le numéro de colonne actuel. Ceci sera utilisé pour définir la couleur de la colonne :

// Crée des colonnes $xPos = $chartXPos + 40; $barre = 0 ;

Maintenant, nous parcourons le tableau $data, calculons la valeur totale de chaque ligne et imprimons une colonne de l'axe X à cette valeur, mise à l'échelle par $yScale . La couleur de chaque colonne est modifiée à l'aide du compteur $bar, qui est un index dans le tableau $chartColours. Après avoir affiché la colonne actuelle, déplacez la position X au début de la suivante, incrémentez le compteur $bar et continuez la boucle :

Foreach ($data as $dataRow) ( // Calculer la valeur totale de la ligne de données pour le produit $totalSales = 0; foreach ($dataRow as $dataCell) $totalSales += $dataCell; // Créer une colonne $colourIndex = $bar % nombre ($chartColours); $pdf->SetFillColor($chartColours[$colourIndex], $chartColours[$colourIndex], $chartColours[$colourIndex]); $totalSales / $ yScale), $barWidth, $totalSales / $yScale, "DF" ;

Le code utilise l'opérateur PHP modulo (%) pour répéter la couleur des colonnes si le nombre de colonnes dépasse le nombre d'éléments dans le tableau $chartColours.

Envoi d'un document PDF au navigateur

Le document PDF est prêt ! Il ne reste plus qu'à l'envoyer au navigateur pour que l'utilisateur puisse le visualiser ou le télécharger.

La méthode FPDF Output() est utilisée pour cela. Il prend deux arguments : le nom prévu pour le fichier PDF et un indicateur de destination. Ce flag peut prendre les valeurs suivantes :

    I : Afficher le PDF à l'écran si une telle fonction est prise en charge par le navigateur, sinon télécharger.

    D : Téléchargez le PDF.

    F : Enregistrez le fichier dans un dossier sur le serveur.

    S : renvoie les données PDF sous forme de chaîne.

Pour notre exemple, utilisez l'option I pour afficher le PDF à l'écran si possible :

/*** Sortie PDF ***/ $pdf->Output("report.pdf", "I"); ?>

Output() envoie automatiquement l'en-tête HTTP « Content-type : application/pdf », qui signale au navigateur qu'il attend un document PDF.

Vous êtes maintenant prêt à tester le script. Ouvrez votre navigateur et accédez à l'URL où se trouve le script, par exemple www.example.com/report.php. Vous devriez voir le PDF dans la fenêtre de votre navigateur. Ou bien, une boîte de dialogue apparaîtra vous demandant d'enregistrer le document PDF sur votre disque dur. Vous pouvez ensuite ouvrir le fichier PDF dans un lecteur PDF, par ex. lecteur Acrobat ou Aperçu.

Pour créer Document PDF Vous n'avez besoin que de PHP et FPDF.

Conclusion

Dans ce tutoriel vous avez appris à utiliser PHP avec la bibliothèque FPDF pour générer un rapport au format PDF. Les méthodes de la bibliothèque FPDF pour générer du texte, des tableaux et des graphiques ont été démontrées.

Cependant, la bibliothèque FPDF peut faire bien plus, comme créer des en-têtes et des pieds de page pour les pages, utiliser la navigation automatique dans les pages, etc. Consultez la documentation de la bibliothèque sur le site Web FPDF.



2024 wisemotors.ru. Comment ça fonctionne. Fer. Exploitation minière. Crypto-monnaie.