PYPDF水印返回错误

时间:2013-11-26 16:01:34

标签: python-2.7 pypdf

嗨我试图使用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()

2 个答案:

答案 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