首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中使用PyPdf2 PdfFileMerger时发生错误

在Python中使用PyPdf2 PdfFileMerger时发生错误
EN

Stack Overflow用户
提问于 2020-11-17 02:25:53
回答 1查看 1.3K关注 0票数 2

我一直在创建一个使用PyPdf2合并多个pdf文件的Python程序.

这是代码

代码语言:javascript
复制
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()

在运行代码时遇到以下错误:-

代码语言:javascript
复制
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文件都不受密码保护.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 15:49:19

2022年7月更新

这是固定的,并将在下一个版本的PyPDF2!

原始答案

这似乎是由您试图组合的一个PDF大纲中糟糕的目标语法造成的。

如果您不关心大纲,您应该能够通过将import_bookmarks kwarg更新为False in PdfFileMerger.append来解决这个问题,如下所示:

代码语言:javascript
复制
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类会在初始化期间引发此错误。这次合并试图通过从原始大纲中读取目的地,将目的地纳入新的大纲。

代码语言:javascript
复制
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“不是有效类型,因此会引发错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64868465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档