将PDF转换为JPG - 两页差价?

时间:2012-10-05 15:10:39

标签: imagemagick

我编写了一个脚本,使用ImageMagick将PDF转换为每页的JPG,以及调整大小/等。

稍微有点棘手的是,有些PDF将中间的两页页面扩展为“一页” - 所以它更宽。有没有办法“检测”这个并裁剪左右两侧,作为两个单独的页面?

1 个答案:

答案 0 :(得分:4)

假设您想要使用ImageMagick(以及 ImageMagick):无法完成此操作。 ImageMagick无法自行处理PDF输入。它无论如何都必须使用Ghostscript,因此如果没有本地Ghostscript安装它将无法工作。 (当您将PDF输入提供给ImageMagick时,您不一定看到 Ghostscript,除非您在其命令行中添加-verbose,因为ImageMagick将该作业委托给Ghostscript发生在您的背后...)

您的问题分为两部分:

  • “有没有办法”检测“额外的宽页面,比如中心点差?”
  • “有没有办法将中间点差的左右部分裁剪为两个单独的页面?”

检测页面大小

您可以使用ImageMagick的identify来检测PDF的页面大小。

只需运行最简单的命令:

识别multipage.pdf

输出结果为s.th.喜欢

multipage.pdf[0] PDF 595x792 595x792+0+0 16-bit Bilevel DirectClass 59.5KB 0.000u 0:00.000
multipage.pdf[1] PDF 595x792 595x792+0+0 16-bit Bilevel DirectClass 59.5KB 0.000u 0:00.000
multipage.pdf[2] PDF 595x792 595x792+0+0 16-bit Bilevel DirectClass 59.5KB 0.000u 0:00.000
multipage.pdf[3] PDF 595x792 595x792+0+0 16-bit Bilevel DirectClass 59.5KB 0.000u 0:00.000

输出的页数是从0开始的。因此[0]表示第一页,[1]表示第二页等。

为了更好地自定义输出,您可以这样做:

identify -format '%f, page %s + 1: %W x %H\n' multipage.pdf

并获取

multipage.pdf, page  0 + 1: 595 x 792
multipage.pdf, page  1 + 1: 595 x 792
multipage.pdf, page  2 + 1: 595 x 792
multipage.pdf, page  3 + 1: 595 x 792

对于双展开页面,相应的输出应为1190 x 792或类似。

但是,请注意:使用ImageMagick来查询PDF文件的页面大小是很慢的。因此,最好为此子任务使用不同的工具:pdfinfo。这将快几个数量级:

pdfinfo -f 1 -l 1000 -box multipage.pdf

将输出

Pages:          4
Page    1 size: 595 x 792 pts
Page    1 rot:  0
Page    2 size: 595 x 792 pts
Page    2 rot:  0
Page    3 size: 595 x 792 pts
Page    3 rot:  0
Page    4 size: 595 x 792 pts
Page    4 rot:  0

如果您需要有关ArtBox,TrimBox,BleedBox和CropBox值的其他信息,只需将-box添加到命令行。

正如我所说:pdfinfo在确定PDF的页面大小方面明显快于ImageMagick。 使用合适的工具。

裁剪页面的左右部分

现在您已经识别出大的双展开页面,您可以使用以下方法之一(基于Ghostscript)来拆分中间的页面:

调整上述链接中描述的方法将导致2个PDF页面仍然包含其所有原始矢量和字体信息。

或者,您可以使用ImageMagick。假设您的“双倍展开”页面尺寸为1190x842 pt,基于A4(595x842 pt),并假设它是原始PDF中的第16页(对于ImageMagick转换为[15]),则{{1} }命令可以是s.th.像:

convert

结果为您提供了两个光栅图像。