我需要将PDF文件中的某个部分裁剪为PNG(这将使用Ghostscript和PHP自动完成)。这就是我现在所做的,它基本上将PDF的第一页转为PNG:
gs -q -dNOPAUSE -dBATCH \
-sDEVICE=pngalpha -dEPSCrop \
-sOutputFile=output.png input.pdf
具体来说,我正在尝试将this top left card裁剪为PNG。我也愿意就如何实现这一目标提出更多建议。
答案 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:
要获得更好的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
)。
在CMD窗口中,您必须使用^
作为行继续符(而不是\
)。此外,grep
可能无法使用 - 请改用findstr
。最后,如果gswinXX.exe
中没有%PATH%
,并且完整路径包含空格,则必须引用它:
"c:\program files\ghostscript\gswin64c.exe" ^
-q ^
-dBATCH ^
-dNOPAUSE ^
-sDEVICE=bbox ^
-dLastPage=1 ^
stackoverflowQuestion.pdf ^
| findstr %%BoundingBox
在PowerShell窗口中,仅引用可执行文件的完整路径将不起作用。你必须运行:
& "c:\program files\ghostscript\gswin64c.exe" -q -o nul: -sDEVICE=bbox my.pdf