[reportlab-users] [PyPDF] I would like merge two A4 PDF documents in PDF document with A4 size + 10 mm (width + 10mm, height + 10mm)

KLEIN Stéphane stephane at harobed.org
Fri Mar 27 06:10:34 EDT 2009


Le Thu, 26 Mar 2009 15:51:02 +0000, KLEIN Stéphane a écrit :


> Hi,

>

> To summarize, with PyPDF package, I would like merge two A4 PDF

> documents in PDF document with A4 size + 10 mm (width + 10mm, height +

> 10mm).

>

> First, I merge two PDF pages with this code :

>

> ::

>

> outputStream = file("output.pdf", "w") output = PdfFileWriter()

>

> background_pages = PdfFileReader(file("background.pdf", "rb"))

> foreground_pages = PdfFileReader(file("foreground.pdf", "rb"))

>

> bg_page0 = background_pages.getPage(0) fg_page0 =

> foreground_pages.getPage(0)

>

> bg_page0.mergePage( fg_page0 )

>

> output.addPage(page0)

>

> output.write(outputStream)

> outputStream.close()

>

> This works greatly.

>

> Background and foreground PDF documents size are A4 (paper size).

>

> From this point, I would like :

>

> 1. create an empty page with this paper size : A4 width + 10 mm, A4

> height + 10 mm

> 2. merge and center background page in current page (page create at step

> 1)

> 3. merge and center foreground page

>

> I don't know :

>

> * how to change page size ?

> * how to merge and center page ?


I found a solution to "translate" a page :


::


from reportlab.lib.units import mm
import pyPdf

def translate_pdf_page(page, delta_x, delta_y):
content = pyPdf.pdf.ContentStream(page["/Contents"].getObject(),
page.pdf)
content.operations.insert(0, [[], '1 0 0 1 %s %s cm' %
(delta_x,delta_y)] )
page[pyPdf.generic.NameObject('/Contents')] = content

outputStream = file("output.pdf", "w")
output = pyPdf.pdf.PdfFileWriter()

background_pages = pyPdf.pdf.PdfFileReader(file("background.pdf",
"rb"))
foreground_pages = pyPdf.pdf.PdfFileReader(file("foreground.pdf",
"rb"))

bg_page0 = background_pages.getPage(0)
fg_page0 = foreground_pages.getPage(0)

translate_pdf_page(fg_page0, 5 * mm, 5 * mm)

bg_page0.mergePage( fg_page0 )

output.addPage(bg_page0)

output.write(outputStream)
outputStream.close()

Regards,
Stephane



More information about the reportlab-users mailing list