Créer des pages au format pdf
Une fonctionnalité très recherchée de nos jours consiste à offrir la possibilité aux internautes de convertir les pages d'un site au format pdf. Les raisons peuvent être variées. Le principal intérêt du pdf, c'est de proposer un document dont la mise en page pourrait être complexe tout en conservant les illustrations, la police, etc. Le format pdf est d'ailleurs devenu un standart puisqu'il peut être lu sur un grand nombre de systèmes d'exploitation - il faut biensûr disposer du lecteur pdf adequat. Enfin, un fichier pdf peut être imprimé et echangé très facilement.
1. Installation de l'extension pdf generator 2
L'extension pdf_generator2 utilise la librairie html2pdf pour la conversion des pages au format pdf. Cette conversion dans TYPO3 est donc limitée aux fonctionnalités offertes par html2pdf.
Pour télécharger la dernière version de l'extension, commencez par mettre à jour les extensions disponibles depuis l'extension manager.
Rappatriez ensuite l'extension sur votre serveur.
Note pour TemplaVoilà :
Vous devez également installer tv_pdfgen pour le bon fonctionnement de l'extension.
Notes générales :
- les fichiers étant stockés en base de données, vous pouvez décider d'installer l'extension file_based_cache pour stocker les fichiers sur le système. L'option est intéressante si les fichiers générés sont de taille importante (plus d'un Mo par exemple). Généralement, les accès au serveur de fichiers sont plus rapides que les accès en base de données. A vérifier avec file_based_cache.
- vous pouvez installer l'extension pdf_generator2_fonts si vous souhaitez disposer de polices supplémentaires pour le rendu des fichiers pdf.
Lors de l'installation, des options sont proposées. Il s'agit de :
- simulateStaticPdf : si cette option est activée, les liens vers les fichiers pdf sont statiques (alias de la page + '.pdf') mais vous devrez mettre à jour la coniguration de votre serveur web pour rediriger correctement les requêtes.
Voici un exemple issu de la documentation :
ErrorDocument 404 /error.html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^typo3$ /typo3/index_re.php
RewriteRule ^[^/]*\.html$ index.php
RewriteRule ^[^/]*\.pdf$ index.php
- Disable gzip compression : le gain en compression est minime. Cette option reste activée - donc compression supplémentaire inactive (oui, c'est TYPO3 :)) )
- typeID : par défaut, les liens vers les fichiers pdf sont générés de la sorte :
index.php?id=xyz&type=123
123 est une convention. Vous pouvez modifier l'option ici ou bien dans les constantes de votre template.
2. Configuration de pdf_generator2
Dans l'exemple suivant, nous allons faire un lien sur une image stockées dans le répertoire fileadmin. Elle représente une icone de fichier pdf.
D'autres exemples sont disponibles dans la documentation officielle de l'extension.
Constantes du gabarit :
// Type pour le format pdf (123 par défaut)
extension.pdf_generator.typeNum = 123
pdf_generator2 {
# cat=pdf_generator2/dims/0; type=string; label=browserwidth: Largeur du fichier pdf généré
browserwidth = 700
# cat=pdf_generator2/dims/1; type=string; label=size: Format du fichier pdf généré
size = A4
# cat=pdf_generator2/dims/3; type=string; label=top: Marge haute en mm.
top = 5
# cat=pdf_generator2/dims/4; type=string; label=bottom: Marge bas en mm.
bottom = 5
# cat=pdf_generator2/dims/5; type=string; label=left: Marge gauche en mm.
left = 5
# cat=pdf_generator2/dims/6; type=string; label=right: Marge droite en mm.
right = 5
}
D'autres constantes sont accessibles depuis l'éditeur de constantes.
Setup du gabarit
J'ai un marqueur temp.pdf dans mon gabarit.
J'utilise un autre template pour personnaliser l'affichage du pdf. Je n'ai pas envie d'avoir mon arborescence ou bien d'autres parties de mon gabarit dans le fichier pdf. Le fichier pdf.html appelé depuis le setup ci-dessous contient des marqueurs (div id="LEFT", id="RIGHT", etc)
temp.pdf = IMAGE
temp.pdf {
file = fileadmin/templates/main/img/icone_pdf.gif
stdWrap.postUserFunc = tx_pdfgenerator2->makePdfLink
postUserFunc.include_post_vars = 1
altText = pdf
wrap = |
}
pdf_generator {
typeNum = {$extension.pdf_generator.typeNum}
config {
pageGenScript = EXT:pdf_generator2/gen_pdf.php
admPanel = 0
additionalHeaders = Content-type: application/pdf
}
// Feuille de styles pour le fichier pdf généré
stylesheet = fileadmin/templates/main/pdf-tmpl/pdf.css
60 = TEMPLATE
60 {
template = FILE
// Template HTML personnalisé pour l'affichage des colonnes dans le pdf
template.file = fileadmin/templates/main/pdf-tmpl/pdf.html
// Subparts localisés dans mon template personnalisé
subparts {
CONTENT < styles.content.get
LEFT < styles.content.getLeft
RIGHT < styles.content.getRight
}
workOnSubpart = TMPL_PDF
}
// Destruction des objets par défaut
50 >
}
3. Conclusion
C'est à peu près tout pour la configuration. Sachez que vous pouvez attacher une css qui sera utilisée pour l'affichage des styles lors du rendu. C'est l'attribut 'stylesheet' dans le gabarit. Notez toutefois que le rendu des tableaux n'est pas supporté par html2pdf si vos tableaux sont réalisés avec des balises div. Vous voilà prévenus ;o)
Les derniers articles à consulter :
TYPO3 et le e-Commerce (1ère partie)
Quelle extension utiliser pour faire du e-Commerce avec TYPO3 ?
Felogin, la newloginbox intégrée (TYPO3 v 4.2)
Felogin remplace l'extension newloginbox et offre la possibilité d'offrir une boite de connexion pour protéger l'accès à certaines pages.
Créer un Google sitemap (plan du site XML)
Comment créer un plan du site XML ou plus communément un Google sitemap pour améliorer l'indexation de son site par Google.