1

章/ブックマークごとに .pdf を分割するスクリプトを Python で作成しました。これが基本的に私のプログラムの核心です:

for each chapter:
    system('pdftk A=file.pdf cat A{start}-{end} output file2.pdf')

ツールキットはうまく機能しますが、何度も呼び出すのは明らかに時間効率の良い作業ではありません。200MB の .pdf ファイルの解析には 15 秒から 20 秒かかり、30 の個別の章にまたがると長い時間がかかります。実際にデータを書き込むよりも、ファイルを開くのに多くの時間が費やされます。

ツールキット内で複数のコマンドを文字列化する固有の方法がないように思われるため、これを回避できるようにする (つまり、.pdf を開いたままにする) Python または CMD でプルできるメモリのトリックはありますか? 別のモジュールも検討します (ただし、 pyPdfには独自の多くの問題があります)。

4

2 に答える 2

2

pdf ファイルをメモリに保持するには、それをStringIOバッファに読み込み、pdftk に stdin から読み込むように指示します。具体的には:subprocess.callの代わりにos.systemStringIOバッファをstdin引数として使用します。

mybuffer = StringIO.StringIO(open('file.pdf').read())
subprocess.call('pdftk ...', stdin=mybuffer)

毎回 pdf ファイルを新たに解析する必要がありますが、少なくともハード ドライブを必要以上に回転させることはありません。唯一の本当に速い方法は、1 回のパスでそれを実行できるツールを使用することです (たとえば、pypdf で発生する問題を解決します)。

于 2012-09-01T21:04:08.323 に答える
0

たとえば、input.pdf20000 ページのファイルがあり、各ファイルが 1000 ページの 1..20.pdf ファイルに分割したい場合。

for (( i=0; i<=20; i++ )); do let n=$i*1000; let m=$[i+1]*1000; pdftk input.pdf cat $n-$m output $i.pdf; done;
于 2013-10-07T22:03:17.713 に答える