8722 sujets

Développement web côté serveur, CMS

Bonjour à tous
Ayant fabriqué une page HTML (avec pas mal de CSS, des webfonts,des images etc) j'aimerais obtenir un fichier pdf reproduisant ce contenu.
Mes recherches m'ont amené à des produits du genre html2pdf qui m'ont l'air horriblement compliqués à utiliser, et même en premier lieu à installer sur un hébergement mutualisé.
Existe-t-il un moyen plus simple de faire quelque chose qui n'est au fond qu'une capture d'écran?
Administrateur
Bonjour,

un PDF peut n'être qu'une image copiée sur une page blanche mais en général c'est une litanie de tags et de fonctionnalités. Paragraphes, listes, images, liens, titres, tableaux (et au secours quand c'est vidéo, audio et formulaires) avec les mêmes capacités qu'en CSS pour les styles. Smiley cligne

La Rolls c'est Prince XML (tant au niveau du prix plusieurs milliers d'Euro que des fonctionnalités) donc on oublie tout de suite…
https://www.quora.com/What-is-the-best-way-to-generate-a-PDF-file-from-HTML-and-CSS semble indiquer mPDF une bibliothèque PHP.

EDIT : c'est bien pour un usage sur toutes les pages d'un site (enfin beaucoup) ? Pour un usage perso, dans le navigateur Imprimer dans un PDF est suffisant Smiley smile
Modifié par Felipe (26 Sep 2019 - 15:05)
Merci de ta réponse

Il s'agit du reçu des dons à une association pour crédit d'impôt.

Ce que je veux faire, c'est générer les reçus en PDF à partir de la table des donateurs et de leurs dons et envoyer les reçus aux donateurs par mail en attachement.
Actuellement nous faisons ça par un publipostage Word sur une table Excel, ça génère du papier qu'on doit envoyer par la poste.
Je vais reprendre ma boîte à outils Word/Vba, que je n'ai pas utilisée depuis une douzaine d'années, et essayer de faire quelque chose. Smiley sweatdrop

C'est sûr que je suis actuellement plus capable de faire des choses en PHP, CSS et JS, mais je ne vois pas comment faire simplement.

S'il faut écrire des commandes pour dire "écrire ce texte en coordonnées X,Y en police ZZZ" c'est un long travail pour quelque chose qui ne sert qu'une fois par an.

Si je génère les reçus sous forme HTML et que je fais moi-même les impressions en pdf, il faut le faire pour chaque reçu, ce qui n'est pas très pratique.
Une meilleure idée serait la bienvenue... Smiley biggrin
Bonjour à tous,

Avec firefox tu peux imprimer en .pdf. Il faut faire : imprimer/imprimer dans un fichier -> mozilla.pdf
Administrateur
J'ai tenté plusieurs approches pour générer des PDF, entre autres :
- directement depuis PHP avec des instructions de production de document : long et peu souple
- à partir d'un document HTML/CSS (probablement avec html2pdf mais je ne me souviens plus de la lib exacte qui "interprète" à sa manière les styles) : abandonné car trop approximatif
- en partant d'un modèle de fichier LibreOffice (.odt) déjà conçu, modifié par odtphp pour injecter les bonnes valeurs (texte, nombres, lignes de tableau), puis converti à la volée par
unoconv --format pdf --output fichier.pdf
mais cela nécessite un serveur dédié sur lequel est installé LibreOffice lui-même : suffisant pour cet usage

Il y a certainement beaucoup d'autres pistes plus optimisées.
Rodolphe a écrit :

- à partir d'un document HTML/CSS (probablement avec html2pdf mais je ne me souviens plus de la lib exacte qui "interprète" à sa manière les styles) : abandonné car trop approximati


Alors personnelement j'utilise MPDF (https://mpdf.github.io/)

Et je fais du HTML / CSS dans une seul page, en mode normal, et ça me génère un PDF.

J'ai un template/pdf.html.twig

