imagemagick将大型pdf拆分为png' s

时间:2018-04-25 04:34:51

标签: imagemagick

我有一个pdf我想分成单独的图片,每个页面都是一张图片,我使用以下imagemajick命令来执行此操作:

product

并且它工作正常但我已经在我的pdf的前5页测试了它花了10秒,按照这个速度分割我的pdf需要大约半个小时,考虑到我&#这对我来说似乎很奇怪39;我并没有真正做任何花哨的事情,我不会旋转图像或修改它们,我想知道是否有更快的方法来做到这一点。感谢

另外,我想保持质量,我之前没有密度标志,但质量大幅下降。

2 个答案:

答案 0 :(得分:2)

PDF渲染有点混乱。

最好的系统可能是GhostScript,而MuPDF是它的库形式。它速度极快,适用于大型文档。不幸的是,库许可(AFL)很难,你不能真正直接链接到二进制文件。

ImageMagick通过对ghostscript命令行工具进行外壳来解决这个限制,但当然这意味着渲染PDF的页面现在是一个多阶段的过程:将PDF复制到/ tmp,执行ghostscript使用一组命令行标志将文档渲染到/ tmp中的图像文件,再次读回此临时图像文件,提取页面,最后将图像写入输出PNG。

在我的笔记本电脑上,我看到了:

$ time convert -density 400 nipguide.pdf[8] x.png
real    0m2.598s

另一种流行的PDF渲染器是poppler。这来自xpdf文档预览器项目,所以它很快,但只是非常高兴渲染到RGB。它也可以在大型文档上挣扎,而且它是GPL,所以如果不成为GPL,你就无法链接到它。

libvips直接链接到poppler-glib以进行PDF渲染,因此您可以保存一些副本。我明白了:

$ time vips copy nipguide.pdf[page=8,dpi=400] x.png
real    0m0.904s

最后,有PDFium。这是来自Chrome的PDF渲染库 - 它是旧的Foxit PDF预览器,相当粗略地剪切并制作成库。它比poppler慢一点,但它有一个非常慷慨的许可证,这意味着你可以在poppler无法工作的情况下使用它。

有一个实验性的libvips分支,它使用PDF来进行PDF渲染。有了这个,我明白了:

$ time vips copy nipguide.pdf[page=8,dpi=400] x.png
real    0m1.152s

答案 1 :(得分:0)

如果已安装Python,则应尝试PyMuPDF。它是MuPDF的Python绑定,非常易于使用且非常快(比xpdf快3倍)。 呈现PDF页面对于此程序包来说实在是头等大事。使用这样的脚本:

#----------------------------------------------------------------------------------
import fitz
fname = sys.argv[1]        # get filename from command line
doc = fitz.open(fname)     # open the file
mat = fitz.Matrix(2,2)     # controls resolution: scale factor in x and y direction
for page in doc:
    pix = page.getPixmap(matrix=mat, alpha=False)
    pix.writePNG("p-%i.png" % page.number) # write the page's image
#----------------------------------------------------------------------------------

“矩阵”的更多内容: 此表单将每个方向缩放2倍。因此,生成的PNG变为原始版本100%大小的默认版本的约4倍。两个尺寸都可以独立缩放。旋转或仅渲染页面的一部分也是可能的。

更多关于PyMuPDF: 可作为Windows,OSX和PyPI所有Linux版本的二进制轮使用。因此,安装仅需几秒钟的时间。 Python部件的许可证是GNU GPL 3,MuPDF部件的许可证是GNU AFFERO GPL3。因此它是开源和免费的。不包括创建商业产品,但是您可以在相同的许可下自由分发。