So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)

Table of Contents

  1. [Einführung](# orga18657e)
  2. ReportLab PDF-Bibliothek (# org7441e75)
  3. [Combine ReportLab + pdfrw](# org2258be2)
  4. [Verwendung](# orgefcf672)
  5. [Anpassungsmethode](# orga183ab3)

Einführung

Die Tochter eines Grundschülers scannt die falschen Probleme in der Arithmetik und fügt sie in einem PDF zusammen. Ich wollte jedoch nur die erforderlichen Seiten drucken, aber die Seitenzahlen sind sehr unterschiedlich und ich muss sie viele Male wiederholen. Ich wollte es elektronisch machen, aber es ist überraschend analog. Daher wollte ich der PDF-Datei automatisch Seitenzahlen hinzufügen. Sie können verhindern, dass sich die Seitenzahl aufgrund eines menschlichen Fehlers verschiebt, oder Sie werden es sofort bemerken.

Obwohl ich Seiten in PDF nummerieren möchte, kann ich keinen überraschend guten Weg finden, dies zu tun. Als Ergebnis der Suche habe ich einige Webdienste gefunden und ausprobiert, aber einige mögen die Position zum Platzieren der Seite nicht, und einige werden berechnet, wenn viele Seitenzahlen (und ein monatliches Abonnement) vorhanden sind. Und so weiter.

Also habe ich versucht herauszufinden, ob PDFs mit Python, das seit kurzem verfügbar ist und sich gut anfühlt, seitennummeriert werden können, aber es scheint keine PDF-Bibliothek für diesen Anwendungsfall zu geben (zumindest für sich allein). Ich habe herausgefunden, dass.

Dieser Artikel wurde auch unter https://achiwa912.github.io/ veröffentlicht.

ReportLab PDF-Bibliothek

Die bekannteste PDF-Bibliothek in Python scheint PyPDF2 zu sein, pdfrw. Diese eignen sich gut zum Zusammenführen mehrerer PDF-Dateien, zum umgekehrten Teilen und zum Austauschen von Seiten. Sie scheinen jedoch den Anwendungsfall "Hinzufügen von Seitenzahlen zu vorhandenen PDF-Dateien" nicht zu unterstützen. ist.

Bei weiteren Untersuchungen stellte ich fest, dass die ReportLab-Bibliothek wahrscheinlich nummeriert werden konnte. https://www.blog.pythonlibrary.org/2013/08/12/reportlab-how-to-add-page-numbers/

Diese Webseite ist ein vielversprechender Titel, aber der Beispielcode wirft Fragen auf. Erstens scheint die vorhandene PDF-Datei nicht gelesen zu werden, und die Seitenzahl wird der neu erstellten PDF-Seite zugewiesen. Es ist nicht gut. .. ..

Ich werde auch das Handbuch durchlesen. https://www.reportlab.com/docs/reportlab-userguide.pdf

Auch hier gab es keine Erklärung für das Lesen einer vorhandenen PDF-Datei.

Kombinieren Sie ReportLab + pdfrw

Dennoch, als ich weiter suchte, ohne aufzugeben, fand ich es. https://stackoverflow.com/questions/28281108/reportlab-how-to-add-a-footer-to-a-pdf-file

Wie erwartet, Stapelüberlauf! Ich liebe es zusammen mit Qiita in Japan. Anscheinend heißt es, dass es möglich scheint, ReportLab und pdfrw zu kombinieren. Es gibt auch eine Beschreibung, die besorgniserregend ist. .. ..

DISCLAIMER: Tested on Linux using as input file a pdf file generated by Reportlab. It would probably not work in an arbitrary pdf file.

"Ich habe es mit einer mit ReportLab erstellten PDF-Datei getestet, aber ich denke, es funktioniert mit keiner PDF-Datei."

... Eh !! Aber das ist das einzige, worauf ich mich verlassen kann. Lass es uns versuchen.

Lassen Sie uns den Beispielcode auf der Seite stakoverflow ändern.

from reportlab.pdfgen.canvas import Canvas
from pdfrw import PdfReader
from pdfrw.toreportlab import makerl
from pdfrw.buildxobj import pagexobj
import sys
import os

if len(sys.argv) != 2 or ".pdf" not in sys.argv[1].lower():
    print(f"Usage: python {sys.argv[0]} <pdf filename>")
    sys.exit()
input_file = sys.argv[1]
output_file = os.path.splitext(sys.argv[1])[0] + "_pgn.pdf"

reader = PdfReader(input_file)
pages = [pagexobj(p) for p in reader.pages]

canvas = Canvas(output_file)

for page_num, page in enumerate(pages, start=1):
    canvas.doForm(makerl(canvas, page))

    footer_text = f"{page_num}/{len(pages)}"
    canvas.saveState()
    canvas.setStrokeColorRGB(0, 0, 0)
    canvas.setFont('Times-Roman', 14)
    canvas.drawString(290, 10, footer_text)
    canvas.restoreState()
    canvas.showPage()

canvas.save()

Und wenn ich es laufen lasse ... pdfpage.png Das ging schnell. Nur für den Fall, 7/88 am Ende der Seite steht die Seitenzahl, die ich in dieser Zeit eingegeben habe. Was war dieser Haftungsausschluss? .. ..

wie benutzt man

Da wir f-string verwenden, verwenden Sie es bitte mit Python 3.6 oder höher.

Installation der PDF-Bibliothek

pip install reportlab
pip install pdfrw

Speichern Sie den obigen Code als addpagenum.py. (Ändern Sie den Dateinamen nach Ihren Wünschen)

Lauf

python addpagenum.py <pdf_filename>

Die Seitenzahl ist A4 und wird in der unteren Mitte der Seite angezeigt.

So passen Sie an

Bitte ändern Sie diesen Bereich entsprechend.

footer_text = f"{page_num}/{len(pages)}"
canvas.setFont('Times-Roman', 14)
canvas.drawString(290, 10, footer_text)

Im Canvas von ReportLab befinden sich die Koordinaten (x = 0, y = 0) unten links auf der Seite. Wenn Sie einen anderen Buchstaben als A4 verwenden möchten, geben Sie ihn beim Erstellen eines Canvas-Objekts an. Weitere Informationen finden Sie im ReportLab-Handbuch.

Recommended Posts

So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
So erhalten Sie die Dateien im Ordner [Python]
Seitenzahl zu PDF hinzufügen
Wie man in Python entwickelt
So konvertieren Sie Gleitkommazahlen in Python in Binärzahlen
So laden Sie Dateien von Selenium of Python in Chrome herunter
[Python] Wie man PCA mit Python macht
Konvertieren Sie Markdown in Python in PDF
So sammeln Sie Bilder in Python
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
[Einführung in Python] Wie verwende ich eine Klasse in Python?
[Python] So zeigen Sie Zufallszahlen an (Zufallsmodul)
Dynamisches Definieren von Variablen in Python
So machen Sie R chartr () in Python
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
[Itertools.permutations] So löschen Sie eine Sequenz in Python
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
Wie bekomme ich Stacktrace in Python?
So zeigen Sie die neunundneunzig Tabelle in Python an
So extrahieren Sie einen Polygonbereich in Python
So überprüfen Sie die Version von opencv mit Python
So wechseln Sie die Python-Version in Cloud9
So passen Sie den Bildkontrast in Python an
Verwendung von __slots__ in der Python-Klasse
So füllen Sie mit Python dynamisch Nullen aus
So fügen Sie der Anaconda-Umgebung ein Python-Modul hinzu
Verwendung regulärer Ausdrücke in Python
So zeigen Sie Hello World in Python an
Lesen von CSV-Dateien mit Pandas
Verwendung ist und == in Python
Wie schreibe ich Ruby to_s in Python
[Python] Fügen Sie der Standardeingabedatei einen Kommentar hinzu
So setzen Sie in Python ein Leerzeichen mit halber Breite vor Buchstaben und Zahlen.
Verwendung der C-Bibliothek in Python
So empfangen Sie Befehlszeilenargumente in Python
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
[REAPER] Wie man Reascript mit Python spielt
So löschen Sie einen Taple in einer Liste (Python)
So generieren Sie eine Sequenz in Python und C ++
Einbetten von Variablen in Python-Strings
Verwendung der Python-Bildbibliothek in der Python3-Serie
So erstellen Sie eine JSON-Datei in Python
Zusammenfassung der Verwendung von MNIST mit Python
So fügen Sie einen Suchpfad für Python-Module hinzu
So geben Sie die TLS-Version in Python-Anforderungen an
So überprüfen / extrahieren Sie Dateien im RPM-Paket
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
So benachrichtigen Sie Discord-Kanäle in Python
Wie man tkinter mit Python in Pyenv benutzt
So führen Sie LeapMotion mit Nicht-Apple Python aus
Stapelkonvertierung von PSD-Dateien im Verzeichnis in PDF
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
So geben Sie "Ketsumaimo" standardmäßig in Python aus