1

我正在尝试使用 package.json 将目录添加到 pdf 中fitz

这是我的脚本

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:\BookmarkPDF\pdfenv\lib\site-packages\fitz\fitz.py", line 4270, in save
    return _fitz.Document_save(
RuntimeError: Can't do incremental writes when changing encryption
4

3 回答 3

1

使用较低版本的 PYmuPDF 解决了它。pip install PyMuPDF==1.14.20

于 2021-03-25T08:20:06.153 回答
1

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

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

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

为此,您可以使用:

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

或者,您也可以将doc.saveIncr()其用作方便的缩写(有关文档,请参见此处)

于 2021-09-10T14:24:48.830 回答
0

为了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) 

您必须给出明显为我解决问题encryption的值。0

于 2022-01-13T06:38:50.703 回答