用于裁剪 PDF 文件的命令行工具

用于裁剪 PDF 文件的命令行工具

我正在寻找一个开源命令行工具来裁剪 PDF 文件,就像我们在 Adob​​e Acrobat Pro 中所做的那样。我尝试过 PdfTk、ImageMagick、PyPDF 和 GhostScript——到目前为止都没有成功。

答案1

我建议你看看PDF裁剪

如果您希望裁剪左、上、右和下边距分别为 5、10、20 和 30 pt(点)的 pdf,请运行

pdfcrop --margins '5 10 20 30' input.pdf output.pdf

在终端中。要实际裁剪掉某些内容,请在裁剪参数中使用负值。例如,

pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf

从左、上、右、下(按此顺序)裁剪 50 pt。

如果你只运行该命令pdfcrop input,它将输出一个名为输入-裁剪.pdf边距为零。我发现在文档中包含 PDF 插图时,这个功能非常方便。

裁剪多个文件

不幸的是,pdfcrop 无法同时裁剪多个文件。不过,编写一个脚本来裁剪脚本所在文件夹中的所有 pdf 是很容易的。

创建一个新的空文件,并将其命名为something.sh。使用文本编辑器打开它并插入以下内容:

#!/bin/bash
for FILE in ./*.pdf; do
  pdfcrop "${FILE}"
done

保存并关闭。然后右键单击该文件,转到属性 > 权限并检查字段允许作为程序执行文件(或chmod +x /path/to/something.sh在终端中运行)。现在关闭对话框。双击脚本并选择运行它在终端中运行. 以及所有带有后缀的 pdf 的全新、零边距裁剪版本-庄稼现在将打印在文件夹中。如果您想要边距或其他内容,当然可以打开脚本并在后面添加参数pdfcrop

答案2

感谢 Rasmus,您可以从 texlive-extra-utils 包中安装 pdfcrop:

sudo apt-get install texlive-extra-utils

然后使用 pdf crop 命令裁剪 pdf 文件,如下所示:

pdfcrop input.pdf output.pdf

使用--help查看更多令人惊奇的参数,例如--margins

pdfcrop --margins 5 input.pdf output.pdf

从页面的每一侧裁剪 5 bp 的 PDF

答案3

您也可以使用 Ghostscript 轻松裁剪 PDF 文件。我编写了一个小脚本来简化此过程(灵感来自这个答案):

#!/bin/bash

if [ $# -lt 5 ]
then
  echo "Usage: `basename $0` <pdf-file> <x_min> <x_max> <y_min> <y_max>"
  echo "Notes:"
  echo " - all coordinates are absolute; no calculation of width/height necessary"
  echo " - use 'gv' to determine the coordinates"
  exit 65
fi

file="$1"
xmin="$2"
xmax="$3"
ymin="$4"
ymax="$5"

base="${file%.*}"
outfile="${base}_cropped.pdf"

echo "writing to: $outfile"

gs \
  -o $outfile \
  -sDEVICE=pdfwrite \
  -c "[/CropBox [$xmin $ymin $xmax $ymax] /PAGES pdfmark" \
  -f $file

为了确定裁剪的坐标,我使用了gv,它使用与 Ghostscript 相同的单位打印鼠标光标的坐标。例如,在这里我确定 x/y 的最小坐标(左上角的值):

作物1

现在最大坐标:

作物2

最后,我运行脚本pdf_crop_by_coordinates.sh test.pdf 45 429 38 419,生成test_cropped.pdf如下所示的内容:

结果

不过,我不知道 Ghostscript 解决方案pdfcrop在质量和正确性方面相比如何。

答案4

布里斯不是命令行,但值得一看。

相关内容