Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GhostScript从PDF创建图像时如何将图像居中_Pdf_Centering_Ghostscript - Fatal编程技术网

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

使用GhostScript从PDF创建图像时如何将图像居中,pdf,centering,ghostscript,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 由于原始文件的宽度和高度不同,但缩略图的大小

我有几个不同大小和不同宽高比的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来完成此操作?

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

PDFFitPage将对内容进行同构缩放(即在每个方向上相同),因此您将在输出的顶部或右侧具有白色边距

为了使内容居中,您需要复制PDFFitPage的功能,并在x或y方向将原点平移一半,无论哪个方向有剩余空间

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

  //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
%stack:savedCTM[Box]缩放最大可成像可成像XBox YBox
3指数2指数6指数mul sub 2分区3指数2指数7指数mul sub 2分区
PDFDEBUG{(居中平移[)打印1索引=打印(,)打印dup=打印(])=flush}如果
翻译流行歌曲

多么可怜的孩子啊!我使用的是8.7.1版。此问题在当前版本(9.15)中已修复,谢谢