当前位置: 首页 > 知识库问答 >
问题:

使用Python和PyPDF2合并PDF文件会引发类型错误

关项明
2023-03-14

我使用Python 3.6.5将PDF合并在一起,但遇到了一个问题。下面的代码抛出一个TypeError:'NumberObject'对象是不可下标的错误。我做错了什么?当我用merger.append注释掉一行时,它会正确地打印出文件路径。

import webbrowser
import os
from PyPDF2 import PdfFileMerger, PdfFileReader

path = 'C:/test/pdfs'
merger = PdfFileMerger()
for pdf in os.listdir(path):
      merger.append(PdfFileReader(open(os.path.join(path,pdf), 'rb')))
      print(os.path.join(path,pdf))
merger.write(path+'/merged.pdf')
merger.close()
webbrowser.open_new(path+'/merged.pdf')

文件“C:\test\pdftest.py”,第9行,合并中。在init self中添加(PdfFileReader(open(os.path.join(path,pdf),'rb'))文件“C:\python\lib\site packages\pypdf2-1.26.0-py3.6.egg\pypdf2\pdf.py”,第1084行。读取(流)文件“C:\python\lib\site packages\pypdf2-1.26.0-py3.6.egg\pypdf2\pdf.py”,第1805行,在读取断言xrefstream[“/Type”]==“/XRef”类型错误:“NumberObject”对象不可下标

当我改变合并的时候。附加以获取文件路径,我得到:

文件"C:\test\pdftest.py",第9行,merger.append(os.path.join(路径,pdf))文件"C:\python\lib\site-包\pypdf2-1.26.0-py3.6.egg\PyPDF2\merger.py",第203行,追加self.merge(len(self.pages),fileobj,书签,页面,import_bookmarks)文件"C:\python\lib\site-包\pypdf2-1.26.0-py3.6.egg\PyPDF2\merger.py",第133行,在合并pdfr=PdfFileReader(fileobj,严格=self.strict)File"C:\python\lib\site-包\pypdf2-1.26.0-py3.6.egg\PyPDF2\pdf.py",第1084行,在初始化self.read(stream)File"C:\python\lib\site-包\pypdf2-1.26.0-py3.6.egg\PyPDF2\pdf.py",第1805行,在读取断言xrefstream["/Type"] == "/XRef"TypeError:'NumberObject'对象不可下标

更新:看起来是文件夹中的某个PDF导致了这种情况。该PDF唯一不同的是它使用类型1字体,而其他PDF使用TrueType字体。有人知道解决办法吗?

共有1个答案

郭瀚海
2023-03-14

这似乎是由于无法识别或PDF格式错误造成的。我不是PDF专家,但PyPDF2似乎在抱怨外部参照表中的记录。我发现解决这个问题的最简单方法是重新格式化PDF。

我要做的就是把合并。在中追加(PDFFileReader(file))尝试,如果我在异常中发现'NumberObject'对象不可订阅消息,我将通过子流程在无头模式下使用LibreOffice“转换”PDF:

command = [r'"C:\Program Files\LibreOffice\program\soffice.bin"',
           '--convert-to', 'pdf', '--outdir', f'"{dest_file_path}"', f'"{file_name}"']
pdf_convert = subprocess.Popen(' '.join(command)) 

关于使用LibreOffice和subprocess的注意事项:无论出于何种原因,我发现作为列表传递会导致我在Windows中出现拒绝访问错误,因此我改为使用连接。

 类似资料:
  • 我看了一个视频,学习如何将PDF文件合并成一个PDF文件。我试图修改一点代码,以便处理一个文件夹,其中有PDF文件主文件夹(Spyder)有,这是代码 我有一个名为的子文件夹进入主文件夹,在这个子文件夹中,我把PDF文件和子文件夹内的我创建了一个名为的文件夹。我得到了错误文件没有找到1.pdf虽然当打印的内循环,我得到了PDF名称。 错误的追溯

  • 我试图从java调用python文件。但它会抛出以下错误。 我尝试过的代码是: 可能是什么问题?

  • 问题内容: 我的概念是-网站中有10个pdf文件。用户可以选择一些pdf文件,然后选择合并以创建一个包含所选页面的pdf文件。我该如何用PHP做到这一点? 问题答案: 我以前做过 我有一个用fpdf生成的pdf,我需要在其中添加可变数量的PDF。 因此,我已经设置了fpdf对象和页面),并使用fpdi导入了文件通过扩展PDF类来添加FDPI: 基本上,这会将每个pdf转换为图像以放入您的其他pdf

  • 我正在尝试将两个PDF文件中的页面合并为一个PDF和一个页面。因此,我尝试了下面使用PyPDF2的代码: 它生成一个文件和一个页面,其中包含来自文件1的第1页的内容,但我没有找到来自文件2的第1页的任何数据。似乎它没有被合并。

  • 我有一个大的pdf打印文件,它包含5544页,大约36MB大小。该文件由MS Word 2010创建,仅包含文本和每个信件/文档上的徽标。 我将它拆分为5544个文件,然后根据关键字合并成2770个字母。每个字母约为。140-145kb。 当我将所有的字母合并到一个新的pdf打印文件(仍然包含5544页)时,文件的大小增长到396MB。 所有文本提取、拆分和合并都是通过从PHP调用Apache P

  • 我正在尝试合并我的应用程序中的两个pdf文件。但我的应用程序在创建组合文件引用的时候不断出现故障。(参见代码中的注释)。有人能给我指一下这里的正确方向吗?谢了。