複数の PDF ファイルのマージを自動化しようとしていますが、2 つの要件があります。a) 既存のブックマークと b) ページラベル (カスタム ページ番号) を保持する必要があります。
PyPDF2 と pdftk ではデフォルトでマージ時にブックマークが保持されますが、pdfrw では保持されません。ページラベルは、PyPDF2、pdftk、または pdfrw では一貫して保持されません。
いろいろ検索した結果、やりたいことを実行するための直接的なアプローチはないと思います。私が間違っている場合は、誰かがこの簡単な解決策を指摘してくれることを願っています。しかし、簡単な解決策がない場合は、これを Python で実行する方法についてのヒントをいただければ幸いです。
いくつかのコード例:
1) PyPDF2 の場合
from PyPDF2 import PdfFileWriter, PdfFileMerger, PdfFileReader
tmp1 = PdfFileReader('file1.pdf', 'rb')
tmp2 = PdfFileReader('file2.pdf', 'rb')
#extracting pagelabels is easy
pl1 = tmp1.trailer['/Root']['/PageLabels']
pl2 = tmp2.trailer['/Root']['/PageLabels']
#but PdfFileWriter or PdfFileMerger does not support writing from what I understand
だから私はここから先に進む方法がわからない
2)pdfrwを使用(より有望)
from pdfrw import PdfReader, PdfWriter
writer = PdfWriter()
#read 1st file
tmp1 = PdfReader('file1')
#add the pages
writer.addpages(tmp1.pages)
#copy bookmarks to writer
writer.trailer.Root.Outlines = tmp1.Root.Outlines
#copy pagelabels to writer
writer.trailer.Root.PageLabels = tmp1.Root.PageLabels
#read second file
tmp2 = PdfReader('file2')
#append pages
writer.addpages(tmp2.pages)
# so far so good
2 番目のファイルのブックマークのページ番号は、それらを追加する前にオフセットする必要がありますが、アウトラインを読むとき、ほとんどの場合、ページ番号の代わりに (IndirectObject, XXX) を取得します。pdfrw を使用して各ラベルとブックマークのページ番号を取得する方法が不明です。だから、私は再び立ち往生しています
Z P