【问题标题】:How to crop pdf using Ghostscript (without entering manually Bounding Box)如何使用 Ghostscript 裁剪 pdf(无需手动输入边界框)
【发布时间】: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

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

谢谢。

【问题讨论】:

    标签: pdf crop ghostscript bounding-box


    【解决方案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 设备。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-13
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多