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

Posted

技术标签:

【中文标题】如何使用 Ghostscript 裁剪 pdf(无需手动输入边界框)【英文标题】:How to crop pdf using Ghostscript (without entering manually Bounding Box) 【发布时间】:2014-12-23 13:20:09 【问题描述】:

我需要将 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

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

谢谢。

【问题讨论】:

【参考方案1】:

您需要的是命令替换。请通过“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 包含一个错误:而不是“ResBoundingBox”,应该放置“BoundingBox”或“HiResBoundingBox”。我说的对吗? 我们不是必须在文件replacebb.bat 中的字符串-o output.pdf -sDEVICE=pdfwrite -dUseCropBox=true 的末尾加上标记“^”吗? 1.无论我们找到“ResBoundingBox”还是“HiResBoundingBox”,我们都会从输出中得到相同的行。 2. 是的,当然 ^ 错过了【参考方案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

【讨论】:

【参考方案3】:

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

最好的办法是写一个脚本来做。

【讨论】:

以上是关于如何使用 Ghostscript 裁剪 pdf(无需手动输入边界框)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ghostscript 在多页 pdf 中裁剪第 3 和第 4 页

如何使用 Ghostscript 将 AI(嵌入 PDF)裁剪为 PNG?

Ghostscript:如何将 STDIN 自动裁剪为“边界框”并写入 PDF?

ghostscript 裁剪 pdf 不正确

Imagemagick / ghostscript将裁剪标记添加到pdf

GhostScript 裁剪的 PDF 在 iOS/Android 上显示不正确