我试图将一些文字(页码)添加到现有的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
此外,如果有人对如何以更好的方式在右上方插入引用有任何想法,我们将不胜感激。
答案 0 :(得分:0)
我不是PyPDF2的专家,但它看起来像你的函数中唯一的区域,你有PyPDF2.PdfFileWriter()在你的for循环中,所以我怀疑你是在启动一个新文件并添加到它每次都在你的for循环中,这可能会导致你看到的最终结果。