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

时间:2012-04-04 04:18:37

标签: pdf jpeg ghostscript

我正在使用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时它非常慢。

感谢您的帮助!

2 个答案:

答案 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文件。