尝试将大型.pdf拆分为多个文件。 (python,pdftk)

时间:2012-08-31 19:43:57

标签: python split bookmarks pdftk

我在Python中编写了一个脚本,它将按章/书签分割.pdf。这基本上是我的计划的关键:

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

该工具包很可爱,但一遍又一遍地调用它显然不是一个节省时间的任务。解析200mb .pdf文件需要15-20秒,并且在大约30个单独章节的范围内执行此操作需要很长时间。打开文件花费的时间比实际写入任何数据要多。

由于似乎没有一种固有的方法来在工具箱中串起多个命令,是否有任何内存技巧我可以用Python或CMD来解决这个问题(即保持.pdf打开) ?我也会看另一个模块,如果你可以推荐一个(pyPdf有其自身的问题)。

2 个答案:

答案 0 :(得分:2)

要将pdf文件保存在内存中,请将其读入StringIO缓冲区并告诉pdftk从stdin读取。具体来说:使用subprocess.call代替os.system,将StringIO缓冲区作为stdin参数:

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

每次仍然需要重新解析pdf文件,但至少你不会比你必须更多地旋转你的硬盘。唯一真正快速的方法是使用可以一次完成它的工具(例如,解决你对pypdf的任何问题)。

答案 1 :(得分:0)

如果您有一个包含20000页的input.pdf文件,并且您希望将其拆分为1..20.pdf文件,每个文件包含1000页。

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;