Table of Contents
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.
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.
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 ... 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? .. ..
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.
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