缩略图生成使用Ghostscript转动我的设备大小定义为景观PDF页面(Thumbnail gen

2019-09-19 01:43发布

我想用GS生成PDF文件的缩略图。

  • 缩略图必须符合一个90x120像素矩形
  • 图像不应该被旋转
  • 图像应被调整大小以保持纵横比以适应矩形

我用下面的命令:

gswin32 -dPDFFitPage -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT 
-dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=0 
-dDEVICEWIDTH=90 -dDEVICEHEIGHT=120 -dORIENT1=true 
-sDEVICE=jpeg  -dTextAlphaBits=4 -dGraphicsAlphaBits=4 
-sOutputFile=output.%d.jpg input.pdf

结果:

如果我使用某些PDF文件使用肖像页面 类似这样的例子 ,你可以下载,然后缩略图是正确的,因为你可以在这里看到:

如果我使用它的PDF与景观的页面,devicewidth被视为高度莫名其妙:

如何防止这种行为? 我希望我的保时捷是90x120为好。 我想,也许我需要提供Ghostscript的某些PostScript代码(用-c命令行参数),但我有没有经验。 可能有人请帮助我吗?

EDIT1:我试过KENS的建议 。 随着-dFIXEDMEDIA我的保时捷也会被剪裁就像你可以看到如下:

EDIT2: 库尔特Pfeifle的第一个解决方案是不正常的人像图像(白色部分右侧,未使用的空间正常)。 见下文:

EDIT3: 库尔特Pfeifle的第三个解决方案是差不多好了。 对于风景图片以其完美:

然而,肖像页面有大小问题,背景变得完全灰化,以及:

所以库尔特,我想我可能分裂的PDF页 (GS -dFirstPage和-dLastPage),然后如果你有一些想法, 如何决定如果一个网页是横向或纵向 ,然后我可以做一些条件处理。 任何想法? 至于背景颜色,我认为它不是那么重要,但如果你有想法在这里为好,那么他们是受欢迎的。

Answer 1:

好了,现在有一个更详尽的答案努力的基础上,上述想法的第一个操纵PDF(以便它使用一个人像媒体格式来显示其景观图像内容)“......

请注意,因为你的原始PDF不使用的所有网页的共同尺寸(他们都是不同的),我做了我的概念证明,只有第一页。

第1步:从原来的(横向)提取第1页

我使用pdftk此:

porsches.pdf  cat 1  output porsche-page1.pdf

第2步:大纵向页面中心景观内容

我使用的Ghostscript加上-c ...这个命令行的PostScript片段:

gs \
 -o porsche-page1-on-portrait-medium.pdf \
 -sDEVICE=pdfwrite \
 -dPDFSETTINGS=/prepress \
 -g1920x2560 \
 -r72 \
 -c "<</PageOffset [0 560]>> setpagedevice" \
 -f porsche-page1.pdf

/PageOffset值是从我加了1120点至1440点,原来的页面高度的事实的。 为此我一半向上所以画面被再次为中心的值的偏移的内容。

第3步:创建JPEG缩略图(纵向)

gs \
 -sOutputFile=proofofconcept-thumb_%03d.jpg \
 -dPDFFitPage \
 -dDEVICEWIDTH=90 \
 -dDEVICEHEIGHT=120 \
 -sDEVICE=jpeg \
  porsche-page1-on-portrait-medium.pdf

除非我没完全错误理解你的意图是什么:这应该是你想要的结果。 ( 注:我添加了一个黑框的缩略图,使它的真实尺寸甚至#2的白色背景HTML可见。)



Answer 2:

让Ghostscript的知道媒体是固定设置-dFIXEDMEDIA。

你可能会发布一个较小的示例文件还有一次,我们真的不需要所有71页,虽然我很欣赏他们漂亮的照片....



Answer 3:

我不认为你想要的是目前可能没有第一操纵PDF(以便它使用一个人像媒体格式来显示其景观图像内容)。

因为它似乎你把问题大多与你得到120像素宽度 ,我自己的解决方法来处理未改性的投入将是改变高度/宽度设置是这样的:

-dDEVICEWIDTH=90 -dDEVICEHEIGHT=89 

这将创建90个像素宽,非旋转JPEG图像,而这些将适合你的90x120像素的矩形(如您需要)。 :-)

(之后,你仍然可以操纵与ImageMagick的命令行工具之一,所获得的JPEG文件,以使与矩形或任何为中心的保时捷忠实地这些像素90x120 ....)



Answer 4:

这里是你怎么能脚本这整个事情更容易。 (我现在才意识到完全,你似乎想这对于Windows ...)

第一步:创建一个人人平等的页面大小一第一中级PDF

gswin32c.exe ^
   -o 1920x1440pts.pdf ^
   -dPDFFitPage ^
   -sDEVICE=pdfwrite ^
   -dPDFSETTINGS=/prepress ^
   -g19200x14400 ^
    porsche.pdf

这是在第2步准备。 将在“所有页面大小相同”允许我们使用相同的固定/PageOffset值适用。

第二步骤:第二中间PDF(肖像,具有中心景观内容)

gswin32c.exe 
   -o 1920x1440-portrait.pdf ^
   -sDEVICE=pdfwrite ^
   -dPDFSETTINGS=/prepress ^
   -g19200x25600 ^
   -c "<</PageOffset [0 560]>> setpagedevice" ^
   -f 1920x1440pts.pdf 

这是在第4步准备。 现在,我们有肖像页面的PDF(控股风景图像内容),我们创建缩略图会导致画像缩略图太...

第三步:添加一个灰色背景的肖像页面

gswin32c.exe ^
   -o - ^
   -sDEVICE=pdfwrite ^
   -g1920x2560 ^
   -c ".6 setgray 0 0 192 256 rectfill showpage" ^
| ^
pdftk.exe ^
   1920x1440-portrait.pdf ^
   background - ^
   output 1920x1440-portrait-gray-background.pdf

在管道中的第一个命令使用Ghostscript的编写与灰色背景到标准输出 PDF页面,而第二个命令使用pdftk读取来自其标准输入的背景信息,并创建下一个中介输出。

如果你不喜欢的是灰色阴影,使用其他值而不是.6 。 如果你不喜欢灰色,但希望的颜色,而不是使用.6 setgray

  • 1 0 0 setrgbcolor为红色背景,
  • 0 1 0 setrgbcolor为绿色背景,
  • 0 0 1 setrgbcolor为蓝色背景,
  • 1 0 0 0 setcmykcolor用于青色背景,
  • 0 1 0 0 setcmykcolor用于品红色的背景下,
  • 0 0 1 0 setcmykcolor为黄色背景。

第四步:创建最终JPEG缩略图

gswin32c.exe ^
   -o porsche-thumbnails-portrait_%03d.jpg ^
   -dPDFFitPage ^
   -dDEVICEWIDTH=90 ^
   -dDEVICEHEIGHT=120 ^
   -sDEVICE=jpeg ^
    1920x1440-portrait-gray-background.pdf

我把它留给自己的快乐将这些命令复制到一个批处理文件,并添加你可能想给它一些其他的东西... :-)


更新:当然,如果你有在横向页面文件,以及肖像,则需要应用一些条件处理。 要发现的命令行上的页面方向和大小, pdfinfo可能会有所帮助,如果这样调用:

 pdfinfo -f 4 -l 7 some.pdf

这将打印的(F IRST)4页的页面大小,以7(1 AST)。



文章来源: Thumbnail generation with Ghostscript rotates my device size definition for landscape pdf pages