一連の PDF を 1 つの PDF に結合し、外部メタデータを使用して適切に目次を作成する pyPdf アプリケーションがあります。一部のPDFでは非常にうまく機能しますが、他のPDFではハングしているように見え、実際にPDFを書き込むことはありません。書き込み操作をテスト ライブラリにコピーして、ハングしている場所を確認しました。メソッド '_sweepIndirectReferences' でハングしているようです (ここでは 311 行目)。実行を設定し、15 ~ 20 分後に戻ってブレークポイントを設定し、最初のページの間接参照をまだ解決していることを確認します。スタックの深さは 25 ~ 30 です。Acrobat を使用してファイルを結合すると、200 以上のページすべてが 1 分以内に完了します。
書き込み操作をそれほど高速にする必要はありませんが、プロセスを高速化するためにできることはありますか? Adobe なら 1 分以内にできることのように思えますが、私は 4 時間以内にできるはずです! 一部のファイルでのみ発生し、他のファイルでは発生しないことに注意してください。私の推測では、PDF が間接参照にどれだけ依存しているかによって、違いが生じると思います。
参考までに、次のようなpdfを生成しています。
opened_pdfs = []
o_pdf = PdfFileWriter()
for fname in list_of_pdfs:
i_pdf = PdfFileReader(file(fname, 'rb'))
opened_pdfs.append(i_pdf)
for page in i_pdf.pages:
o_pdf.addPage(page)
of = open(file_name, 'wb')
o_pdf.write(of)
of.close()
for pdf in opened_pdfs:
pdfs.stream.close()
これはブックマークに関する部分を無視していますが、おそらく問題ないと思います。問題のあるものには、ブックマークも何もありません。