GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Seiten einer PDF-Datei in mehrere Seiten zerlegen

Sie können dies mit Hilfe von Ghostscript lösen. pdftk allein kann das (meines Wissens nach) nicht. Ich gebe Ihnen die Befehlszeilenschritte, um dies manuell zu tun. Es wird einfach sein, dies als Prozedur zu skripten, auch mit unterschiedlichen Parametern für Seitengrößen und Seitenzahlen. Aber du hast gesagt, dass du das selbst kannst;-)

So lösen Sie das mit Hilfe von Ghostscript...

... und zum Spaß habe ich es kürzlich nicht gemacht mit einer Eingabedatei mit "double-up"-Seiten, aber einer mit "treble-ups". Die Antwort für diesen Fall können Sie hier lesen .

Ihr Fall ist noch einfacher. Sie scheinen etwas Ähnliches zu haben:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

Sie möchten 1 PDF mit 4 Seiten erstellen, die jeweils die Größe von 421 pt x 595 pt haben.

Erster Schritt

Lassen Sie uns zuerst die linken Abschnitte aus jeder der Eingabeseiten extrahieren:

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

Was haben diese Parameter bewirkt?

Beachten Sie zunächst, dass in PDF 1 Zoll ==72 Punkte . Dann ist der Rest:

  • -o ...............: Benennt die Ausgabedatei. Verwendet implizit auch -dBATCH -dNOPAUSE -dSAFER .
  • -sDEVICE=pdfwrite : wir wollen PDF als Ausgabeformat.
  • -g................: legt die Größe des Ausgabemediums in Pixel fest. Die Standardauflösung von pdfwrite beträgt 720 dpi. Multiplizieren Sie daher mit 10, um eine Übereinstimmung für PageOffset zu erhalten.
  • -c "..............: fordert Ghostscript auf, das angegebene PostScript-Code-Snippet direkt vor der Haupteingabedatei zu verarbeiten (auf die -f folgen muss ).
  • <</PageOffset ....: legt die Verschiebung des Seitenbildes auf dem Medium fest. (Natürlich gilt für linke Seiten die Verschiebung um [0 0] hat keine wirkliche Wirkung.)
  • -f ...............: diese Eingabedatei verarbeiten.

Welches Ergebnis hat der letzte Befehl erzielt?

Dieses hier:

Output file: left-sections.pdf, page 1
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: left-sections.pdf, page 2
+------------+  ^
|            |  |
|     3      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

Zweiter Schritt

Als nächstes die richtigen Abschnitte:

gs \
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

Beachten Sie den negativen Versatz, da wir die Seite nach links verschieben, während der Anzeigebereich stationär bleibt.

Ergebnis:

Output file: right-sections.pdf, page 1
+------------+  ^
|            |  |
|     2      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

Output file: right-sections.pdf, page 2
+------------+  ^
|            |  |
|     4      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v
<-- 421 pt -->

Letzter Schritt

Nun fassen wir die Seiten zu einer Datei zusammen. Wir könnten das auch mit Ghostscript machen, aber wir verwenden pdftk stattdessen, weil es für diesen Job schneller ist:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle \
  output single-pages-output.pdf
  verbose

Fertig. Hier ist das gewünschte Ergebnis. 4 verschiedene Seiten, Größe 421x595 pt.

Ergebnis:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            |5595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->

Es gibt ein Tool pdfposter, mit dem PDFs mit mehreren Seiten für eine Eingabeseite erstellt werden können (Kacheln oder Zerschneiden der Seiten). Es ähnelt dem Tool poster , was dasselbe für PostScript-Dateien macht.


Also, nach viel mehr Suche (es scheint, dass "PDF-Schnittseiten" eine viel bessere Suche ist), habe ich ein kleines Skript namens unpnup gefunden die poster verwendet , PDF/PS-Konvertierung und pdftk um genau das zu tun, was ich brauche. Es ist ein bisschen umständlich, aber es ist den anderen Methoden, die ich gefunden habe (wie die Verwendung von imagemagick), weit überlegen, weil es die Seiten nicht rastert, bevor es sie ausspuckt.

Für den Fall, dass mobileread aus irgendeinem Grund verschwindet, ist der Kern des Skripts (lizenziert unter der GPLv2 oder später von Harald Hackenberg <hackenberggmx.at> ) lautet wie folgt:

pdftk "$1" burst
for file in pg*.pdf;
do
    pdftops -eps $file
    poster -v -pA4 -mA5 -c0% `basename $file .pdf`.eps > `basename $file .pdf`.tps
    epstopdf `basename $file .pdf`.tps
done
pdftk pg*.pdf cat output ../`basename $1 .pdf`_unpnuped.pdf

Linux
  1. So teilen Sie eine einzelne Datei basierend auf Zeilen in mehrere Dateien auf

  2. Vim:Wie öffnet man mehrere Dateien in verschiedenen Registerkarten?

  3. Wie komprimiert man mehrere Dateien in ein .xz-Archiv?

  4. Mehrere PDF-Dateien in ein PDF zusammenführen / konvertieren

  5. Wie erstellt man ein tar-Archiv, das in mehrere Dateien aufgeteilt ist oder sich über mehrere Dateien erstreckt?

So verbinden Sie mehrere Zeilen in einer Datei in Linux zu einer

So führen Sie unter Linux mehrere PDF-Dateien zu einem PDF zusammen

So verbinden/verschmelzen Sie mehrere Audiodateien zu einer in Linux

So verbinden Sie mehrere PDF-Seiten zu einer einzigen Seite

Wie drucke ich eine große Seite auf mehrere kleinere Seiten?

Linux-Lese-Swap zurück in den Speicher machen