PyPDF2& ReportLab编辑PDF并合并多个页面

时间:2018-06-14 00:56:16

标签: python pdf reportlab pypdf2

我试图将一些文字(页码)添加到现有的PDF文件中。 使用PyPDF2包迭代原始文件,创建画布,然后合并这两个文件。我的问题是,一旦程序完成,新的pdf文件只有原始pdf的最后一页,而不是所有页面。

例如。如果原始pdf有33页,则新pdf只有最后一页但编号正确。

也许代码可以在explainng上做得更好:

    def test(location, reference, destination):
file = open(location, "rb") 
read_pdf = PyPDF2.PdfFileReader(file)

for i in range (0, read_pdf.getNumPages()): 
    page = read_pdf.getPage(i)

    pageReference = "%s_%s"%(reference,format(i+1, '03d'))
    width = getPageSizeW(page)
    height = getPageSizeH(page)
    pagesize = (width, height)

    packet = io.BytesIO()
    can = canvas.Canvas(packet, pagesize = pagesize) 
    can.setFillColorRGB(1,0,0)
    can.drawString(height*3.5, height*2.75, pageReference)
    can.save()

    packet.seek(0) 
    new_pdf = PyPDF2.PdfFileReader(packet)
    #add new pdf to old pdf
    output = PyPDF2.PdfFileWriter()

    page.mergePage(new_pdf.getPage(0))
    output.addPage(page)
    outputStream = open(destination, 'wb')
    output.write(outputStream)

    print(pageReference)

outputStream.close()
file.close()

    def getPageSizeH(p):
        h = float(p.mediaBox.getHeight()) * 0.352
        return h

   def getPageSizeW(p):
        w = float(p.mediaBox.getWidth()) * 0.352
        return w

此外,如果有人对如何以更好的方式在右上方插入引用有任何想法,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不是PyPDF2的专家,但它看起来像你的函数中唯一的区域,你有PyPDF2.PdfFileWriter()在你的for循环中,所以我怀疑你是在启动一个新文件并添加到它每次都在你的for循环中,这可能会导致你看到的最终结果。