2013-07-17 19 views

risposta

51

Utilizzo dell'operazione cat e specifica di un intervallo di pagine.

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

Se si desidera rimuovere più di una pagina, è possibile modificare l'intervallo, ad esempio '1-r3' fa tutto ma le ultime due pagine. – mlissner

5

Hai bisogno di trovare il numero di pagine, quindi utilizzare questo con la funzione pdftk gatto, dal momento che (AFAICT) pdftk non permette di specificare un "offset da ultimo".

Uno strumento come "pdfinfo" di Poppler (http://poppler.freedesktop.org/) può fornire questo.

Avvolgendo questo in un po 'di scripting bash può facilmente automatizzare questo processo:

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

parametri Ovviamente aggiunta, il controllo degli errori, e ciò, non potrebbe anche essere disposto in detto script:

#! /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

Questo comando awk potrebbe essere modificato per eseguire il decremento, semplificando in qualche modo lo script: grep Pages | awk '{printf ("% d", $ 2 - 1); } 'Questo rende $ (($ page_count - 1)) ridondante. – Kingsley

+0

Non c'è bisogno di 'pdfinfo', in realtà,' pdftk' fornisce il numero di pagine con il sottocomando 'dump_data': produce una riga' NumberOfPages: 8' – kebs

+1

Ricorda anche che non è necessario conoscere la pagina contare per rimuovere l'ultima pagina (almeno per le versioni di pdftk 1.45 e successive). Puoi usare '1-r2' per indicare la prima e la penultima pagina. Vedere la documentazione di 'pdftk' che dice quanto segue: È possibile fare riferimento ai numeri di pagina in ordine inverso facendoli precedere dalla lettera r. Ad esempio, la pagina r1 è l'ultima pagina del documento, r2 è la penultima pagina del documento e rend è la prima pagina del documento. È possibile utilizzare questo prefisso anche negli intervalli, ad esempio r3-r1 sono le ultime tre pagine di un PDF. – Six

3

Con cpdf, è possibile fare riferimento a una pagina di quanto è distante dalla fine del documento, utilizzando una tilde, nonché l'inizio.

Quindi, possiamo fare

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

Grazie per aver creato questo strumento. Funziona come una magia. L'unica cosa che vorrei: del file di output non è specificato, il file "in.pdf" viene rinominato automaticamente (come, ad esempio, "in_1--2.pdf") – lanenok

+0

Voglio anche ribadire quale pezzo incredibile di kit questo è! È eccezionalmente facile tagliare la prima o l'ultima pagina (o qualsiasi altra cosa). Anche la distribuzione del software è la perfezione, che consiste in un singolo binario statico (per Linux 32, Linux 64, OSX e Windows). Include anche un'ottima documentazione PDF. Sono sorpreso di non aver mai visto il software prima, forse perché non è open source (solo per uso non commerciale da quello che ho capito). – Six

Problemi correlati