使用GhostScript裁剪PDF并创建PNG

时间:2018-08-08 14:09:21

标签: pdf imagemagick png ghostscript

应用程序接收的PDF内容不能覆盖整个页面。内容的坐标和尺寸也随数据一起发送。以下是从cropped.png创建target.pdf的示例命令,该命令的内容开始于(X:179,Y:212),其大小开始于(W:600,H:400)。

gswin64c -q -sDEVICE=png16m -o "cropped.png" -dNumRenderingThreads=4 -dSAFER -dBATCH -dNOPAUSE -dLastPage=1 -c "<< /PageOffset [-179 -212] /Page >> setpagedevice" -r144 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -f "target.pdf"

它会创建具有正确偏移量的PNG,但是我找不到定义应该捕获的PDF区域的方法。换句话说,输出必须是仅包含给定框中内容的PNG。

Windows 10上已安装GhostScript V9.22。我也可以使用ImageMagicK。

有没有办法做到这一点?还是我处理方法不正确?任何想法将不胜感激!

谢谢

1 个答案:

答案 0 :(得分:1)

您已偏移原点,但未指定介质尺寸,因此介质尺寸将与原始PDF文件中的尺寸相同。

您需要添加-dDEVICEWIDTHPOINTS = 600 -dDEVICEHEIGHTPOINTS = 400 -dFIXEDMEDIA,前提是您指定的媒体大小正确。显然,如果不查看原始空格,我无法分辨出实际的空白!

以144 dpi的分辨率使用-dNumRenderingThreads是没有意义的,实际上,它仅在相当高的分辨率下有用,在这种分辨率下,您只会放慢速度。

此:

-c“ << / PageOffset [-179 -212] / Page >> setpagedevice” -r144 -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -f

不正确,我很惊讶它没有引发错误。当您指定-c之后的所有内容,直到-f被视为PostScript。 -r144等无效的PostScript,我希望它会引发错误。您最好将-c“ << / PageOffset [-179 -212] / Page >> setpagedevice” -f移到输入文件名之前。

所以我建议您的命令行应该是:

gswin64c -q -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -o "cropped.png" -dLastPage=1 -r144 -dTextAlphaBits=4 -dGraphicsAlphaBits=4  -dDEVICEWIDHTPOINTS=600 -dDEVICEHEIGHTPOINTS=400 -dFIXEDMEDIA -c "<< /PageOffset [-179 -212] /Page >> setpagedevice" -f "target.pdf"