Reputation: 215
I'm generating a lot of PDFs and for each 5 PDFs, I want to combine then on one page.
from pypdf import PdfMerger
merger = PdfMerger()
for pdf in ["out_mitry.pdf", "out_cdg.pdf"]:
merger.append(pdf)
merger.write("result.pdf")
merger.close()
My actual result is getting the merge but every pdf is on one page. I want to merge 5 pdf in one page
Upvotes: 1
Views: 512
Reputation: 346
I recently ran into a problem like this and found a solution. I demonstrate solution for two one page files and you can easily extend it to any number of pdfs.
Let's combine pages this way:
---------
| | |
| 1 | 2 |
| | |
---------
from pypdf import PdfWriter, PdfReader, PageObject, Transformation
pdf_filenames = ["out_mitry.pdf", "out_cdg.pdf"]
reader1 = PdfReader(pdf_filenames[0])
reader2 = PdfReader(pdf_filenames[1])
page1 = reader1.pages[0]
page2 = reader2.pages[0]
total_width = page1.mediabox.right + page2.mediabox.right
total_height = max([page1.mediabox.top, page2.mediabox.top])
new_page = PageObject.create_blank_page(width=total_width, height=total_height)
# Add first page at the 0,0 position
new_page.merge_page(page1)
# Add second page with moving along the axis x
page2.add_transformation(Transformation().translate(page1.mediabox.right, 0))
page2.mediabox = new_page.mediabox # ensure it is visible
new_page.merge_page(page2)
writer = PdfWriter()
writer.add_page(new_page)
writer.write(open("result.pdf", "wb"))
Upvotes: 3