Et j'ai mon controlleur qui vient remplir mon template .


	
$html2pdf = new Mpdf();
		$html2pdf->writeHTML($this->render('pdf/pdf.html.twig',array(
			'nom_struct' 		=> $denoStruct,
			'nom_event' 		=> $nomEvent,
			'date' 			=> $date->format('d/m/Y'),
			'auteur' 			=> $auteur,
			'email' 			=> $email,
			'listData' 			=> $listData,
			'listResult'		=> $listResult,
			'listConclu'		=> $listConclu,
			'typeStruct' 		=> $typeStruct,
			'vitesseVent'		=> $vitesseVent,
			'habille'  			=> $habille,
			'typePortique'		=> $typePortique,
			'sizeStructure'		=> $this->sizeStructure,
			'formeTotem' 		=> $formeTotem,
		)));
		$html2pdf->output($denoStruct.'.pdf', 'I');


*
Et dans mon template twig j'ai bien évidement des choses simples :

<div class="box-event">
            <div class="under-box-event">
                <div class="lb-nom-struct">
                    <label >XXX XXX XXX XXX <span>{{ nom_struct }}</span></label>
                    <br/>
                </div>
                <div class="lb-nom-event"><label>{{ nom_event }}</label></div>
                <ul id="list-auteur">
                    <li>Date : <span>{{ date }}</span></li>
                    <li>Auteur : <span>{{ auteur }}</span></li>
                    <li>Email : <span>{{ email }}</span></li>
                </ul>
            </div>
        </div>

Modifié par JENCAL (27 Sep 2019 - 11:20)
Le problème de tous ces produits c'est qu'il faut les installer Smiley rolleyes
Le site de notre association est en hébergement partagé, ce qui ne me permet pas d'ajouter des librairies de ce genre, ou du moins je ne sais pas comment faire.

L'état de mes réflexions:
1 - Option "locale": je fais tout en Word publipostage et on envoie les reçus par la poste (ou on les remets de la main à la main)
On peut également fabriquer des fichiers pdf en local et les envoyer par mail, mais je n'ai pas trouvé d'outil simple pour faire ça, il va falloir que je fasse un développement sur PC, ce que je n'ai pas fait depuis 12 ans, j'ai perdu la main.
Je vais creuser la proposition de limipl

2 - Option "sur le site":
Je génère une page HTML par reçu, je donne l'adresse de la page aux donateurs et ils impriment par eux mêmes.
C'est de loin le plus pratique, mais ça facilite pas mal les tricheries: un utilisateur un peu averti peut modifier le contenu de la page avant de l'imprimer, par exemple en utilisant les outils de mise au point de son navigateur. C'est pour cela que je voulais générer un fichier pdf.
Il est vrai que l'on peut également modifier un fichier pdf avec pas mal d'outils disponibles sur le web.
On peut également faire des fichiers PDF en local en imprimant la page par une imprimante virtuelle, comme proposé par papillon41, puis envoyer ces fichiers par mail.
Là aussi ça fait pas mal de boulot en local.
Bonjour.
Il est possible de générer des PDF à partir de documents créés sous Open Office / Libre Office et les expédier ensuite par mail. Leur module de conversion doc / pff fonctionne bien.
Par ailleurs tu peux aussi jeter un oeil sur les conversions XML / PDF via XSLT... Il existe une feuille de style XSLT qui prend en charge ce type de conversion, bien que je ne l'aie pas utilisée depuis fort longtemps.
Merci, je vais essayer de voir ce qu’on peut faire en xslt ça fait très longtemps que je n’ai pas utilisé cette techno mais je devrais savoir le faire
Pour ma part j'utilise -https://www.jsoft.fr/logiciel-pdf-reducteur/ et j'en suis contente. J'ai essayé pour voir un peu ce que ça donnait et je ne suis pas déçue.
Modifié par Felipe (15 Oct 2019 - 10:02)