2013-07-17 27 views

答えて

51

cat操作を使用し、ページ範囲を指定します。

pdftk infile.pdf cat 1-r2 output outfile.pdf 
+1

を行うことができ、例えば、 '1-r3'は、すべての最後の2つのページに過ぎません。 – mlissner

5

あなたは(AFAICT)pdftkは1が「最後からのオフセット」を指定することはできないので、pdftkの猫の機能でこれを使用し、その後、ページ数を確認する必要があります。

Popplerの「pdfinfo」(http://poppler.freedesktop.org/)のようなツールでこれを実現できます。

簡単にこのプロセスを自動化することができますの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 
+0

awkコマンドを使ってデクリメントを行うことができますが、スクリプトをいくらか簡略化することができます:grep Pages | awk '{printf( "%d"、$ 2 - 1); } 'これは$(($ page_count - 1))を冗長にします。 – Kingsley

+0

'pdfinfo'は実際には必要ありません。' pdftk'は 'dump_data'サブコマンドのページ数を提供します:' NumberOfPages:8'という行を生成します。 – kebs

+1

また、ページを知る必要はありません最後のページを削除するためにカウントします(少なくともpdftkバージョン1.45以上の場合)。 '1-r2'を使って、1ページ目から2ページ目までを指定できます。 'pdftk'の次の文書を参照してください。ページ番号は、文字の先頭にrを付けて逆順に参照できます。例えば、ページr1は文書の最後のページであり、r2は文書の最後のページの最後であり、rendは文書の最初のページである。このプレフィックスは範囲内でも使用できます。たとえば、r3-r1はPDFの最後の3ページです。 – Six

3

cpdfを使用すると、チルダを使用してドキュメントの終わりからどれだけ離れているか、先頭を参照できます。

あなたが複数のページを削除したい場合は、範囲を変更することができますので、我々は

cpdf in.pdf 1-~2 -o out.pdf 
+0

このようなツールを作成していただきありがとうございます。マジックのように動作します。私が望む唯一のもの:出力ファイルの "in.pdf"ファイルは自動的に改名されます(例えば、 "in_1--2.pdf"のように) – lanenok

+0

私はまた、これはキットです!最初または最後のいくつかのページ(または他のもの)をトリミングすることは非常に簡単です。ソフトウェアの配布さえ完璧です。これは、単一の静的バイナリ(Linux 32、Linux 64、OSX、およびWindowsの場合)で構成されています。これには素晴らしいPDF文書も含まれています。私は前にソフトウェアに遭遇したことがないことに驚いています。おそらくオープンソースではないからです(私が理解しているものから非営利目的でのみ無料です)。 – Six

関連する問題