PDF

Deux librairies très utiles:

reportLab: qui permet d’ecrire des pdf à partir de rien doc assez complète (en) graphic paragraphe…

pyPdf: qui permet de manipuler des pdf existant notament de fusionner des pages pour produire de nouveaux pdf

Combinaison des deux permet de créer un model de formulaire et de rajouter des données à la volée pour produire rapidement de documents variable.

Dans mon cas : Un modèle riche avec mise en forme. openOffice -> modele.pdf

+ base de données dont les champs doivent être fusionnés avec le doc modèle. (la fusion native ooo ne s’avérant pas hyper clean…)

 

Exemple reportLab en oeuvre

from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
cnv=canvas.Canvas(fichier)
cnv.setTitle('Grand titre')	
cnv.setFont("Helvetica-Bold",11)
cnv.drawString(90*mm, 111*mm,'mon texte')
textobject = cnv.beginText()
textobject.setTextOrigin(135*mm, 168*mm)
textobject.setFont("Helvetica-Oblique", 8)
textobject.textLines('''ligne1.\n ligne 2...'''))
cnv.drawText(textobject)
cnv.save()

Exemple de fusion de la première pag de 2 pdfs:

#-*-coding:utf-8-*-
from pyPdf import PdfFileWriter, PdfFileReader
# pdf entrée 1
pdf_file_model = PdfFileReader(file("Model.pdf", "rb"))
pdf_page_model = pdf_file_model.getPage(0)
# pdf entrée 2
pdf_file_data = PdfFileReader(file("test.pdf", "rb"))
pdf_page_data = pdf_file_data.getPage(0)
# fusion / merge
pdf_page_model.mergePage(pdf_page_data)
# pdf sortie
output = PdfFileWriter()
# ajout les données de la fusion sur la sortie
output.addPage(pdf_page_model)
# ecrit la sortie dans un fichier
outputStream = file("doc-output.pdf", "wb")
output.write(outputStream)
outputStream.close()

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *