Wie extrahiere und / oder entferne ich die letzte Seite einer Reihe von PDFs?

14

Einer unserer Anbieter hat begonnen, ein unnötig großes Bild auf die letzte Seite der PDF-Dateien zu kleben, die wir von ihnen erhalten. Ich muss das abschneiden. Wir haben jedoch Hunderte davon, daher ist es unerschwinglich, manuell einzusteigen. Was sind die besten Möglichkeiten, um die letzte Seite einer PDF-Datei automatisch zu extrahieren und dann zu löschen (vorzugsweise zuerst eine, dann die andere; ich muss noch über die Dateigröße bestätigen, dass ich keine lösche, die kein Bild enthält)? Betriebssystem ist Linux.

Ich kann es mit Ghostscript extrahieren, mit etwas in der Art von gs -dFirstPage=5 -dLastPage=5, aber ich muss dies automatisieren, ich kann nicht durchgehen und manuell herausfinden, wie die Nummer der letzten Seite ist.

Irgendwelche Ideen?

Bearbeiten: Zur Verdeutlichung möchte ich einfach die letzte Seite aufteilen / löschen. Nicht das Bild darin, sondern den letzten Seitenzeitraum herausschneiden.

Andrew
quelle
1
Schauen Sie sich an pdftk- ich bin mir sicher, dass es allgemein möglich ist, für diese Art von Aufgabe zu arbeiten.
Daniel Andersson
Mögliches Duplikat: Unix: PDF in Bild konvertieren
ahilsend
2
Kein Duplikat davon.
Andrew
Ich habe jedoch das Gefühl, ich sollte klarstellen: Ich bin nicht daran interessiert, ein Bild auf der letzten Seite zu entfernen. Ich bin daran interessiert, die letzte Seite zu entfernen, Punkt.
Andrew
1
Verwandte Frage mit mehreren unterschiedlichen Antworten auf Ask Ubuntu: askubuntu.com/questions/221962/…
TuringTux

Antworten:

2

Wie @Daniel Andersson bereits kommentierte, kann dies leicht gemacht werden mit pdftk:

pdftk input.pdf cat end-1 output temp.pdf
pdftk temp.pdf  cat end-2 output output.pdf
rm temp.pdf

Ich weiß nicht, ob es mit einem Aufruf von pdftk möglich ist ...

Bearbeiten : Sie können es mit Thanosks Antwort kombinieren und verwenden (in Bash):

pdftk input.pdf cat 1-$((last-1)) output output.pdf

wenn Sie bereits die letzte Seite in die Variable extrahiert haben $last.

Jaap Eldering
quelle
Beispiel funktioniert nicht. Ich habe die Antwort von @Sid Steward gefunden, um besser zu funktionieren.
Reado
14

Um die Antwort von @ Eldering weiter zu verbessern, können pdftk Version 1.45 und höher Seiten in umgekehrter Reihenfolge referenzieren, indem der Kleinbuchstabe r der Seitenzahl vorangestellt wird. Die letzte Seite in einem PDF ist r1, die vorletzte Seite ist r2 usw.

Zum Beispiel der einzelne pdftk-Aufruf:

pdftk input.pdf cat 1-r2 output output.pdf

löscht die letzte Seite aus input.pdf - die Eingabe sollte mindestens zwei Seiten lang sein.

Führen Sie Folgendes aus, um nur die letzte Seite einer PDF-Datei zu extrahieren und ihre Dateigröße zu testen:

pdftk input.pdf cat r1 output final_page.pdf

Pdftk ist unter Linux verfügbar. Viele Distributionen haben eine Binärdatei, die Sie installieren können. Sie sollten jedoch sicherstellen, dass es sich um Version 1.45 oder höher handelt. Wenn nicht, können Sie pdftk aus dem Quellcode erstellen.

Sid Steward
quelle
Das rN-Ding ist genau das, was ich brauchte, da mein latexbasiertes PDF-Generierungssystem am Anfang immer einige leere Seiten produzierte und fast am Ende des Dokuments musste ich sie am Ende manuell entfernen. Jetzt rufe ich einfach an: pdftk A =pocket20.pdf cat A3-r6 r3-end outputpocket_to_print.pdf, wodurch die ersten beiden und die 4., 5., letzten Seiten entfernt werden.
Martin T.
1

pdfinfo gibt Ihnen die Größe der tatsächlichen PDF-Datei an, und pdfimages gibt Ihnen einen Index der Bilder in dieser PDF-Datei. So können Sie ein Skript in das Formular schreiben

#!/bin/bash
for i in *.pdf
do
        j=$(pdfinfo "$i" |awk '/^Pages/ { print $2}')
        pdfimages -list -p -f "$j" "$i"
done

Das sollte zurückgegeben werden, wenn eine bestimmte Datei ein Bild auf der letzten Seite hat. Wenn dies der Fall ist, können Sie alle erforderlichen Manipulationen vornehmen.

thanosk
quelle
0

Hier ist eine Lösung mit pdfjam anstelle von pdftk:

#!/bin/sh
fname=`basename $1`
pdfjam $1 1-$((`pdfinfo $1 | grep Pages | grep -shoPe '\d+'` - ${2:-1})) -o ${fname%.*}-trimmed.pdf

Wobei das erste Argument die zu trimmende Datei und das zweite Argument die Anzahl der zu schneidenden Seiten ist (standardmäßig 1).

Alex
quelle
0

Eine einzeiler Lösung wäre die Verwendung findzusammen pdftk:

find . -name "*.pdf" -exec pdftk {} cat 1-r2 output cut/{} \;

HINWEIS : Die zugeschnittenen Dateien werden in diesem Beispiel in einem Unterverzeichnis gespeichert cut, das aufgerufen wird , um den ursprünglichen Dateinamen beizubehalten, da pdftkdas Überschreiben von Eingabedateien nicht möglich ist.

Yan Foto
quelle