如何提取和/或删除一堆 PDF 的最后一页?

如何提取和/或删除一堆 PDF 的最后一页?

我们的一个供应商开始在我们从他们那里获得的 PDF 的最后一页上添加一张不必要的大图像。我需要把它剪掉。但是,我们有数百张这样的图片,因此手动操作是行不通的。提取并自动删除 PDF 最后一页的最佳方法是什么(最好先删除一张,然后再删除另一张;我仍然需要通过文件大小确认我没有删除没有图像的那张)?操作系统是 Linux。

我可以使用 ghostscript 提取它,类似这样的操作gs -dFirstPage=5 -dLastPage=5,但我需要自动执行此操作,我无法手动找出最后一页的页码。

有任何想法吗?

编辑:澄清一下,我只想分割/删除最后一页。不是其中的图像,而是删除最后一页的句号。

答案1

正如@Daniel Andersson 已经评论的那样,这可以轻松完成pdftk

pdftk input.pdf cat end-1 output temp.pdf
pdftk temp.pdf  cat end-2 output output.pdf
rm temp.pdf

我不知道是否可以通过调用一次 pdftk 来完成......

编辑:你可以将它与 thanosk 的答案结合起来并使用(在 bash 中):

pdftk input.pdf cat 1-$((last-1)) output output.pdf

当您已经将最后一页提取到变量中时$last

答案2

为了进一步改进@eldering的答案,pdftk 1.45及更高版本可以通过在页码前面添加小写字母r来以相反的顺序引用页面。 PDF中的最后一页是r1,倒数第二页是r2,依此类推。

例如,单个 pdftk 调用:

pdftk input.pdf cat 1-r2 output output.pdf

将从 input.pdf 中删除最后一页——输入应该至少有两页长。

要提取 PDF 的最后一页来测试其文件大小,请运行:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk 可在 Linux 上使用。许多发行版都有可供安装的二进制文件。不过,您应该确保它是 1.45 或更高版本。如果不是,您可以从源代码构建 pdftk。

答案3

pdfinfo 将返回实际 pdf 文件的大小,pdfimages 将返回所述 pdf 文件中图像的索引。因此,您可以编写以下形式的脚本

#!/bin/bash
for i in *.pdf
do
        j=$(pdfinfo "$i" |awk '/^Pages/ { print $2}')
        pdfimages -list -p -f "$j" "$i"
done

如果某个文件的最后一页有图像,则应该返回该结果。如果确实如此,那么您可以进行任何需要的操作。

答案4

以下是使用 pdfjam 而不是 pdftk 的解决方案:

#!/bin/sh
fname=`basename $1`
pdfjam $1 1-$((`pdfinfo $1 | grep Pages | grep -shoPe '\d+'` - ${2:-1})) -o ${fname%.*}-trimmed.pdf

其中第一个参数是需要修剪的文件,第二个参数是需要修剪的页数(默认为 1)。

相关内容