[PYTHON] Ein Skript, das mehrere Seiten einer PDF-Datei zu einer Seite ohne Ränder kombiniert

Motivation

Als Methode (2up, 4up, ... n-up) zum Kombinieren mehrerer PDF-Seiten zu einer Seite, z. B. "Vorschau" von macOS usw. ** "Datei" -> "Drucken ..." -> Wählen Sie die Anzahl der Seiten / Blätter auf der Registerkarte "Layout" -> "Als PDF speichern" ** Die Methode kann erwähnt werden. Ich konnte jedoch keinen Weg finden, um die Lücke zwischen den Seiten zu vermeiden, die mit dieser Methode zusammengestellt wurden.

Die erste und zweite Seite sind jeweils 元ファイル1ページ目 元ファイル2ページ目 Wenn Sie versuchen, eine PDF-Datei zu erstellen, die Elemente wie oben gezeigt bis zum Rand der Seite enthält, macOSのプリント機能でまーじした場合 Es ist ersichtlich, dass der Rand wie in eingestellt eingestellt ist und zwischen den Seiten eine Lücke besteht. l Dies ist etwas enttäuschend für die Ausgabe, z. B. um ein großes Stück Papier aufzuteilen und gescannte PDF-Dateien wieder auf einer Seite zu kombinieren. Ich denke, es gibt eine Möglichkeit, einmal in das "Postscript" -Format zu konvertieren und das alte "psnup" zu verwenden, aber ich denke, dass es aufgrund von Mehrbyte-Zeichen, Schriftarten und Formatkonvertierung problematisch sein kann. Behandeln Sie also PDF. Ich habe beschlossen, ein Konvertierungsskript in einer neueren Skriptsprache zu schreiben, in der wahrscheinlich eine Bibliothek vorhanden ist.

Spezifikation

Nach ein wenig Recherche scheint es eine Bibliothek namens PyPDF2 für Python zu geben, also habe ich beschlossen, sie mit Python zu implementieren. Als Spezifikation können die wichtigsten Dinge, die auf der Registerkarte Layout des Druckmenüs von macOS geändert werden können, als Befehlszeilenoptionen ausgewählt werden.

Implementierung

Der Speicherort der Datei ist wie folgt.

Ausführungsbeispiel

Ein Beispiel für die Gruppierung von Seiten in 2 Zeilen und 3 Spalten.

% ./pdf_merge_multipages.py -o merge_test.pdf -c 3 -l 2 test_samples/input_landsc
ape_1.pdf test_samples/input_portleit_1.pdf

Detaillierte Nutzung etc.

Betriebsanforderungen

Wie benutzt man

usage: pdf_merge_multipages.py [-h] [-output filename] [-columns n_h] [-lines n_v] [-page-order opt]
                               [-rotation opt] [-valign opt] [-align opt] [-metainfo opt] [-title text]
                               input-file [input-file ...]

Merge multiple mages in PDF files w/o gap.

positional arguments:
  input-file        Input PDF file(s)

optional arguments:
  -h, --help        show this help message and exit
  -output filename  Output file
  -columns n_h      # of columns of merged pages (default = 2)
  -lines n_v        # of lines of merged pages (default = 1)
  -page-order opt   Page order (choices=left2right[default], left2bottom, right2left, right2bottom)
  -rotation opt     Page orientation (choices=none[default], flip, right, left, auto, rauto)
  -valign opt       Page fitting (choices=resize, none[default], top, bottom, center, fit)
  -align opt        Page fitting (choices=resize, none[default], right, left, center, fit)
  -metainfo opt     Meta data for marged file (choices=full[default], none, partial, short)
  -title text       set title in meta data for marged file (Default: output file name)

Optionale Argumente

