web-dev-qa-db-fra.com

Supprimer la dernière page d'un fichier pdf à l'aide de PDFtk?

Quelqu'un peut-il me dire comment supprimer la dernière page d'un fichier PDF, en utilisant PDFtk?

42
user1974753

Utilisation de l'opération cat et spécification d'une plage de pages.

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

Vous devez connaître le nombre de pages, puis l'utiliser avec la fonction pdftk cat, car (AFAICT) pdftk ne permet pas de spécifier un "décalage par rapport au dernier".

Un outil comme 'pdfinfo' de Poppler ( http://poppler.freedesktop.org/ ) peut fournir cela.

Envelopper cela dans un peu de script bash peut facilement automatiser ce processus:

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

De toute évidence, l'ajout de paramètres, la vérification des erreurs et ce qui pourrait ne pas être également placé dans ledit 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
5
Kingsley

Avec cpdf , vous pouvez référencer une page par la distance qui la sépare de la fin du document, en utilisant un tilde, ainsi que le début.

Donc on peut faire

cpdf in.pdf 1-~2 -o out.pdf
3
johnwhitington