我想用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),然后如果你有一些想法, 如何决定如果一个网页是横向或纵向 ,然后我可以做一些条件处理。 任何想法? 至于背景颜色,我认为它不是那么重要,但如果你有想法在这里为好,那么他们是受欢迎的。
好了,现在有一个更详尽的答案努力的基础上,上述想法的第一个操纵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可见。)
让Ghostscript的知道媒体是固定设置-dFIXEDMEDIA。
你可能会发布一个较小的示例文件还有一次,我们真的不需要所有71页,虽然我很欣赏他们漂亮的照片....
我不认为你想要的是目前可能没有第一操纵PDF(以便它使用一个人像媒体格式来显示其景观图像内容)。
因为它似乎你把问题大多与你得到120像素宽度 ,我自己的解决方法来处理未改性的投入将是改变高度/宽度设置是这样的:
-dDEVICEWIDTH=90 -dDEVICEHEIGHT=89
这将创建90个像素宽,非旋转JPEG图像,而这些将适合你的90x120像素的矩形(如您需要)。 :-)
(之后,你仍然可以操纵与ImageMagick的命令行工具之一,所获得的JPEG文件,以使与矩形或任何为中心的保时捷忠实地这些像素90x120 ....)
这里是你怎么能脚本这整个事情更容易。 (我现在才意识到完全,你似乎想这对于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