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

时间:2012-09-18 20:20:04

标签: php pdf png ghostscript

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

gs -q -dNOPAUSE -dBATCH \
   -sDEVICE=pngalpha -dEPSCrop \
   -sOutputFile=output.png input.pdf

具体来说,我正在尝试将this top left card裁剪为PNG。我也愿意就如何实现这一目标提出更多建议。

2 个答案:

答案 0 :(得分:16)

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

gs                          \
 -q                         \
 -dBATCH                    \
 -dNOPAUSE                  \
 -sDEVICE=bbox              \
 -dLastPage=1               \
  stackoverflowQuestion.pdf \
2>&1                        \
| grep %%BoundingBox

结果输出为:

%%BoundingBox: 119 531 464 814

这意味着:

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

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

,然后,
创建你的PNG。

从边界框值中得出,你似乎想要345 pt宽(= 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 

以下是生成的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 

<强>更新

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

答案 1 :(得分:0)

在Windows上,Ghostscript的控制台应用程序名称为gswin32c.exe和/或gswin64c.exe(而不是gs)。

1。 CMD窗口

在CMD窗口中,您必须使用^作为行继续符(而不是\)。此外,grep可能无法使用 - 请改用findstr。最后,如果gswinXX.exe中没有%PATH%,并且完整路径包含空格,则必须引用它:

"c:\program files\ghostscript\gswin64c.exe" ^
 -q                         ^
 -dBATCH                    ^
 -dNOPAUSE                  ^
 -sDEVICE=bbox              ^
 -dLastPage=1               ^
  stackoverflowQuestion.pdf ^
| findstr %%BoundingBox

2。 PowerShell窗口

在PowerShell窗口中,仅引用可执行文件的完整路径将不起作用。你必须运行:

& "c:\program files\ghostscript\gswin64c.exe" -q -o nul: -sDEVICE=bbox my.pdf