我正在寻找一个开放源代码命令行工具来裁剪PDF文件,就像我们在Adobe Acrobat Pro中一样。我已经尝试了PdfTk,ImageMagick,PyPDF和GhostScript,但到目前为止都没有成功。

评论

您能描述一下使用Adobe Acrobat Pro可以进行哪种裁剪吗?因为我没有它,所以不能告诉你想要的东西。

在Adobe Acrobat Pro中,我们可以使用边距控件来裁剪PDF。我们可以提供裁剪顶部,底部,右侧和左侧的值

#1 楼

我建议您看一下PDFcrop。

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

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


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

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


从左侧,顶部,右侧,底部裁剪50点(按此顺序)。

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

裁剪多个文件

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

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

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


保存并关闭。然后右键单击该文件,转到“属性”>“权限”,然后选中“允许以程序方式执行文件”字段。现在关闭对话框。通过双击脚本并选择“在终端中运行”来运行脚本。现在,所有后缀为-crop的pdf的新零利润裁剪版本都将打印在该文件夹中。如果需要边距或其他功能,当然可以打开脚本并在pdfcrop之后添加参数。

评论


注意,除了指定负边距之外,还可以使用--bbox“ ”。这允许使用该方法来确定我在下面的答案中描述的作物面积。

–bluenote10
15年3月3日在16:22

是否可以告诉页码(需要裁剪)?

– L.K.
17年3月13日在12:04

我担心这全是或全无。 pdfcrop --help列出可用的选项。我看不到任何允许指定页面范围的内容。

–拉斯穆斯
17年3月13日在15:20

将PDFCrop输出的大小与其输入进行比较,看起来pdfcrop似乎只修改了边界框。它不会删除数据。因此,此方法不适用于缩小pdf或隐藏信息。

–init_js
17-4-27在21:10



像个魅力!即使有pdf所需的边距!

– jojo
17年7月8日在13:33

#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文件

评论


测量值是bp,与pt略有不同。参见tex.stackexchange.com/questions/8260/…。

– koppor
17年9月2日在16:06

对我而言,pdfcrop将文件大小从300x(从7MB扩展到2GB)扩大了。之后,我必须执行gs -dNOPAUSE -dBATCH -sDEVICE = pdfwrite -dCompatibilityLevel = 1.4 -dPDFSETTINGS =“ / ebook” -sOutputFile = output2.pdf output.pdf,该文件确定了文件大小。

–fiktor
18年2月24日在19:07

#3 楼

您也可以仅使用Ghostscript裁剪PDF文件。我编写了一个小脚本来简化此过程(受此答案启发):

#!/bin/bash

if [ $# -lt 5 ]
then
  echo "Usage: `basename q4312078q` <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=""
xmin=""
xmax=""
ymin=""
ymax=""

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的最小坐标(左上角的值):



现在最大坐标:



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



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

评论


对于我来说,全面运行不起作用,对于像ghostscript这样的强大引擎来说令人惊讶。但是pdfcrop一次完成了完美的工作。单位很时髦,需要时间来看看是否可以配置标准:pt,px等。

– u2n
20年1月13日在19:25

#4 楼

当我无法使用pdftk做某事时,我接下来要讨论的是PDFjam,它是pdfpages LaTeX软件包的命令行包装(因此,您也需要安装它并安装了TeX发行版)。要获得有关如何使用它的帮助,我建议您使用常规帮助屏幕:

pdfjam --help


因为手册页稀疏并且Web页面集中于示例。

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

pdfjam --keepinfo --trim "10mm 15mm 10mm 15mm" --clip true --suffix "cropped" input.pdf


这将输出一个名为input-cropped.pdf的文件。修剪的顺序应该为左,下,右,上,按照graphicx的\includegraphics

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

评论


注意:这实际上并不会从PDF中删除变为屏幕外的内容,只会将其隐藏。与得分最高的答案中的@init_js评论相同。

– Jan ankowski
18年7月31日在16:25

这对我来说很好。起初我没有意识到--margin'0'的pdfcrop甚至占用了它发现的空白,并且非零边距从那里调整。我的pdf在大多数页面上都有令人讨厌的裁剪标记,因此该pdfjam程序更适合删除它们。

–Jason Kleban
20-2-17在19:31

#5 楼

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

评论


这绝对是Linux的最佳裁剪工具,可以根据需要运行。

–亚历山大·Shlenchack
20年4月5日在18:12

同意,这绝对是我想要的!

–奥利弗·埃文斯(Oliver Evans)
1月1日21:45

#6 楼

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

#7 楼

这可能会对您有所帮助。
这与Ubuntu和life的较新版本一致。
这是Master PDF Editor。您可以使用它裁剪,添加一些东西等。

示例:
这是在
之前
这是在ctrl + k之后


#8 楼

pdfCropMargins程序是一个命令行应用程序,用于自动裁剪PDF文件的空白。

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

使用


pip install pdfCropMargins

安装
使用



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


寻求帮助
/>

pdf-crop-margins -h |更多


#9 楼

您可以在此页面上使用pypdf脚本。但是在这个stackexchange问​​题的答案中,似乎也有很多选择。

评论


我无法获得左上右下参数。他们是点,英寸,厘米吗?

– Rakesh
2012年4月24日11:00



@Rakesh:请参阅我的答案以获取有关参数以及如何轻松确定参数的说明。

–bluenote10
15年3月3日在13:12