如何从Viewjpeg.ps文件中设置PostScript中的PDF页面大小

时间:2012-10-02 12:47:39

标签: pdf jpeg ghostscript postscript

我使用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}]>>吗?

3 个答案:

答案 0 :(得分: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
警告:我没有时间真正尝试这个......

答案 1 :(得分: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"

答案 2 :(得分: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文件
  • &LT;&LT; / PageSize [400 300]&gt;&gt; setpagedevice viewJPEG - viewjpeg.ps实用程序命令行参数
  • [400 300] - 按公式(宽度/分辨率)计算的图像尺寸,宽度和高度* 72和(高度/分辨率)* 72