我正在使用GS进行从PDF到JPEG的转换,以下是我使用的命令:
gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf
在此命令中,您可以看到-g500x300
是设置转换后的图像大小(宽度x高度)。
有没有办法只需设置宽度而不必输入高度,那么它将基于宽度来使用其原始高宽比来缩放高度?我知道可以通过使用ImageMagick转换来实现,只需将0
放在height参数即-resize 500x0
上即可。我尝试使用GhostScript,但我认为这不是正确的方法。
我决定不使用ImageMagick转换原因,因为在转换大尺寸多页PDF时它非常慢。
感谢您的帮助!
答案 0 :(得分:5)
这篇文章解释了为什么ghostscript更快 - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted,解决它的唯一解决方法是修改imagemagick代码。
不幸的是,ghostscript不支持自动确定的输出大小。这主要是因为使用的-g
选项实际上是确定将保存渲染输出的设备大小,而不是渲染输出本身。由于-dPDFFitPage
开关然后尝试匹配设备大小,因此输出大小正在发生变化。虽然您可以使用-dDEVICEHEIGHT=n
仅定义jpeg'设备'的高度,但这会使设备宽度保持不变的默认值。
虽然有点繁琐的解决方法,但您可以使用ghostscript或imagemagick来获取pdf页面的宽度和高度。要使用ghostscript执行此操作,请参阅Using GhostScript to get page size的答案。然后,您可以计算适当的宽度以设置-g标志以保持纵横比。如果您可以找出一组命令来完成所有这些,那么奖励积分:)
答案 1 :(得分:4)
你可以写一个PostScript程序来做到这一点。这是一个开始:
%! % usage: gs -sFile=____.pdf scale.ps /File where not { (\n *** Missing source file. \(use -sFile=____.pdf\)\n) = Usage } { pop }ifelse % Get the width and height of a PDF page % /GetSize { pdfgetpage currentpagedevice 1 index get_any_box exch pop dup 2 get exch 3 get /PDFHeight exch def /PDFWidth exch def } def % % The main loop % For every page in the original PDF file % 1 1 PDFPageCount { /PDFPage exch def PDFPage GetSize % In here, knowing the desired destination size % calculate a scale factor for the PDF to fit % either the width or height, or whatever % The width and height are stored in PDFWidht and PDFHeight PDFPage pdfgetpage pdfshowpage } for
pdfgetpage和pdfshowpage是PostScript语言的内部Ghostscript扩展,用于处理PDF文件。