【问题标题】:Split PDF files in python - ValueError: invalid literal for int() with base 10: '' "在 python 中拆分 PDF 文件 - ValueError: int() 以 10 为基数的无效文字:''"
【发布时间】:2011-06-18 04:11:37
【问题描述】:

我正在尝试使用 pyPdf 将一个巨大的 pdf 文件拆分为几个小的 pdf。我正在尝试使用这个过于简化的代码:

from pyPdf import PdfFileWriter, PdfFileReader 
inputpdf = PdfFileReader(file("document.pdf", "rb"))

for i in xrange(inputpdf.numPages):
  output = PdfFileWriter()
  output.addPage(inputpdf.getPage(i))
  outputStream = file("document-page%s.pdf" % i, "wb")
  output.write(outputStream)
  outputStream.close()

但我收到以下错误消息:

Traceback (most recent call last):
File "./hltShortSummary.py", line 24, in <module>
  for i in xrange(inputpdf.numPages):
File "/usr/lib/pymodules/python2.7/pyPdf/pdf.py", line 342, in <lambda>
  numPages = property(lambda self: self.getNumPages(), None, None)
File "/usr/lib/pymodules/python2.7/pyPdf/pdf.py", line 334, in getNumPages
  self._flatten()
File "/usr/lib/pymodules/python2.7/pyPdf/pdf.py", line 500, in _flatten
  pages = catalog["/Pages"].getObject()
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 466, in __getitem__
  return dict.__getitem__(self, key).getObject()
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 165, in getObject
  return self.pdf.getObject(self).getObject()
File "/usr/lib/pymodules/python2.7/pyPdf/pdf.py", line 549, in getObject
  retval = readObject(self.stream, self)
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 67, in readObject
  return DictionaryObject.readFromStream(stream, pdf)
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 517, in readFromStream
  value = readObject(stream, pdf)
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 58, in readObject
  return ArrayObject.readFromStream(stream, pdf)
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 153, in readFromStream
  arr.append(readObject(stream, pdf))
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 87, in readObject
  return NumberObject.readFromStream(stream)
File "/usr/lib/pymodules/python2.7/pyPdf/generic.py", line 232, in readFromStream
  return NumberObject(name)
ValueError: invalid literal for int() with base 10: ''

有什么想法吗???

【问题讨论】:

  • print inputpdf.numPages 给你什么?
  • 这是旧的,但万一其他人遇到同样的问题......我发现了一个 pyPDF2 难以解析的 PDF,导致类似的堆栈跟踪。在此处提交的错误:github.com/mstamy2/PyPDF2/issues/521 您可能想尝试通过转换运行 PDF,例如在您最喜欢的查看器中“另存为 PDF”。对我来说,“清理”了 PDF 以便对其进行解析。

标签: python pdf pypdf


【解决方案1】:

我认为这是 pypdf 中的一个错误。查看来源hereNumberObject.readFromStream 需要一个类似整数的字符串,但没有得到。可能有问题的 pdf 格式不正确。

【讨论】:

  • 您好 senderle 非常感谢您的帮助。如果pdf格式不正确,有办法知道吗?
  • 尝试硬编码页数。看看这是否改变了什么。
  • for i in range(2)看看它是否适用于2页。
  • @Alejandro,除了在各种程序中打开它并查看错误消息之外,我不确定如何判断 pdf 是否格式错误。可能有办法以有用的方式处理二进制数据,但这超出了我的 pdf 知识范围。
【解决方案2】:

试试这个方法

for i in xrange(inputpdf.getNumPages()):

【讨论】:

  • 基于回溯,我看不出这有什么不同——numPages 只是一个调用getNumPages 的属性。
  • 不,我得到了同样的错误:(。会不会是pdf文件损坏了?
  • 您确定要指定正确的文件路径吗?使用 pdb.set_trace() 停止 thr 脚本并从解释器中检查对象
  • 是的,在添加 pdb.set_trace() 之后,看起来文件在正确的路径中。 :(
  • 我遇到了格式错误的 pdf 文件的问题,该文件无法使用 Python 模块 pdfrw 打开。我设法通过程序 pdftk 简单地修复了 pdf。 pdftk broken_pdf.pdf output fixed_pdf.pdf。也许试试看。
猜你喜欢
  • 1970-01-01
  • 2017-12-06
  • 2013-08-04
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多