0
votes

Python - Comment combiner deux pages pdf en une seule page

Je génère une série de graphiques en utilisant matplotlib. Chaque tracé est destiné à un emplacement différent, les données dans le tracé changeront donc.

J'ai également un modèle PDF que j'aimerais utiliser pour coller les graphiques à l'intérieur. Ce modèle est plus compliqué que je ne voudrais le répliquer dans matplotlib.

J'ai défini la transparence sur True, j'espère donc qu'elle fusionnera bien sans couvrir certaines parties du modèle.

Ce que j'essayais était d'exporter d'abord le tracé matplotlib sous forme de pdf, puis d'utiliser PyPDF2 pour fusionner les deux pdf ensemble, mais cela ne semble pas fonctionner car je me retrouve juste avec deux pages séparées, ce qui ... mais je '' Je ne sais pas trop où aller à partir d'ici.

plt.savefig("testhole.pdf", transparent=True)
#Merge pdf's
path = r'C:\Users\xxx\PycharmProjects\xxx'
template_path = path + r'\Template.pdf'
testhole_file = path + r'\testhole.pdf'
test_hole_path = path + r'\\' + location + r'.pdf'
pdf_template = PdfFileReader(template_path)
pdf_testhole = PdfFileReader(testhole_file)
pdf_merger = PdfFileMerger()
pdf_merger.append(pdf_template)
pdf_merger.append(pdf_testhole)
with open(test_hole_path, 'wb') as fileobj:
    pdf_merger.write(fileobj)


0 commentaires

3 Réponses :


0
votes

puisque append nécessite qu'un fileobj soit passé, je pense que vous devez utiliser:

pdf_template = PdfFileReader(open(template_path, 'rb'))
pdf_testhole = PdfFileReader(open(testhole_file, 'rb'))

S'il vous plaît, faites-moi savoir si cela résout votre problème


0 commentaires

0
votes

J'ai eu du mal avec PyPDF2 en ajoutant un tampon à une ou une série de pages, je suis passé à pdfrw et j'ai résolu mes besoins.

def add_stamp_to_pdf(form_pdf, overlay_pdf, output):

    form = pdfrw.PdfReader(form_pdf)
    olay = pdfrw.PdfReader(overlay_pdf)
    
    for form_page, overlay_page in zip(form.pages, olay.pages):
        merge_obj = pdfrw.PageMerge()
        overlay = merge_obj.add(overlay_page)[0]
        pdfrw.PageMerge(form_page).add(overlay).render()
        
    writer = pdfrw.PdfWriter()
    writer.write(output, form)

Il y a aussi un très bon article de Mike Driscoll https://www.blog.pythonlibrary.org/2018/06/06/creating-and-manipulating-pdfs-with-pdfrw/


0 commentaires

0
votes

Merci Flavio, je n'ai pas essayé votre réponse mais j'ai pu la faire fonctionner. L'idée de base est comme l'ajout d'un filigrane:

#sns.lineplot(x=sieves, y=percent_finer, ax=ax)
plt.savefig("testhole.pdf", transparent=True)

#Merge pdf's
path = r'C:\Users\xxx\PycharmProjects\xxx'
template_path = path + r'\Template.pdf'
testhole_file = path + r'\testhole.pdf'
test_hole_path = path + r'\\' + location + r'.pdf'
pdf_template = PdfFileReader(template_path).getPage(0)
pdf_testhole = PdfFileReader(testhole_file)
pdf_writer = PdfFileWriter()

#Merge pages together
for page in range(pdf_testhole.getNumPages()):
    page = pdf_testhole.getPage(page)
    page.mergePage(pdf_template)
    pdf_writer.addPage(page)

with open(test_hole_path,'wb') as fileobj:
    pdf_writer.write(fileobj)


0 commentaires