裁剪PDF文件的命令行工具

Rak*_*esh 145 command-line pdf open-source

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

Ras*_*mus 172

我建议你看看PDFcrop

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

pdfcrop --margins '5 10 20 30' input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

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

pdfcrop --margins '-50 -50 -50 -50' input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

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

如果您只运行命令pdfcrop input,它将输出一个标题为input-crop.pdf的文件,边距为零。在文档中包含 pdf 插图时,我发现这非常方便。

裁剪多个文件

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

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

#!/bin/bash
for FILE in ./*.pdf; do
  pdfcrop "${FILE}"
done
Run Code Online (Sandbox Code Playgroud)

保存,关闭。然后右键单击该文件,转到Properties > Permissions并选中Allow execution file as program字段。现在关闭对话框。通过双击脚本并选择Run in Terminal来运行脚本。现在,所有带有-crop后缀的 pdf 的新的零边距裁剪版本都将打印在文件夹中。如果您想要边距或其他东西,您当然可以打开脚本并在pdfcrop.

  • 将 PDFCrop 输出的大小与其输入的大小进行比较,看起来好像 pdfcrop 只修改了边界框。它不会删除数据。因此,这种方法不适合使 pdf 变小或隐藏信息。 (10认同)
  • pdfcrop 非常慢(在 550 页的 pdf 上),并且使我的文件大小增加了十倍。这对我来说效果更好:https://tex.stackexchange.com/a/42259/193342 (2认同)

tey*_*uie 55

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

sudo apt-get install texlive-extra-utils
Run Code Online (Sandbox Code Playgroud)

然后使用 pdf 裁剪命令裁剪 pdf 文件:

pdfcrop input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

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

pdfcrop --margins 5 input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

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

  • 测量值是“bp”,与“pt”略有不同。请参阅 https://tex.stackexchange.com/questions/8260/what-are-the-various-units-ex-em-in-pt-bp-dd-pc-expressed-in-mm。 (3认同)
  • 对我来说,pdfcrop 将文件大小从 300 倍(从 7MB 增加到 2GB)。之后我不得不做`gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS="/ebook" -sOutputFile=output2.pdf output.pdf`,这固定了文件大小。 (3认同)

blu*_*e10 19

您还可以简单地使用 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
Run Code Online (Sandbox Code Playgroud)

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

作物 1

现在最大坐标:

作物2

最后,我运行脚本pdf_crop_by_coordinates.sh test.pdf 45 429 38 419生成一个test_cropped.pdf看起来像这样的:

结果

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

  • 完全不适合我,对于像 ghostscript 这样的强者来说令人惊讶。但是 pdfcrop 完美地完成了这项工作,而且一次通过。单位很时髦,需要时间看看是否可以配置标准:pt、px 等。 (2认同)

小智 18

当我不能用 pdftk 做一些事情时,我转向的下一个地方是PDFjam,它是pdfpages LaTeX 包的命令行包装器(因此您还需要它并安装了 TeX 发行版)。有关如何使用它的帮助,我推荐常规帮助屏幕:

pdfjam --help
Run Code Online (Sandbox Code Playgroud)

因为手册页很少,而网页集中于示例。

要裁剪 PDF,您需要的命令是这样的:

pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf
Run Code Online (Sandbox Code Playgroud)

这将输出一个名为input-cropped.pdf. 饰边的次序应为左,下,右,上,按照\includegraphicsgraphicx宏

为了了解它与 PDFcrop 的比较,我最近不得不裁剪一个非常漂亮的 PDF。我的原始文件是 675 kB,我通过 PDFjam 裁剪的版本是 1.2 MB,而通过 PDFcrop 裁剪的版本是 4.5 MB。虽然 PDFjam 和 PDFcrop 都去除了嵌入的超链接和书签,但带有该--keepinfo选项的PDFjam保留了文档属性(例如标题、作者、主题)。

  • 注意:这并没有真正从 PDF 中删除屏幕外的内容,只是将其隐藏。与@init_js 在得分最高的答案中评论的内容相同。 (3认同)

小智 9

Briss不是命令行,但值得一看。

  • 这绝对是适用于 Linux 的最佳裁剪工具,它可以根据需要工作。 (2认同)

小智 6

pdfCropMargins程序是一个命令行应用程序自动裁剪PDF文件的边缘。

该程序取决于系统上安装(和定位)的 Ghostscript 程序或 pdftoppm 程序。并用 PIL 分析页面图像以找到边界框,使用阈值 191。

安装使用

pip 安装 pdfCropMargins

运行使用

pdf-crop-margins -v -s -u your-file.pdf

求助

pdf-crop-margins -h | 更多的


Sun*_*day 5

如果图形工具也很好,我会推荐krophttp : //arminstraub.com/software/krop