使用PyPDF2读取PDF文件时出现对象ID错误

时间:2019-12-02 14:06:20

标签: python pdf pypdf2

我试图合并两个PDF文件。但是在装载第一个时已经出现了错误。

我使用以下代码:


    from PyPDF2 import PdfFileWriter, PdfFileReader
    pdf_writer = PdfFileWriter()

    for file in files:
        pdf_reader = PdfFileReader(file)
       for page in range(pdf_reader.getNumPages()):

   ....

没什么特别的。但是在第5行中,我已经收到以下错误:

>---------------------------------------------------------------------------
>PdfReadError                              Traceback (most recent call last)
<ipython-input-11-dfb68038ddd0> in <module>
      4 for file in files:
      5     pdf_reader = PdfFileReader(file)
----> 6     for page in range(pdf_reader.getNumPages()):
      7         pdf_writer.addPage(pdf_reader.getPage(page))
      8 

>C:\Miniconda3\envs\wc_test\lib\site-packages\PyPDF2\pdf.py in getNumPages(self)
   1153         else:
   1154             if self.flattenedPages == None:
-> 1155                 self._flatten()
   1156             return len(self.flattenedPages)
   1157 

>C:\Miniconda3\envs\wc_test\lib\site-packages\PyPDF2\pdf.py in _flatten(self, pages, inherit, indirectRef)
   1503         if pages == None:
   1504             self.flattenedPages = []
-> 1505             catalog = self.trailer["/Root"].getObject()
   1506             pages = catalog["/Pages"].getObject()
   1507 

>C:\Miniconda3\envs\wc_test\lib\site-packages\PyPDF2\generic.py in __getitem__(self, key)
    514 
    515     def __getitem__(self, key):
--> 516         return dict.__getitem__(self, key).getObject()
    517 
    518     ##

>C:\Miniconda3\envs\wc_test\lib\site-packages\PyPDF2\generic.py in getObject(self)
    176 
    177     def getObject(self):
--> 178         return self.pdf.getObject(self).getObject()
    179 
    180     def __repr__(self):

>C:\Miniconda3\envs\wc_test\lib\site-packages\PyPDF2\pdf.py in getObject(self, indirectReference)
   1607                 # some other problem
   1608                 raise utils.PdfReadError("Expected object ID (%d %d) does not match actual (%d %d)." \
-> 1609                                          % (indirectReference.idnum, indirectReference.generation, idnum, generation))
   1610             assert generation == indirectReference.generation
   1611             retval = readObject(self.stream, self)

>PdfReadError: Expected object ID (1 0) does not match actual (3 1).

我不知道此pdf文件出了什么问题,它可以在其他相同的PDF上使用。 搜索答案并不能使我理解这里出了什么问题,实际上我仍然一无所知。但是,使用Adobe Reader Pro合并PDF可以正常工作...没有错误,但是我需要自动合并许多文件。欢迎任何帮助。

已解决

我使用文本编辑器打开了有问题的PDF,并与工作中的PDF进行了比较。前两行是引起此错误的新行(\ n)。我只是删除了它们并保存了pdf-> working。但是,此问题归因于我在Wordpress中使用的插件的更新。

1 个答案:

答案 0 :(得分:1)

没有看到有问题的PDF,很难对可能出问题的地方发表评论。

通常,PDF库的后台会进行更多的错误检查,而PDF库是为Adobe Acrobat提供支持的工具包,因此文档可能会遇到错误消息所建议的问题并在内部进行处理。这些文档也可能没有什么问题,仅仅是python库中的一个错误,您应该向作者提交错误报告。

我公司有一个免费的工具,可以帮助您查找名为PDF Checker的PDF文档。