嗨我试图使用pypdf2为pdf文件添加水印虽然我收到此错误但我无法弄清楚出了什么问题。
我收到以下错误:
Traceback (most recent call last): File "test.py", line 13, in <module>
page.mergePage(watermark.getPage(0)) File "C:\Python27\site-packages\PyPDF2\pdf.py", line 1594, in mergePage
self._mergePage(page2) File "C:\Python27\site-packages\PyPDF2\pdf.py", line 1651, in _mergePage
page2Content, rename, self.pdf) File "C:Python27\site-packages\PyPDF2\pdf.py", line 1547, in
_contentStreamRename
op = operands[i] KeyError: 0
在Windows 32bit上使用python 2.7.6和pypdf2 1.19。 希望有人可以告诉我我做错了什么。
我的python文件:
from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
input = PdfFileReader(open("test.pdf", "rb"))
watermark = PdfFileReader(open("watermark.pdf", "rb"))
# print how many pages input1 has:
print("test.pdf has %d pages." % input.getNumPages())
print("watermark.pdf has %d pages." % watermark.getNumPages())
# add page 0 from input, but first add a watermark from another PDF:
page = input.getPage(0)
page.mergePage(watermark.getPage(0))
output.addPage(page)
# finally, write "output" to document-output.pdf
outputStream = file("outputs.pdf", "wb")
output.write(outputStream)
outputStream.close()
答案 0 :(得分:0)
尝试写入StringIO对象而不是磁盘文件。所以,替换这个:
outputStream = file("outputs.pdf", "wb")
output.write(outputStream)
outputStream.close()
用这个:
outputStream = StringIO.StringIO()
output.write(outputStream) #write merged output to the StringIO object
outputStream.close()
如果上面的代码有效,那么您可能会遇到文件写入权限问题。作为参考,请查看PyPDF working example in my article。
答案 1 :(得分:0)
我尝试使用PyPDF2
合并到由reportlab生成的页面时遇到此错误,该页面使用内嵌图像canvas.drawInlineImage(...)
,该图像将图像存储在对象中PDF的流。使用类似技术处理图像的其他PDF可能会以同样的方式受到影响 - 实际上,PDF的内容流中有一个数据对象,PyPDF2
不期望它。
如果你能够,解决方案可以是重新生成源pdf,但不使用内联内容流存储的图像 - 例如在reportlab中使用canvas.drawImage(...)
生成。
这是PyPDF2上的issue about this。