我一直在创建一个使用PyPdf2合并多个pdf文件的Python程序.
这是代码
import os
from PyPDF2 import PdfFileMerger
source_dir = os.getcwd()
merger = PdfFileMerger()
for item in os.listdir(source_dir):
if item.endswith('pdf'):
merger.append(item)
merger.write('completed_file.pdf')
merger.close()在运行代码时遇到以下错误:-
Traceback (most recent call last):
File "F:\Python folder\Pdf_Merger\main.py", line 10, in <module>
merger.append(item)
File "F:\Python folder\Pdf_Merger\venv\lib\site-packages\PyPDF2\merger.py", line 203, in append
self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks)
File "F:\Python folder\Pdf_Merger\venv\lib\site-packages\PyPDF2\merger.py", line 151, in merge
outline = pdfr.getOutlines()
File "F:\Python folder\Pdf_Merger\venv\lib\site-packages\PyPDF2\pdf.py", line 1362, in getOutlines
outline = self._buildOutline(node)
File "F:\Python folder\Pdf_Merger\venv\lib\site-packages\PyPDF2\pdf.py", line 1444, in _buildOutline
outline = self._buildDestination(title, dest)
File "F:\Python folder\Pdf_Merger\venv\lib\site-packages\PyPDF2\pdf.py", line 1425, in _buildDestination
return Destination(title, page, typ, *array)
File "F:\Python folder\Pdf_Merger\venv\lib\site-packages\PyPDF2\generic.py", line 1065, in __init__
raise utils.PdfReadError("Unknown Destination Type: %r" % typ)
PyPDF2.utils.PdfReadError: Unknown Destination Type: 0
Process finished with exit code 1备注- i确保所有pdf文件都不受密码保护.
发布于 2020-11-18 15:49:19
2022年7月更新
原始答案
这似乎是由您试图组合的一个PDF大纲中糟糕的目标语法造成的。
如果您不关心大纲,您应该能够通过将import_bookmarks kwarg更新为False in PdfFileMerger.append来解决这个问题,如下所示:
import os
from PyPDF2 import PdfFileMerger
source_dir = os.getcwd()
merger = PdfFileMerger()
for item in os.listdir(source_dir):
if item.endswith('pdf'):
merger.append(item, import_bookmarks=False)
merger.write('completed_file.pdf')
merger.close()更详细
PdfFileMerger.append调用PdfFileMerger.merge并将import_bookmarks kwarg传递给它。默认情况下,此设置为True。
在PyPDF2.generic中,Destination类会在初始化期间引发此错误。这次合并试图通过从原始大纲中读取目的地,将目的地纳入新的大纲。
def __init__(self, title, page, typ, *args):
DictionaryObject.__init__(self)
self[NameObject("/Title")] = title
self[NameObject("/Page")] = page
self[NameObject("/Type")] = typ
# from table 8.2 of the PDF 1.7 reference.
if typ == "/XYZ":
(self[NameObject("/Left")], self[NameObject("/Top")],
self[NameObject("/Zoom")]) = args
elif typ == "/FitR":
(self[NameObject("/Left")], self[NameObject("/Bottom")],
self[NameObject("/Right")], self[NameObject("/Top")]) = args
elif typ in ["/FitH", "/FitBH"]:
self[NameObject("/Top")], = args
elif typ in ["/FitV", "/FitBV"]:
self[NameObject("/Left")], = args
elif typ in ["/Fit", "/FitB"]:
pass
else:
raise utils.PdfReadError("Unknown Destination Type: %r" % typ)根据PDF参考1.7,由于目标类型"0“不是有效类型,因此会引发错误。
https://stackoverflow.com/questions/64868465
复制相似问题