如何使用Ghostscript将PDF文件的一部分裁剪为PNG

Tom*_*Tom 6 php pdf png ghostscript

我需要将我的PDF文件中的某个部分裁剪为PNG(这将使用Ghostscript与PHP自动完成).这就是我现在所做的,基本上将PDF的第一页转为PNG:

gs -q -dNOPAUSE -dBATCH \
   -sDEVICE=pngalpha -dEPSCrop \
   -sOutputFile=output.png input.pdf
Run Code Online (Sandbox Code Playgroud)

具体来说,我正试图将这个左上角的卡片裁剪为PNG.我也愿意就如何实现这一目标提出更多建议.

Kur*_*fle 16

首先,
确定第一个PDF页面的边界框:

gs                          \
 -q                         \
 -dBATCH                    \
 -dNOPAUSE                  \
 -sDEVICE=bbox              \
 -dLastPage=1               \
  stackoverflowQuestion.pdf \
2>&1                        \
| grep %%BoundingBox
Run Code Online (Sandbox Code Playgroud)

结果输出将是:

%%BoundingBox: 119 531 464 814
Run Code Online (Sandbox Code Playgroud)

它的意思是:

  • 边界框的左下角是坐标 (119,531)
  • 边界框的右上角是坐标 (464,814)

值位于PostScript点(其中72 pt == 1 inch).边界框是该矩形,其中包括这些图形PDF对象,这些对象在页面上留下墨迹或墨粉标记.

然后,
创建您的PNG.

从边界框值中得出,你似乎想要345 pt wide(= 464 - 119)和283 pt high(= 814 - 531).这导致页面大小-g345x283(以像素为单位,因为Ghostscript默认使用72 dpi进行图像输出(除非另有说明),因此72 px == 1 inch.

或者更好的是,我们保持距离边界框1 pt的安全区域,因此我们使图像比最小的图像大一点,我们得到这个图像尺寸:-g347x285.

您还需要从左边缘切断119磅("安全"为118磅),从底部边缘切断531磅(安全性为530).

因此命令将是:

gs                                                      \
  -o out.png                                            \
  -sDEVICE=pngalpha                                     \
  -g347x285                                             \
  -dLastPage=1                                          \
  -c "<</Install {-118 -530 translate}>> setpagedevice" \
  -f stackoverflowQuestion.pdf 
Run Code Online (Sandbox Code Playgroud)

以下是生成的PNG:

out.png

要获得更好的PNG质量,请将分辨率从默认的72 dpi提高到720 dpi并使用此命令:

gs                                                      \
  -o out720dpi.png                                      \
  -sDEVICE=pngalpha                                     \
  -r720                                                 \
  -g3470x2850                                           \
  -dLastPage=1                                          \
  -c "<</Install {-118 -530 translate}>> setpagedevice" \
  -f stackoverflowQuestion.pdf 
Run Code Online (Sandbox Code Playgroud)

更新:

在CMD窗口中的Windows上,Ghostscript的控制台应用程序名称是gswin32c.exe和/或gswin64c.exe(而不是gs).此外,您必须使用^行继续符(而不是\).