So arbeiten Sie mit PDF-Dokumenten mit Python

Ich bewundere wirklich PDF-Dateien (Portable Document Format). Ich erinnere mich an die Zeiten, als solche Dateien Formatierungsprobleme beim Austausch von Dateien aufgrund von Unterschieden in Word-Versionen oder aus anderen Gründen lösten.

Wir reden hier hauptsächlich über Python, oder? Wir sind daran interessiert, dies mit der Arbeit mit PDF-Dokumenten zu verbinden. Nun, Sie können sagen, das ist so einfach, vor allem, wenn Sie Python bereits mit Textdateien (TXT) verwendet haben. Aber hier ist es ein bisschen anders. PDF-Dokumente sind binäre Dateien und komplexer als nur Klartextdateien, zumal sie unterschiedliche Schriftarten, Farben usw. enthalten.

Das bedeutet nicht, dass es schwierig ist, mit PDF-Dokumenten mit Python zu arbeiten, es ist ziemlich einfach und die Verwendung eines externen Moduls löst das Problem.

PyPDF2

Wie oben erwähnt, wäre die Verwendung eines externen Moduls der Schlüssel. Das Modul, das wir in diesem Tutorial verwenden werden, ist PyPDF2. Da es sich um ein externes Modul handelt, ist der erste normale Schritt, den wir machen müssen Installieren dieses Modul. Dafür verwenden wir pip, das (basierend auf Wikipedia):

Ein Paketverwaltungssystem zum Installieren und Verwalten von in Python geschriebenen Softwarepaketen. Viele Pakete sind im Python Package Index (PyPI) zu finden..

Für die Installation können Sie die im Python Packaging User Guide genannten Schritte ausführen Pip, aber wenn du hast Python 2.7.9 und höher oder Python 3.4 und höher hast du schon Pip!

PyPDF2 Jetzt kann einfach installiert werden, indem Sie den folgenden Befehl eingeben (im Mac OS X-Terminal):

pip install pypdf2

Großartig! Du hast jetzt PyPDF2 installiert, und Sie können mit dem Abspielen von PDF-Dokumenten beginnen.

Ein PDF-Dokument lesen

Die Beispieldatei, mit der wir in diesem Lernprogramm arbeiten werden, ist sample.pdf. Laden Sie die Datei herunter, um dem Tutorial zu folgen, oder verwenden Sie einfach eine beliebige PDF-Datei.

Lassen Sie uns jetzt das PDF-Dokument lesen. Da werden wir verwenden PyPDF2, Wir müssen das Modul wie folgt importieren:

Importieren Sie pypdf2

Nach dem Importieren des Moduls verwenden wir die PdfFileReader-Klasse. Das Skript zum Lesen des PDF-Dokuments sieht also folgendermaßen aus:

import PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file)

Weitere Vorgänge für PDF-Dokumente

Nach dem Lesen des PDF-Dokuments können wir nun verschiedene Vorgänge an dem Dokument ausführen, wie wir in diesem Abschnitt sehen werden.

Seitenzahl

Sehen wir uns die Anzahl der Seiten in sample.pdf an. Dazu können wir die getNumPages () -Methode verwenden:

number_of_pages = read_pdf.getNumPages () druckt number_of_pages

In diesem Fall lautet der zurückgegebene Wert 1.

Seitennummer

Lassen Sie uns nun die Anzahl einiger Seiten im PDF-Dokument überprüfen. Wir können die Methode verwenden getPageNumber (Seite), Beachten Sie, dass wir ein Objekt vom Typ übergeben müssen Seite auf die Methode. Abrufen einer Seite, wir werden die verwenden getPage (Nummer) Methode, wo Nummer repräsentiert die Seitennummer im PDF-Dokument. Das Argument Nummer beginnt mit dem Wert 0.

Nun, ich weiß wann du verwendest getPage (Nummer) Sie kennen die Seitennummer bereits, aber dies soll nur veranschaulichen, wie diese Methoden zusammen verwendet werden. Dies kann im folgenden Skript demonstriert werden:

page = read_pdf.getPage (0) page_number = read_pdf.getPageNumber (page) Druckt die Seitennummer

Probieren Sie das Skript aus. Welche Ausgabe hast du bekommen??

Wir wissen das in sample.pdf (die Datei, mit der wir experimentieren), wir haben nur eine Seite (Nummer 0). Was ist, wenn wir die Nummer übergeben haben 1 als Seitennummer an getPage (Nummer)? In diesem Fall erhalten Sie folgende Fehlermeldung:

