我正在使用ImageMagick将几十万个PDF文件转换为PNG文件。 ImageMagick大约需要十秒钟才能完成。现在,大多数这些PDF文件都是自动生成的评分证书,所以它基本上只是一堆PDF文件,表格中填入了不同的数字。每个PDF上还有一些简单的光栅图像>我的意思是,一种选择就是将计算能力投入其中,但这意味着金钱以及确保它们在返回时最终都在正确的位置。另一个选择是在我们当前的计算机上等待它。但我在这里进行了计算,我们甚至无法及时获得我们获得的证书。
现在,我希望追求的选项是以某种方式利用大多数这些文件非常相似的事实,所以如果我们有某种预先计算的模板可供使用,我们可以跳过这个过程每次转换完成后计算整个PDF文件。我会快速检查PDF是否适合任何模板,如果有,则运行优化转换,如果没有,则执行完全转换。
当然,我对PDF文件格式的理解充其量是中间的,我甚至不知道这个想法是否切合实际。是否需要制作ImageMagick的自定义版本?可能有助于ImageMagick源代码?或者是否有一些解决方案已经完全符合我的需要? (我们都花了几个星期的时间来完成一个项目,然后让我想到这一点,我想)
答案 0 :(得分:2)
好的,我看过这个。我拿走了你的PDF
并将其转换为JPEG
,直到你告诉我你喜欢的实际参数。
convert -density 288 image.pdf image.jpg
并且需要8秒才能生成一个1644x3168像素的JPEG,大小为1.6MB - 足以打印页面尺寸。
然后我复制了你的文件99次,所以我有100个PDF,并按顺序处理它们:
#!/bin/bash
for p in *.pdf; do
echo $new
new="${p%%pdf}jpg"
convert -density 288 $p $new
done
这需要14分32秒,或平均8.7秒。
然后我尝试使用GNU Parallel完成相同的100个PDF文件,如下所示:
time parallel -j 8 convert -density 288 {} {.}.jpg ::: *.pdf
保持我CPU的所有8个内核非常繁忙。但它在3分钟12内处理相同的100个PDF,因此平均每个1.92秒,或4.5倍加速。对于一个非常简单的命令行,我说非常值得。
根据convert
的首选参数,可能会有进一步的增强功能......
答案 1 :(得分:0)
我的案例中的解决方案最终是从命令行使用MuPDF(感谢@Vadim),这比GhostScript(Imagemagick使用的库)快十倍。 MuPDF失败了大约1%的PDF文件,但由于格式不正确,GhostScript能够很好地处理,所以我只写了一个异常处理程序,在这些情况下只使用Imagemagick。即便如此,在8核服务器上花费大约24小时来处理所有PDF文件。