Python 在同一页上打印两次的文本

Python 在同一页上打印两次的文本,python,python-2.7,reportlab,pypdf2,Python,Python 2.7,Reportlab,Pypdf2,我对生成的pdf有一个问题,生成的pdf文件有4页,我使用现有的pdf文件有两页。我必须使用pyPD2和reportlab编写一些文本 当我使用getPage()方法时,我想在合并之前复制一个页面,但由于某些原因,它使用同一个页面,我的文本被打印了好几次 我怎样才能避免呢 我的代码: packet = io.BytesIO() can = canvas.Canvas(packet) can.drawString(0,0, "Print on page 1") can.showPage() can

我对生成的pdf有一个问题,生成的pdf文件有4页,我使用现有的pdf文件有两页。我必须使用
pyPD2
reportlab
编写一些文本

当我使用
getPage()
方法时,我想在合并之前复制一个页面,但由于某些原因,它使用同一个页面,我的文本被打印了好几次

我怎样才能避免呢

我的代码

packet = io.BytesIO()
can = canvas.Canvas(packet)
can.drawString(0,0, "Print on page 1")
can.showPage()
can.drawString(200,200, "Print on page 2")
can.showPage()
can.drawString(0,0, "Print on page 3")
can.showPage()
can.drawString(200,200, "Print on page 4")
can.save()

new_pdf = PdfFileReader(packet)

path_of_two_page_pdf = 'overview.pdf'
existing_pdf = PdfFileReader(file(path_of_two_page_pdf, "rb"))

output = PdfFileWriter()
for pi in range(4):
    page = existing_pdf.getPage(pi % 2)
    page.mergePage(new_pdf.getPage(pi))
    output.addPage(page)

outputStream = file("NEW_PDF.pdf", "wb")
output.write(outputStream)
outputStream.close()

问题是
getPage()
实际上返回指向页面的指针,而不是一个全新的页面。因此,当应用
mergePage()
时,它会将其合并到现有的pdf中

最简单的解决方法是首先创建一个空白页面,并使用该页面将其他页面合并到其中,如下所示:

for pi in range(2*2):
    # By doing this we will always create a blank page with the same size as the last page of the existing_pdf
    new_page = PageObject.createBlankPage(pdf=existing_pdf)

    # Merge the pages onto the blank page
    new_page.mergePage(existing_pdf.getPage(pi % 2))
    new_page.mergePage(new_pdf.getPage(pi))

    # Add the new page to the output
    output.addPage(new_page)

注意,除了使用
createBlankPage
创建一个完全独立的空白页面外,您还可以使用
output.addBlankPage
来创建一个完全独立的空白页面,但这需要手动设置页面大小,这可能并不理想。因此,使用了
createBlankPage
pdf
关键字,这将页面大小设置为所提供pdf的最后一页。

可以使用上面的@B8vrede维度
addBlankPage
,因此我不是创建一个单独的空白页面,而是创建一个名为
addBlankPage
(返回对新创建页面的引用)指定
A4
大小

from reportlab.lib.pagesizes import A4


for pi in range(4):
    new_page = output.addBlankPage(*A4)
    new_page.mergePage(existing_pdf.getPage(pi % 2))
    new_page.mergePage(new_pdf.getPage(pi))

你能链接到输入文件以便我能进一步查看吗?@B8vrede我不明白为什么会这样做。任何有两页的PDF都很好(我在每一页上画了不同的字符串)。但由于我刚刚修复了这一部分,我删除了downvote@B8vrede谢谢你的编辑。