mupdf:更改加密时无法执行增量写入



我正在尝试使用fitz包将目录添加到pdf中。

这是我的脚本

doc = fitz.open(path)
bookmarks = [[1, 'INTRODUCTION', 1], [1, 'MANUSCRIPT COMPONENTS', 1], [1, 'MULTIMEDIA FIGURES – VIDEO AND AUDIO FILES', 2], [1, 'MATHEMATICAL EQUATIONS', 3], [1, 'USING THIS TEMPLATE AND ITS AUTOMATIC FORMATTING', 3]]
doc.setToC(bookmarks) # o/p -> 5
doc.save(doc.name, incremental=True) # to save the document with added bookmarks/table of contents
# above line gives the error

这是堆栈跟踪

>>> doc.save(doc.name, incremental=True)
mupdf: Can't do incremental writes when changing encryption
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:BookmarkPDFpdfenvlibsite-packagesfitzfitz.py", line 4270, in save
return _fitz.Document_save(
RuntimeError: Can't do incremental writes when changing encryption

对于PyMyPDF==1.18.17

PDF加密方法代码不再有效,您必须使用以下方法。请参阅下面的代码。

doc = fitz.open(path)
bookmarks = [[1, 'INTRODUCTION', 1], [1, 'MANUSCRIPT COMPONENTS', 1], [1, 'MULTIMEDIA FIGURES – VIDEO AND AUDIO FILES', 2], [1, 'MATHEMATICAL EQUATIONS', 3], [1, 'USING THIS TEMPLATE AND ITS AUTOMATIC FORMATTING', 3]]
doc.setToC(bookmarks) # o/p -> 5
doc.save(doc.name, incremental=True, encryption=0) 

你必须给encryption0的值,这显然为我解决了问题。

使用较低版本的PYmuPDF解决了此问题。pip-install PyMuPDF==1.14.20

默认情况下,

doc.save()使用encryption=PDF_ENCRYPT_NONE(请参阅此处的文档(。您的文档必须具有某种类型的加密,doc.save正试图删除这种加密(即更改为无加密(。

知道了这一点,错误不言自明:fitz无法增量保存更改加密。

您表示不希望更改问题/代码中的加密,因此可以指定保留它。

为此,您可以使用:

doc.save(doc.name, incremental=True, encryption=PDF_ENCRYPT_KEEP).

或者,您也可以使用doc.saveIncr()作为一个方便的缩写(有关文档,请参阅此处(。

最新更新