使用GhostScript为从PDF转换的Jpeg设置自动高度/宽度

使用GhostScript为从PDF转换的Jpeg设置自动高度/宽度,pdf,jpeg,ghostscript,Pdf,Jpeg,Ghostscript,我正在使用GS进行从PDF到JPEG的转换,下面是我使用的命令: gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf 在该命令中,您可以看到-g500x300用于设置转换后的图像大小(宽度x高度) 有没有一种方法可以只设置宽度而不必输入高度,这样它就可以基于宽度使用其原始纵横比缩放高度?我知道这可以通过使用ImageMagick convert来实现,您只需在高度参

我正在使用GS进行从PDF到JPEG的转换,下面是我使用的命令:

gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf
在该命令中,您可以看到-g500x300用于设置转换后的图像大小(宽度x高度)

有没有一种方法可以只设置宽度而不必输入高度,这样它就可以基于宽度使用其原始纵横比缩放高度?我知道这可以通过使用ImageMagick convert来实现,您只需在高度参数上添加
0
,即
-调整500x0的大小
。我试过使用GhostScript,但我认为这不是正确的方法

我决定不使用ImageMagick convert,原因是转换大尺寸多页PDF时速度非常慢


谢谢你的帮助

这篇文章解释了为什么ghostscript速度更快,而解决它的唯一办法是修改imagemagick代码

不幸的是,ghostscript不支持自动确定的输出大小。这主要是因为使用的
-g
选项实际上决定了将保存渲染输出的设备的大小,而不是渲染输出本身。由于
-dPDFFitPage
开关尝试匹配设备大小,该输出大小正在更改。尽管您可以使用
-ddevicehight=n
定义jpeg“设备”的高度,但这将使设备宽度保持默认值不变


尽管这是一个有点繁琐的解决方法,但您可以使用ghostscript或imagemagick获取pdf页面的宽度和高度。要使用ghostscript执行此操作,请参阅的答案。然后,您可以计算适当的宽度来设置-g标志以保持纵横比。如果你能想出一组命令来完成这一切,你就可以得到额外的分数:)

你可以编写一个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 %! %用法:gs-sFile=\\\\\\\.pdf scale.ps /不在哪里归档{ (\n***缺少源文件。\(使用-sFile=\uuu.pdf\)\n)= 用法 } { 流行音乐 }如果有 %获取PDF页面的宽度和高度 % /GetSize{ pdfgetpage当前页面设备 1索引获取任意框 exch pop dup 2获取exch 3获取 /PDFH8 exch def /PDFWidth exch def }def % %主回路 %对于原始PDF文件中的每个页面 % 1 1 PDFPageCount { /PDFPage exch def PDFPage GetSize %在这里,知道所需的目的地大小 %计算PDF的比例因子以进行拟合 %要么是宽度,要么是高度,或者别的什么 %宽度和高度存储在PDFWidht和PDFHHEIGHT中 PDFPage pdfgetpage pdfshowpage }为了
pdfgetpage和pdfshowpage是PostScript语言的内部Ghostscript扩展,用于处理PDF文件。

您能否详细解释一下如何使用此程序?比如我需要制作一个shell脚本并运行它吗?它是PostScript,所以你把它提供给PostScript解释器。准确地说,您可以将其作为输入文件命令行参数传递给Ghostscript。注释作为程序的第一行,甚至给出了用法。请注意,这不是一个完整的工作实现。