如何使用GhostScript从PDF创建图像时居中图像

时间:2015-01-27 12:31:34

标签: pdf centering ghostscript

我有几个不同大小和不同宽高比的pdf文件。现在我想从这些文件的第一页创建固定大小的缩略图。 我使用此命令执行此操作:

gs -dNOPAUSE -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 -sOutputFile=d:\test\a.jpeg -dJPEGQ=100 -g509x750 -dUseCropBox=true  -dPDFFitPage=true -q  d:\test\a.pdf -c quit

由于原始文件的宽度和高度不同,但缩略图的大小应相同,因此缩略图的右侧顶部会有白边。但我希望在缩略图的顶部和底部(或左右)具有相等的边距(就像在Windows资源管理器中显示的缩略图一样)。

有没有办法使用GhostScript?

1 个答案:

答案 0 :(得分:0)

是的,但不能使用单个开关,而不能使用-dPDFFitPage。

PDFFitPage会对内容进行同构缩放(即每个方向都相同),因此 会在输出右侧的顶部显示白色边距。< / p>

为了使内容居中,您需要复制PDFFitPage的功能,并且还要在x或y方向上将原点转换为“多余”的一半。无论哪个方向都留有空间。

您可以在/ghostpdl/gs/Resource/Init/pdf_main.ps中找到执行缩放的代码,查找/ pdf_PDF2PS_matrix然后:

  //systemdict /PDFFitPage known {
    PDFDEBUG { (Fiting PDF to imageable area of the page.) = flush } if
    currentpagedevice /.HWMargins get aload pop
    currentpagedevice /PageSize get aload pop
    % Adjust PageSize and .HWMargins for the page portrait/landscape orientation

请注意,据我所知,当前的实现已经确实使输出居中:

% stack: savedCTM <pdfpagedict> [Box] scale XImageable YImageable XBox YBox
3 index 2 index 6 index mul sub 2 div 3 index 2 index 7 index mul sub 2 div
PDFDEBUG { (    Centering translate by [ ) print 1 index =print (, ) print dup =print ( ]) = flush } if
translate pop pop pop pop