Traceback (letzter Aufruf zuletzt): Datei "test.py", Zeile 6, in  page = read_pdf.getPage (1) Datei "/usr/local/lib/python2.7/site-packages/PyPDF2/pdf.py", Zeile 1158, in getPage return self.flattenedPages [pageNumber] IndexError: list index from from Angebot

Dies ist darauf zurückzuführen, dass die Seite nicht verfügbar ist und wir eine Seitennummer außerhalb des gültigen Bereichs verwenden (nicht vorhanden)..

Seitenmodus

Die PDF-Seite verfügt über verschiedene Modi, die wie folgt aussehen:

/ UseNone Keine Umrisse oder Miniaturansichten anzeigen
/ UseOutlines
Anzeige der Konturen (auch als Lesezeichen bezeichnet)
/ UseThumbs
Seitenminiaturfenster anzeigen
/Vollbildschirm
Vollbildansicht
/ UseOC
Feld "Optionale Inhaltsgruppe" (OCG) anzeigen
/ UseAttachments
Anhangsfenster anzeigen

Um unseren Seitenmodus zu überprüfen, können wir das folgende Skript verwenden:

page = read_pdf.getPage (0) page_mode = read_pdf.getPageMode () druckt page_mode

Im Falle unseres PDF-Dokuments (sample.pdf) ist der zurückgegebene Wert keiner, was bedeutet, dass der Seitenmodus nicht angegeben ist. Wenn Sie einen Seitenmodus angeben möchten, können Sie die Methode verwenden setPageMode (Modus), woher Modus ist einer der in der obigen Tabelle aufgeführten Modi.

Text extrahieren

Wir sind bisher in der Akte herumgewandert, also sehen wir mal, was drin ist. Die Methode extractText () wird unser Freund in dieser Aufgabe sein.

Lassen Sie mich Ihnen das vollständige Skript dafür zeigen, im Gegensatz zu dem, was ich oben tat, um Ihnen nur das erforderliche Skript für eine Operation zu zeigen. Das Skript zum Extrahieren eines Textes aus dem PDF-Dokument lautet wie folgt:

import PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file) number_of_pages = read_pdf.getNumPages () page = read_pdf.getPage (0) page_content = page.extractText () drucke page_content

Ich war erstaunt, als ich die folgende Ausgabe als die in sample.pdf:

!"# $% # $% &% $ & '() *% +, -%. / 01' * 23% 4 5 '% 1 $ # 26% 3 /% 7 /)) / 8% &) / 26 % 8 # 3 "% 3" *% 313/9 # &)%

Dies ist höchstwahrscheinlich auf ein Schriftproblem zurückzuführen, so dass die Zeichencodes anderen Werten zugeordnet werden. Daher ist es manchmal ein Problem mit dem PDF-Dokument selbst, da das PDF-Dokument möglicherweise nicht die Daten enthält, die zum Wiederherstellen des Inhalts erforderlich sind.

Ich habe also eine andere Datei ausprobiert, die eine meiner Papiere ist: paper.pdf. Fahren Sie fort und ersetzen Sie es sample.pdf im code mit paper.pdf. Die Ausgabe in diesem Fall war:

Medical Imaging 2012: Bildwahrnehmung, Beobachterleistung und Technologiebewertung, herausgegeben von Craig K. Abbey, Claudia R. Mello-Thoms, Proc. von SPIE Vol. 8318, 83181I © 2012 SPIE · CCC-Code: 1605-7422 / 12 / $ 18 · doi: 10.1117 / 12.912389Proc. von SPIE Vol. 8318 83181I-1In der SPIE Digital Library am 13. August 2012 in 134.130.12.208 heruntergeladen. Nutzungsbedingungen: http://spiedl.org/terms

Aber wo ist der restliche Text auf der Seite? Nun, eigentlich die extractText () Die Methode scheint nicht perfekt zu sein, und es müssen einige Verbesserungen vorgenommen werden. Das Ziel hier ist es, Ihnen zu zeigen, wie Sie mit Python mit PDF-Dateien arbeiten, und es scheint, dass einige Verbesserungen in der Domäne erforderlich sind.

Fazit

Wie wir sehen können, vereinfacht Python die Arbeit mit PDF-Dokumenten. In diesem Tutorial wurde die Oberfläche dieses Themas nur zerkratzt. Weitere Informationen zu den verschiedenen Vorgängen, die Sie für PDF-Dokumente ausführen können, finden Sie auf der PyPDF2-Dokumentationsseite.