使用 Ghostscript v7.07 裁剪 PDF

Cropping a PDF with Ghostscript v7.07

我正在尝试裁剪故意输出过大的 PDF,因为输出它的程序不知道其内容的大小。在有问题的 FreeBSD 系统上安装了 Ghostscript v7.07。基于对另一个问题 (Cropping a PDF using Ghostscript 9.01) and adapting it to v7.07 documentation (http://ghostscript.com/doc/7.07/Readme.htm) 的现有答案,我尝试了以下将 -o 替换为 -sOutputFile= 的方法,因为它无法识别 -o。

gs                                  \
   -dNOPAUSE                        \
   -dBATCH                          \
   -sDEVICE=pdfwrite                \
   -c "[/CropBox [0 6785 433 7128]" \
   -c " /PAGES pdfmark"             \
   -sOutputFile=testout.pdf         \
   testin.pdf                       \

我也试过了

gs                           \
  -dNOPAUSE                  \
  -dBATCH                    \
  -sDEVICE=pdfwrite          \
  -dDEVICEWIDTHPOINTS=433    \
  -dDEVICEHEIGHTPOINTS=343   \
  -dFIXEDMEDIA               \
  -c "0 6785 translate"      \
  -c "0 0 433 343 rectclip"  \
  -sOutputFile=testout.pdf   \
  testin.pdf                 \

我的问题是在这两种情况下我都收到以下消息

**** Unable to open the initial device, quitting.

在搜索该错误时,它似乎主要是由于输出文件位置没有写入权限或类似的东西,但情况似乎并非如此,因为我已将我的文件夹更改为 777 . 驱使我来到这里的是,如果我像下面那样删除 postscript 命令行 (-c),它会输出 testout.pdf 文件就好了(但显然没有裁剪或翻译到正确的位置)。

gs                                  \
   -dNOPAUSE                        \
   -dBATCH                          \
   -sDEVICE=pdfwrite                \
   -sOutputFile=testout.pdf         \
   testin.pdf                       \

gs                           \
  -dNOPAUSE                  \
  -dBATCH                    \
  -sDEVICE=pdfwrite          \
  -dDEVICEWIDTHPOINTS=433    \
  -dDEVICEHEIGHTPOINTS=343   \
  -dFIXEDMEDIA               \
  -sOutputFile=testout.pdf   \
  testin.pdf                 \

我认为 7.07 可能根本不支持这些命令,因为我在 -c 中放入什么似乎并不重要,如果 -c 存在,它总是会给出该错误,但它是出现在 7.07 文档 (http://ghostscript.com/doc/7.07/Use.htm#General_switches) 中,它并没有给我一个 -c is unknown 错误,所以我不知所措。我想我要么做错了什么,要么 ghostsciprt 安装或它的依赖项有问题。如果有人能给我任何帮助,我将不胜感激。

好的,首先升级您使用的是 13 年以上的软件版本。

其次,您的命令行不正确,您使用的是 -c 但没有提供匹配的 -f 这意味着 -c 之后的所有内容 包括输入和输出文件名正在被视为 PostScript。

现在更新版本的 Ghostscript 会告诉你它需要一个输出文件名,你那令人难以置信的古老版本只能告诉你设备没有打开(因为没有输出文件名)这就是为什么你收到误导性信息。

不要两次使用 -c,-c 之后的所有内容(直到 -f)都被视为 PostScript,因此您不需要指定它两次。

我希望它能工作,但由于您使用的是太旧的版本,我无法确定:

gs                           \
  -dNOPAUSE                  \
  -dBATCH                    \
  -sDEVICE=pdfwrite          \
  -dDEVICEWIDTHPOINTS=433    \
  -dDEVICEHEIGHTPOINTS=343   \
  -dFIXEDMEDIA               \
  -c "0 6785 translate      \
   0 0 433 343 rectclip" -f  \
  -sOutputFile=testout.pdf   \
  testin.pdf