6

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

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

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

4

2 回答 2

18

首先,
确定您的第一个 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 磅(= 464 - 119)和高 283 磅(= 814 - 531)。这导致页面大小为-g345x283(以像素为单位,因为 Ghostscript 默认使用 72 dpi 进行图像输出(除非另有说明),因此72 px == 1 inch.

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

您还需要从左边缘切掉 119 pt(118 pt 用于“安全”)和 531 pt 从底部边缘(530 用于安全)。

因此命令将是:

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

这是生成的PNG:

出.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)。此外,您必须将其^用作续行字符(而不是\)。

于 2012-09-18T21:04:38.460 回答
0

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

1.CMD窗口

在 CMD 窗口中,您必须将其^用作续行符(而不是\)。此外,grep可能不可用 - 请findstr改用。最后,如果gswinXX.exe不在 your%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
于 2016-07-02T20:36:43.227 回答