【发布时间】:2013-07-16 08:54:35
【问题描述】:
谁能告诉我如何使用 PDFtk 删除 PDF 文件的最后一页?
【问题讨论】:
谁能告诉我如何使用 PDFtk 删除 PDF 文件的最后一页?
【问题讨论】:
这将创建outfile.pdf,除了infile.pdf中的最后一页之外的所有页面
pdftk infile.pdf cat 1-r2 output outfile.pdf
参数说明
infile.pdf是原始pdf文件cat是操作1-r2 是页面范围
您可以通过在页码前面加上字母 r 来以相反的顺序引用页码。例如,page r1 是文档的最后一页,r2 是文档的倒数第二页,rend 是文档的第一页。您也可以在范围内使用此前缀,例如 r3-r1 是 PDF 的最后三页。
output 会将其输出到特定文件中output.pdf 是输出的pdf文件【讨论】:
1-r3 只删除最后两页。
您需要找出页数,然后将其与 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"
显然,添加参数、错误检查等也可以放在所述脚本中:
#! /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
【讨论】:
pdfinfo,pdftk 用dump_data 子命令提供页数:它产生一行NumberOfPages: 8
1-r2 指示从第一页到倒数第二页。请参阅pdftk 文档,其中包含以下内容:您可以通过在页码前面加上字母 r 来以相反的顺序引用页码。例如,page r1 是文档的最后一页,r2 是文档的倒数第二页,rend 是文档的第一页。您也可以在范围内使用此前缀,例如 r3-r1 是 PDF 的最后三页。
【讨论】: