如何使用Ghostscript裁剪PDF(无需手动输入边界框)

4
我需要将一个pdf文件裁剪到其边界框(Bounding Box)。 首先,我要计算实际的边界框:
gswin64c.exe ^
  -o nul ^
  -sDEVICE=bbox ^
  input.pdf

结果

%% 高分辨率边框:156.350019 391.521011 445.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个回答

3
您需要的是所谓的“命令替换”。请参考“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

你好,感谢回复!不幸的是,它没有起作用 :) 当然,我已经将'gs9.02'更改为我的版本'gs9.14'。此外,我认为getbb.bat包含一个错误:应该使用"BoundingBox"或"HiResBoundingBox"而不是"ResBoundingBox"。我是对的吗? - Andriy
在文件replacebb.bat中,我们不需要在字符串末尾放置标记“^”,以便将-o output.pdf -sDEVICE = pdfwrite -dUseCropBox = true作为输出参数。 - Andriy
  1. 无论我们找到“ResBoundingBox”还是“HiResBoundingBox”,我们都会从输出中得到相同的行。
  2. 是的,当然^被忽略了。
- kakabomba

2

这个方法对我在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

0
基本上不行。您需要从bbox设备的输出中提取信息,并将其单独发送到pdfwrite设备。
最好的方法是编写一个脚本来完成这项工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接