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()