1

PYPDF2 を使用して 2 つの PDF ドキュメントを結合する場合、ページ モードを /UseOutlines に設定して、ドキュメントを開いたときに PDF がブックマーク ペインを表示するようにします。

merger = PdfFileMerger()
merger.append(PdfFileReader(filename,'rb'),import_bookmarks=True)
merger.setPageMode('/UseOutlines')
merger.setPageLayout('/SinglePage')

ただし、PDF ドキュメントを開くたびに、ブックマークは常に展開されます。ドキュメントを開いたときにブックマークを強制的に折りたたむように変更できるプロパティはありますか?

4

3 に答える 3

4

かなり遅れましたが、少し掘り下げた後、@ Eugeneのヒントで解決策を見つけました。

ソースコードを少し調整する必要があります: (バージョン 1.26.0 でテスト済み)

PyPDF2/pdf.py:

メソッドaddBookmark (~ 690 行目)の定義を次のように変更します。

def addBookmark(self, title, pagenum, parent=None, color=None, bold=False, italic=False, fit='/Fit', collapse=False, *args):

(パラメータcollapse=Falseを追加)

次に、同じメソッドの最後で、行 (~ 行 750) を次のように変更します。

parent.addChild(bookmarkRef, self, collapse)

(折りたたみを追加)

PyPDF2/generic.py

ここでaddChildメソッドを調整する必要があります (~ 665 行目):

def addChild(self, child, pdf, collapse=False):

(再びパラメーターcollapse=Falseを追加します)

次に、同じ方法で行 (〜行 677) を交換します。

self[NameObject('/Count')] = NumberObject(self[NameObject('/Count')] + 1)

if collapse: self[NameObject('/Count')] = NumberObject(self[NameObject('/Count')] - 1)
else: self[NameObject('/Count')] = NumberObject(self[NameObject('/Count')] + 1)

それでおしまい!

使用法

パラメータ「collapse=T​​rue」を指定してメソッド「addBookmark()」を呼び出すと、すべてのブックマークが閉じられます。

于 2020-06-23T19:26:00.133 に答える
1

PDF で開いているアウトラインには/Count、アウトライン内の子の数を示すディクショナリのキーが含まれています。アウトラインを閉じた状態で表示するには、このキーを削除するか、に設定する必要があります-1。残念ながら、PyPDF2 でそれを指定する方法はまだありません。

于 2016-03-09T20:29:30.610 に答える