Qualcuno può dirmi come rimuovere l'ultima pagina di un file PDF, utilizzando PDFtk?Rimuovere l'ultima pagina di un file pdf usando PDFtk?
risposta
Utilizzo dell'operazione cat
e specifica di un intervallo di pagine.
pdftk infile.pdf cat 1-r2 output outfile.pdf
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
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
Non c'è bisogno di 'pdfinfo', in realtà,' pdftk' fornisce il numero di pagine con il sottocomando 'dump_data': produce una riga' NumberOfPages: 8' – kebs
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
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
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
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
Se si desidera rimuovere più di una pagina, è possibile modificare l'intervallo, ad esempio '1-r3' fa tutto ma le ultime due pagine. – mlissner