1

我用 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有它自己的一系列问题)。

4

2 回答 2

2

要将 pdf 文件保存在内存中,请将其读入StringIO缓冲区并告诉 pdftk 从标准输入读取。具体来说:使用subprocess.call而不是os.system, 以您的StringIO缓冲区作为stdin参数:

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

它仍然需要每次重新解析 pdf 文件,但至少您不会过度旋转硬盘驱动器。唯一真正快速的方法是使用可以一次性完成的工具(例如,解决您在使用 pypdf 时遇到的任何问题)。

于 2012-09-01T21:04:08.323 回答
0

例如,如果您有一个input.pdf包含 20000 页的文件,并且您想将其拆分为 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;
于 2013-10-07T22:03:17.713 回答