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:
要获得更好的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
).此外,您必须使用^
行继续符(而不是\
).