外部参照表不是零索引的。将更正对象的ID号。不会继续

时间:2018-04-20 10:02:51

标签: python-3.x pypdf2

我正在尝试打开pdf来获取页数。我正在使用PyPDF2。

这是我的代码:

def pdfPageReader(fileName):
    try:
        pdf_file = open(fileName, 'rb')
        read_pdf = PyPDF2.PdfFileReader(pdf_file, strict=True)
        number_of_pages = read_pdf.getNumPages()
        print(str(fileName) + " = " + str(number_of_pages))
        pdf_file.close()
        return number_of_pages
    except:
        return "1"

但后来我遇到了这个错误:

  

PdfReadWarning:Xref表未归零。将更正对象的ID号。 [pdf.py:1736]

我尝试使用strict = True和strict = False,当它为True时,显示此消息,没有,我等了30分钟,但什么都没发生。当它为False时,它只显示任何内容,如果我在终端上按 ctrl + c ,那就不显示任何内容(cmd,windows 10) )然后它取消打开并继续(我在一批pdf文件中运行它)。批次中只有1个遇到了这个问题。

我的问题是,如何解决此问题,或如何跳过此问题,或者如何取消此操作并继续使用其他pdf文件?

4 个答案:

答案 0 :(得分:10)

如果有人遇到类似的问题,甚至通过此错误消息使程序崩溃

getObject中的文件“ C:\ Programy \ Anaconda3 \ lib \ site-packages \ PyPDF2 \ pdf.py”,行1604 %(indirectReference.idnum,indirectReference.generation,idnum,generation)) PyPDF2.utils.PdfReadError:预期的对象ID(14 0)与实际的(13 0)不匹配;外部参照表未为零索引。

这有助于我为pdf阅读器添加等于False的严格参数

pdf_reader = PdfFileReader(input_file,strict=False)

答案 1 :(得分:1)

我遇到了同样的问题,并寻找一种跳过它的方法。我不是程序员,但是查看关于警告的documentation时,有一段代码可以帮助您避免此类障碍。

尽管我不建议将此作为解决方案,但我用于我的目的的代码是(只是从链接上的文档复制并粘贴)

import sys

if not sys.warnoptions:
    import warnings
    warnings.simplefilter("ignore")

答案 2 :(得分:0)

对于其他可能遇到此问题的人,发现strict=False并没有帮助,我可以通过在Adobe中重新保存文件的新副本来解决此问题。 Acrobat Reader 。我只是在Adobe Acrobat Reader的实际副本(Windows上为普通的免费版本)中打开了PDF文件,做了一个“另存为...”,并给该文件起了新的名字。然后,我使用新保存的PDF文件副本再次运行脚本。

很明显,我使用的PDF文件是直接从扫描仪生成的,尽管我可以在Reader中打开并查看它,但它还是以某种方式损坏了。通过以某种方式重新保存在Acrobat Reader中来复制文件的副本,似乎可以纠正丢失的任何内容。

答案 3 :(得分:0)

当文件是在生成 PDF 的打印机/扫描仪组合中创建时,我会发生这种情况。我可以在只有警告的情况下阅读 PDF,所以我阅读了它,然后将其重写为一个新文件。我可以追加那个新的。

pdf_merger = PdfFileMerger()
pdfreadRewrite = PdfFileReader('scanner_generated.pdf',  strict = False)
pdfwrite = PdfFileWriter()
for page_count in range(pdfreadRewrite.numPages):
    pages = pdfreadRewrite.getPage(page_count)
    pdfwrite.addPage(pages)

fileobjfix = open('fixedPDF.pdf', 'wb')
pdfwrite.write(fileobjfix)
fileobjfix.close()

pdf_merger.append('fixedPDF.pdf')