2

我使用 Ghostscript 将 JPEG 转换为 PDF:

gs -sDEVICE=pdfwrite -o d.pdf viewjpeg.ps -c "(Imgp3826.Jpeg) viewJPEG showpage 

这将创建具有默认页面大小和图像的 PDF,位于左下角。我需要修改脚本以创建具有正确尺寸的页面。

在本说明中:https ://stackoverflow.com/a/6508854/907576

他们使用ImageMagick执行此操作,但我不能使用它 - 我只能使用Ghostscript

是否可以从中获取宽度-高度值viewjpeg.ps并将其设置为页面大小?

我看到viewjpeg.ps

/height NextByte 8 bitshift NextByte add def
/width NextByte 8 bitshift NextByte add def

看起来他们使用 JPEG 标头来读取此信息。

然后我可以重复使用它<</PageSize [${dimension}]>>吗?

4

3 回答 3

2

FWIW,由于 viewJPEG 程序的编写方式,上面列出的简单添加不会单独起作用。

我建议用另一个过程来扩充 viewjpeg.ps:

/viewJPEGgetsize {      % <file|string> ==> width height
    save
    JPEGdict begin
    /saved exch def
    /scratch 1 string def
    dup type /stringtype eq { (r) file } if
    /F exch def

    readJPEGmarkers begin
    width height
    saved end restore
} bind def

然后你可以这样称呼它:

gs -I../lib -sDEVICE=pdfwrite \
   -o stuff.pdf viewjpeg.ps   \
   -c "(image.jpg) <</PageSize 2 index viewJPEGgetsize 2 array astore>> setpagedevice viewJPEG"
于 2012-10-02T15:13:00.723 回答
2

您不能将这些数字直接用作 /PageSize 的参数,因为它们是图像的高度和宽度(在图像样本中),而 PageSize 的参数以 PostScript 单位(1/72 英寸)为单位。

但是,您可以按当前分辨率缩放它们并使用缩放后的数字。

(宽度/分辨率)* 72 和(高度/分辨率)* 72 应该可以完成这项工作。

所以 :

currentpagedevice /HWResolution get aload
height exch div 72 mul
exch width exch div 72 mul
exch 2 array 3 1 roll astore
<< /PageSize 3 -1 roll >> setpagedevice

警告:我还没有时间真正尝试这个......

于 2012-10-02T14:39:38.757 回答
0
 gs -sDEVICE=pdfwrite -o /pathTo/newPdf.pdf "/pathTo/viewjpeg.ps" -c "(/pathTo/jpgToPdf.JPG) << /PageSize [400 300] >> setpagedevice  viewJPEG"
  • /pathTo/newPdf.pdf - 将生成的文件
  • /pathTo/jpgToPdf.JPG - 输入 jpg 文件
  • << /PageSize [400 300] >> setpagedevice viewJPEG - viewjpeg.ps 实用程序命令行参数
  • [400 300] - 通过公式(宽度/分辨率)* 72 和(高度/分辨率)* 72 计算的图像大小、宽度和高度
于 2016-07-22T06:43:05.817 回答