如何使用 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 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
有没有办法自动替换边界框?
谢谢。
【问题讨论】:
【参考方案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?