[Python, PyPDF2] Ein Skript, das ein verbreitetes PDF in zwei links und rechts unterteilt

Inhalt dieser Zeit

Dies ist ein Memo eines Skripts, das PyPDF2 verwendet, um eine PDF-Datei wie ein in einem Spread gescanntes Dokument in zwei Teile links und rechts zu unterteilen.

Quellcode

from PyPDF2 import PdfFileWriter, PdfFileReader
import copy


def split_pdf(input_pdf,  output_filename):
    pdf_file = PdfFileReader(open(input_pdf, 'rb'))
    marged = PdfFileWriter()
    page_num = pdf_file.getNumPages()

    for i in range(0, page_num):
        page_L = pdf_file.getPage(i)
        page_R = copy.copy(page_L)

        (w, h) = page_L.mediaBox.upperRight

        page_L.mediaBox.upperRight = (w/2, h)
        marged.addPage(page_L)

        page_R.mediaBox.upperLeft = (w/2, h)
        marged.addPage(page_R)

    outputStream = open(output_filename, "wb")
    marged.write(outputStream)
    outputStream.close()


def sample():
    input_pdf = "input.pdf"
    output_filename = "output.pdf"
    split_pdf(input_pdf, output_filename)


if __name__ == "__main__":
    sample()

Wie benutzt man

Teilen Sie für split_pdf () die PDF-Datei in zwei Teile, indem Sie die zu teilende PDF-Datei und den Dateinamen für die Ausgabe angeben.

Kurzer Kommentar

Bereiten Sie zwei Seiten vor, eine für die linke Seite und eine für die rechte Seite. (Seite_L, Seite_R)

Da die Seite unten links beginnt, werden Breite und Höhe aus den Koordinaten oben rechts ermittelt. (w, h)

Durch Angabe der Koordinaten auf der rechten Seite für die linke Seite und der Koordinaten auf der linken Seite für die rechte Seite wird jede auf dieser Grundlage geschnitten.

Dieses Mal wird die obere rechte Koordinate auf der linken Seite als (w / 2, h) und die obere linke Koordinate auf der rechten Seite als (w / 2, h) angegeben und links und rechts in zwei Teile unterteilt.

Es ist möglicherweise einfacher zu verstehen, wenn Sie für die richtige Seite "page_R.mediaBox.lowerLeft = (w / 2, 0)" festlegen.

Anwendungsbeispiel

Ich benutze es wie folgt. Schreiben Sie nur die Ergänzungen und Änderungen.

import sys, os

def main():
    argv = [sys.argv[i] for i in range(1,len(sys.argv))]
    for input_pdf in argv:
        basename_without_ext = os.path.splitext(os.path.basename(input_pdf))[0]
        output_filename = "split_{}.pdf".format(basename_without_ext)
        print("{}Ist zweigeteilt.".format(os.path.basename(input_pdf)))
        split_pdf(input_pdf, output_filename)
        

if __name__ == '__main__':
    main()

Holen Sie sich das Argument, drehen Sie es mit einer for-Anweisung um und übergeben Sie es an split_pdf. Der Name der Ausgabedatei ist der Name der Eingabedatei mit split_ am Anfang.

Was ich als Referenz verwendet habe

Teilen Sie das gescannte PDF des mittig gebundenen Materials in Seiten auf (Qiita: @hrb23m)

[So teilen Sie ein Spread-Scan-PDF mit Fehlausrichtung in zwei Seiten auf (Python, pypdf) (Sammlung technischer Memos)](https://www.robotech-note.com/entry/2018/04/28/ Fehlausrichtung der Mitte Teilen Sie das Spread-Scan-PDF in zwei Seiten.

Recommended Posts

[Python, PyPDF2] Ein Skript, das ein verbreitetes PDF in zwei links und rechts unterteilt
Ein Skript, das Ihre bevorzugten Python-Module und Binärdateien in einer einzigen Lambda-Ebene kombiniert
Eine Funktion, die iterable in Python in N Teile unterteilt
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Ein Python-Skript, das auf dem Mac erstellte ._DS_Store- und ._ * -Dateien löscht
Ein Python-Programm, das die Größe eines Videos ändert und es in ein Bild verwandelt
Python-Skript, das SQL-Dateien liest, BigQuery ausführt und CSV speichert
Erstellen Sie eine Web-App, die PDF mit Flask und PyPDF2 in Text konvertiert
Ein netter Nimporter, der Nim und Python verbindet
"Python Kit", das Python-Skripte von Swift aufruft
Ich habe in Python ein Tool erstellt, das mit der rechten Maustaste auf eine Excel-Datei klickt und diese für jedes Blatt in Dateien unterteilt.
Python-Skript, das das Azure-Status-RSS crawlt und an Hipchat sendet
Ein Python-Skript, das eine datierte CSV-Datei als Zeitpartitionstabelle in BigQuery importiert
Ein Skript, das mehrere Seiten einer PDF-Datei zu einer Seite ohne Ränder kombiniert
[Python] Ein Notizbuch, das die ipynb-Datei von GitHub ins Japanische übersetzt und herunterlädt.
Python, das viele Excel zu einem Excel zusammenführt
Shell-Skript zum Einfügen von Webmin in Alpine Linux
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?
Python-Programm, das ical-Daten in Text konvertiert
Ein Python-Skript, das ein GTK-Bild (Clipboard) in einer Datei speichert.
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Erstellen eines Python-Skripts, das die e-Stat-API unterstützt (Version 2)
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
So schreiben Sie eine Meta-Klasse, die sowohl Python2 als auch Python3 unterstützt
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
Ein Python-Skript, das Oracle-Datenbankdaten in CSV konvertiert
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
[Python] Eine Geschichte, die in eine Rundungsfalle zu geraten schien