我正在写一个小脚本,需要合并许多单页pdf文件。我希望脚本运行与Python3和有尽可能少的依赖性。
对于PDF合并部分,我尝试使用PyPdf,但是Python 3的支持似乎有缺陷;它不能处理inkscape生成的PDF文件(这是我需要的)。我安装了当前的git版本的PyPdf,但下面的测试脚本不起作用:
import PyPDF2
output_pdf = PyPDF2.PdfFileWriter()
with open("testI.pdf", "rb") as input:
input_pdf = PyPDF2.PdfFileReader(input)
output_pdf.addPage(input_pdf.getPage(0))
with open("test.pdf", "wb") as output:
output_pdf.write(output)
它抛出以下堆栈跟踪:
Traceback (most recent call last):
File "test.py", line 7, in <module>
output.addPage(input.getPage(0))
File "/usr/lib/python3.3/site-packages/pyPdf/pdf.py", line 420, in getPage
self._flatten()
File "/usr/lib/python3.3/site-packages/pyPdf/pdf.py", line 574, in _flatten
self._flatten(page.getObject(), inherit)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 165, in getObject
return self.pdf.getObject(self).getObject()
File "/usr/lib/python3.3/site-packages/pyPdf/pdf.py", line 616, in getObject
retval = readObject(self.stream, self)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 66, in readObject
return DictionaryObject.readFromStream(stream, pdf)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 526, in readFromStream
value = readObject(stream, pdf)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 57, in readObject
return ArrayObject.readFromStream(stream, pdf)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 152, in readFromStream
obj = readObject(stream, pdf)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 86, in readObject
return NumberObject.readFromStream(stream)
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 231, in readFromStream
return FloatObject(name.decode("ascii"))
File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 207, in __new__
return decimal.Decimal.__new__(cls, str(value), context)
TypeError: optional argument must be a context
然而,同样的脚本在Python 2.7中可以完美地工作。
我在这里做错了什么?是库中的bug吗?我可以在不接触PyPDF库的情况下解决它吗?
2条答案
按热度按时间kmbjn2e31#
所以我找到了答案。Python3.3中的
decimal.Decimal
模块显示了一些奇怪的行为。这是对应的StackOverflow问题:Instantiate Decimal class我向PyPDF2库添加了一些变通方法,并提交了一个拉取请求。tkqqtvp12#
只是为了确保您了解已经存在的工具可以完成此任务:
第一个月