我用Python编写了一个脚本,它将一个.pdf按章节/书签拆分。这里本质上是我的程序的关键:
for each chapter:
system('pdftk A=file.pdf cat A{start}-{end} output file2.pdf')这个工具包很好用,但是一次又一次地调用它显然不是一项节省时间的任务。解析一个200 20的.pdf文件需要花费15到20秒的时间,并且在大约30章的时间内这样做需要花费很长的时间。打开文件比实际写入任何数据花费的时间更多。
由于在工具箱中似乎没有一种固有的方法来字符串多个命令,所以我是否可以在Python或CMD中使用任何内存欺骗来让我绕过这个问题(即保持.pdf打开)?如果您能推荐一个模块的话,我也将查看另一个模块(不过,pyPdf也有自己的一系列问题)。
发布于 2012-09-01 21:04:08
要将pdf文件保存在内存中,请将其读入StringIO缓冲区,并告诉pdftk从stdin读取。具体而言:使用subprocess.call而不是os.system,以StringIO缓冲区作为stdin参数:
mybuffer = StringIO.StringIO(open('file.pdf').read())
subprocess.call('pdftk ...', stdin=mybuffer)它仍然需要每次重新解析pdf文件,但至少你不会比你更多地旋转你的硬盘驱动器。唯一真正快速的方法是使用一个工具,它可以一次完成(例如,解决您使用pypdf时遇到的任何问题)。
发布于 2013-10-07 22:03:17
例如,如果您有一个有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;https://stackoverflow.com/questions/12221619
复制相似问题