如何使用Ghostscript裁剪pdf(无需手动输入Bounding Box)

时间:2014-12-23 13:20:10

标签: pdf crop ghostscript bounding-box

我需要将pdf文件裁剪到其边界框。 首先,我计算实际的边界框:

gswin64c.exe ^
  -o nul ^
  -sDEVICE=bbox ^
  input.pdf

结果

%% HiResBoundingBox:156.350019 391.521011 44​​5.919963 446.259010

我替换

gswin64c.exe ^
  -o output.pdf ^
  -sDEVICE=pdfwrite ^
  -dUseCropBox=true ^
  -c "[/CropBox [156.350019 391.521011 445.919963 446.259010] /PAGES pdfmark" ^
  -f input.pdf

有没有办法自动替换边界框?

谢谢。

3 个答案:

答案 0 :(得分:2)

您需要的是命令替换。请参考'for /?'的帮助命令

为简单起见,我将答案分成了两个文件

第一个文件( getbb.bat )获取边界框

@echo off
"C:\Program Files\gs\gs9.02\bin\gswin64c.exe"^
  -o nul -sDEVICE=bbox %1 2>&1 | find "ResBoundingBox"

第二个文件( replacebb.bat

@echo off

for /f "tokens=2 delims=:" %%b in ('getbb.bat %1') do (
call :Trim bbox %%b
"C:\Program Files\gs\gs9.02\bin\gswin64c.exe" ^
  -o output.pdf -sDEVICE=pdfwrite -dUseCropBox=true ^
  -c "[/CropBox [%bbox%] /PAGES pdfmark" -f input.pdf
)
exit /b

:Trim
SetLocal EnableDelayedExpansion
set Params=%*
for /f "tokens=1*" %%a in ("!Params!") do EndLocal & set %1=%%b
exit /b

答案 1 :(得分:1)

这对我来说在DOS批处理文件中使用并拖放:

    "c:\Program Files\gs\gs9.21\bin\gswin64c.exe" ^
 -dBATCH -dNOPAUSE -q -sDEVICE=bbox %1 2> CropBox.txt

for /f "tokens=2 delims=:" %%G IN (CropBox.txt) DO Set MyVar= %%G

"c:\Program Files\gs\gs9.21\bin\gswin64c.exe" -dNOPAUSE -dBATCH^
 -sDEVICE=pdfwrite ^
 -sOutputFile=%1.pdf ^
 -c "[/CropBox [%MyVar%] /PAGES pdfmark" -f %1

答案 2 :(得分:0)

基本上,没有。您需要从bbox设备的输出中提取信息,并将其单独发送到pdfwrite设备。

最好的办法是编写一个脚本来完成它。