使用PDFtk删除pdf文件的最后一页?

use*_*753 43 linux pdf pdftk

有人可以告诉我如何使用PDFtk删除PDF文件的最后一页?

Thi*_*ame 73

使用该cat操作,并指定页面范围.

pdftk infile.pdf cat 1-r2 output outfile.pdf
Run Code Online (Sandbox Code Playgroud)

  • 还可以指定多个范围,并用空格分隔。例如:1-5 7-10 14-r2 (6认同)
  • 如果要删除一个以上的页面,则可以更改范围,例如,“ 1-r3”除最后两页外都执行所有操作。 (2认同)

小智 7

使用cpdf,您可以通过它与文档末尾的距离、使用波浪号以及开头来引用页面。

所以,我们可以做

cpdf in.pdf 1-~2 -o out.pdf
Run Code Online (Sandbox Code Playgroud)


Kin*_*ley 5

您需要查找页数,然后将其与pdftk cat函数一起使用,因为(AFAICT)pdftk不允许指定"偏离最后一个".

来自Poppler(http://poppler.freedesktop.org/)的'pdfinfo'工具可以提供此功能.

在一些bash脚本中包装它可以轻松地自动执行此过程:

page_count=`pdfinfo "$INFILE" | grep 'Pages:' | awk '{print $2}'`
page_count=$(( $page_count - 1 ))
pdftk A="$INFILE" cat A1-$page_count output "$OUTFILE"
Run Code Online (Sandbox Code Playgroud)

显然,添加参数,错误检查以及什么不可以放在所述脚本中:

#! /bin/sh

### Path to the PDF Toolkit executable 'pdftk'
pdftk='/usr/bin/pdftk'
pdfinfo='/usr/bin/pdfinfo'


####################################################################
script=`basename "$0"`


### Script help
if [ "$1" = "" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] || [ "$1" = "-?" ] || [ "$1" = "/?" ]; then
    echo "$script: <input-file.PDF> [<output-file.PDF>]"
    echo "    Removes the last page from the PDF, overwriting the source"
    echo "    if no output filename is given"
    exit 1
fi

### Check we have pdftk available
if [ ! -x "$pdftk" ] || [ ! -x "$pdfinfo" ]; then
    echo "$script: The PDF Toolkit and/or Poppler doesn't seem to be installed"
    echo "    (was looking for the [$pdftk] and [$pdfinfo] executables)"
    exit 2
fi

### Check our input is OK
INFILE="$1"
if [ ! -r "$INFILE" ]; then
    echo "$script: Failed to read [$INFILE]"
    exit 2
fi

OUTFILE="$2"
if [ "$OUTFILE" = "" ]; then
    echo "$script: Will overwrite [$INFILE] if processing is ok"
fi

timestamp=`date +"%Y%m%d-%H%M%S"`
tmpfile="/tmp/$script.$timestamp"

page_count=`$pdfinfo "$INFILE" | grep 'Pages:' | awk '{print $2}'`
page_count=$(( $page_count - 1 ))

### Do the deed!
$pdftk A="$INFILE" cat A1-$page_count output "$tmpfile"

### Was it good for you?
if [ $? -eq 0 ]; then
    echo "$script: PDF Toolkit says all is good"
    if [ "$OUTFILE" = "" ]; then
        echo "$script: Overwriting [$INFILE]"
        cp -f "$tmpfile" "$INFILE"
    else
        echo "$script: Creating [$OUTFILE]"
        cp -f "$tmpfile" "$OUTFILE"
    fi
fi


### Clean Up
if [ -f "$tmpfile" ]; then
    rm -f "$tmpfile"
fi
Run Code Online (Sandbox Code Playgroud)

  • 另请记住,您无需知道页数即可删除最后一页(至少对于 pdftk 1.45 及更高版本)。您可以使用“1-r2”来表示第一页到第二页到最后一页。请参阅“pdftk”文档,其中说明如下:您可以通过在页码前加上字母 r 来以相反的顺序引用页码。例如,r1页是文档的最后一页,r2是文档的倒数第二页,而rend是文档的第一页。您也可以在范围内使用此前缀,例如 r3-r1 是 PDF 的最后三页。 (2认同)