---output filename: Der Name der Ausgabedatei. Wenn nicht angegeben, lautet der Standardwert "a.out.pdf" ---Spalten nh, -lines n_v: Layoutspezifikation: Platzieren Sie die Seite der eingegebenen PDF-Datei in horizontalen n_h Spalten x vertikalen n_v Zeilen. Wenn nicht angegeben, ist der Standardwert 2x1 ("2up") ---page-order option: Geben Sie die Reihenfolge an, in der die Seiten angeordnet sind. --left2right: Platziere die erste Seite der Eingabedatei oben links. Die Seiten, die auf die Eingabedatei folgen, sind nacheinander rechts angeordnet. Wenn sie das rechte Ende erreichen, werden sie nacheinander vom linken Ende der Spalte direkt unter oder von links oben rechts auf der nächsten Seite angeordnet. (Standard) --left2bottom: Platziere die erste Seite der Eingabedatei oben links. Die Seiten, die auf die Eingabedatei folgen, sind in der Reihenfolge von unten angeordnet, und wenn sie unten erreicht sind, sind sie vom oberen Rand der Spalte rechts oder von oben links bis zum unteren Rand der nächsten Seite angeordnet. --left2top: Platziere die erste Seite der Eingabedatei unten links. Die Seiten, die auf die Eingabedatei folgen, sind in der Reihenfolge von oben angeordnet. Wenn Sie oben angekommen sind, werden sie vom unteren Rand der Spalte nach rechts oder von links unten nach oben auf der nächsten Seite platziert. --right2left: Platziere die erste Seite der Eingabedatei oben rechts. Die Seiten, die auf die Eingabedatei folgen, sind nacheinander links angeordnet. Wenn sie das linke Ende erreichen, werden sie nacheinander vom rechten Ende der Spalte direkt unter oder von rechts oben links auf der nächsten Seite angeordnet. --right2bottom: Platziere die erste Seite der Eingabedatei oben rechts. Ordnen Sie die Seiten, die der Eingabedatei folgen, in der Reihenfolge von unten an. Wenn Sie unten angekommen sind, platzieren Sie sie oben in der Spalte links oder oben rechts unten in der nächsten Seite. --right2top: Platziere die erste Seite der Eingabedatei unten rechts. Die Seiten, die auf die Eingabedatei folgen, sind in der Reihenfolge von oben angeordnet. Wenn Sie oben angekommen sind, werden sie vom unteren Rand der Spalte nach links oder vom unteren rechten zum oberen Rand der nächsten Seite platziert. ---Rotationsoption: Seitenrotation --none: Drehen Sie nicht jede Seite der zu platzierenden Eingabedatei. (Standard) --flip: Blättere jede Seite der Eingabedatei um, die auf den Kopf gestellt werden soll. --right: Drehen Sie jede Seite der platzierten Eingabedatei um 90 Grad nach rechts. --left: Drehen Sie jede Seite der platzierten Eingabedatei um 90 Grad nach links. -- auto: Wenn jede Seite der Eingabedatei oben auf der Ausgabeseite vertikal (horizontal) platziert wird, wird jede Seite der anderen Eingabedatei, die auf derselben Seite der Ausgabedatei platziert ist, horizontal (vertikal) platziert. ), Drehe es um 90 Grad nach links, sonst dreht es sich nicht. -- rauto: Wenn die Seite der Eingabedatei oben auf der Ausgabeseite vertikal (horizontal) platziert wird, wird jede Seite der anderen Eingabedatei, die auf derselben Seite der Ausgabedatei platziert ist, horizontal (vertikal) platziert. Drehen Sie es im Fall von um 90 Grad nach rechts und platzieren Sie es, wenn nicht, ohne es zu drehen. ---valign opttion: Geben Sie die vertikale Positionseinstellung der zu platzierenden Seite an --none, bottom: Untere Ausrichtung (Standard)

-- Option ausrichten: Festlegen der horizontalen Positionseinstellung der zu platzierenden Seite --none, left: Rechtsbündig (Standard) --center: Ausrichtung links und rechts in der Mitte

Recommended Posts

Ein Skript, das mehrere Seiten einer PDF-Datei zu einer Seite ohne Ränder kombiniert
Python, das viele Excel zu einem Excel zusammenführt
Ein Skript, das Ränder kombiniert, wenn mehrere Diagramme mit Gnuplot auf Kacheln eingefügt werden
Ein Skript, das Ihre bevorzugten Python-Module und Binärdateien in einer einzigen Lambda-Ebene kombiniert
Kombinieren Sie mehrere Python-Dateien zu einer Python-Datei
[Python, PyPDF2] Ein Skript, das ein verbreitetes PDF in zwei links und rechts unterteilt
[Python & Unix] Kombinieren Sie mehrere PDF-Dateien zu einer.
Erstellen Sie eine PDF-Datei mit einer zufälligen Seitengröße
Konvertieren Sie mehrere JPG-Dateien in eine PDF-Datei
Ein Hinweis, der einen Job in Python implementiert, der eine GCS-Datei in BigQuery lädt
Kombinieren Sie mehrere CSV-Dateien mit Python zu einer CSV-Datei (vorausgesetzt, nur eine Kopfzeile)
Ein Skript, das eine Momentaufnahme eines EBS-Volumes erstellt
Shell-Skript zum Einfügen von Webmin in Alpine Linux
Ein Skript, das eine Liste der Benutzer des SoftLayer-Portals ausgibt