我有一个pdf我想拆分成单独的图片,每个页面都是一张图片,我使用以下imagemajick命令来做到这一点:
convert -density 400 mypdf.pdf out.png它工作得很好,但是我已经测试了我的pdf的前5页,它花了10秒,在这种速度下,它应该需要大约半个小时来分割我的pdf,这对我来说似乎很奇怪,考虑到我并没有真正做任何花哨的事情,我没有旋转图像或修改它们,我想知道有没有更快的方法来做到这一点。谢谢
另外,我想保留质量,我之前在没有密度标志的情况下做了,但质量急剧下降。
发布于 2018-04-25 16:12:25
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以进行渲染,因此您可以保存一些副本。我明白了:
$ time vips copy nipguide.pdf[page=8,dpi=400] x.png
real 0m0.904s最后是PDFium。这是Chrome的PDF渲染库--它是旧的Foxit PDF预览器,相当粗糙地裁剪并做成一个库。它比poppler慢一点,但它有一个非常慷慨的许可证,这意味着你可以在poppler不能工作的情况下使用它。
有一个实验性的libvips分支,它使用PDFium进行PDF渲染。有了这些,我明白了:
$ time vips copy nipguide.pdf[page=8,dpi=400] x.png
real 0m1.152s发布于 2018-10-26 21:07:20
如果您安装了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
#----------------------------------------------------------------------------------还有"Matrix":这个表单将每个方向缩放2倍。因此,生成的PNG比默认的原始版本大4倍,大小为100%。这两个维度都可以独立缩放。旋转或只渲染页面的一部分也是可能的。
更多关于PyMuPDF的内容: PyPI提供了适用于Windows、OSX和所有Linux版本的二进制轮子。因此,安装只需要几秒钟的时间。Python部分的许可证是GNU GPL3,用于MuPDF部分GNU AFFERO GPL3,所以它是开源和免费的。创建商业产品被排除在外,但您可以在相同的许可证下自由分发。
https://stackoverflow.com/questions/50014139
复制相似问题