logo

Arbeiten mit PDF-Dateien in Python

Sie alle müssen mit PDFs vertraut sein. Tatsächlich sind sie eines der wichtigsten und am weitesten verbreiteten digitalen Medien. PDF steht für Tragbares Dokumentformat . Es nutzt .pdf Verlängerung. Es dient der zuverlässigen Präsentation und dem Austausch von Dokumenten unabhängig von Software-Hardware oder Betriebssystem.
Erfunden von Adobe PDF ist mittlerweile ein offener Standard, der von der International Organization for Standardization (ISO) verwaltet wird. PDFs können Links und Schaltflächen aus Feldern, Audio, Video und Geschäftslogik enthalten.
In diesem Artikel erfahren wir, wie wir verschiedene Operationen durchführen können, wie zum Beispiel:
 

  • Extrahieren von Text aus PDF
  • Rotierende PDF-Seiten
  • Zusammenführen von PDFs
  • PDF aufteilen
  • Hinzufügen von Wasserzeichen zu PDF-Seiten

Installation: Mit einfachen Python-Skripten!
Wir werden das Modul pypdf eines Drittanbieters verwenden.
pypdf ist eine Python-Bibliothek, die als PDF-Toolkit erstellt wurde. Es ist in der Lage:
 

  • Dokumentinformationen extrahieren (Titelautor …)
  • Dokumente Seite für Seite aufteilen
  • Dokumente Seite für Seite zusammenführen
  • Seiten zuschneiden
  • Mehrere Seiten zu einer einzigen Seite zusammenführen
  • Verschlüsseln und Entschlüsseln von PDF-Dateien
  • und mehr!

Um pypdf zu installieren, führen Sie den folgenden Befehl über die Befehlszeile aus:



pip install pypdf

Bei diesem Modulnamen muss die Groß-/Kleinschreibung beachtet werden. Stellen Sie daher sicher, dass Und ist Kleinbuchstaben und alles andere ist Großbuchstaben. Alle in diesem Tutorial/Artikel verwendeten Code- und PDF-Dateien sind verfügbar Hier .

Designmuster Java

1. Extrahieren von Text aus einer PDF-Datei

Python
# importing required classes from pypdf import PdfReader # creating a pdf reader object reader = PdfReader('example.pdf') # printing number of pages in pdf file print(len(reader.pages)) # creating a page object page = reader.pages[0] # extracting text from page print(page.extract_text()) 

Die Ausgabe des obigen Programms sieht folgendermaßen aus:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]

Versuchen wir, den obigen Code in Teilen zu verstehen:
 

reader = PdfReader('example.pdf')  
  • Hier erstellen wir ein Objekt von PDFReader Klasse des pypdf-Moduls, übergeben Sie den Pfad zur PDF-Datei und erhalten Sie ein PDF-Reader-Objekt.
     
print(len(reader.pages))  
  • Seiten Die Eigenschaft gibt die Anzahl der Seiten in der PDF-Datei an. In unserem Fall ist es beispielsweise 20 (siehe erste Ausgabezeile).
     
pageObj = reader.pages[0]  
  • Jetzt erstellen wir ein Objekt von Seitenobjekt Klasse des PyPDF-Moduls. Das PDF-Reader-Objekt hat eine Funktion Seiten[] Dies nimmt die Seitennummer (beginnend mit Index 0) als Argument und gibt das Seitenobjekt zurück.
     
print(pageObj.extract_text())  
  • Seitenobjekt hat Funktion extract_text() um Text aus der PDF-Seite zu extrahieren.


Notiz: Während sich PDF-Dateien hervorragend dazu eignen, Text so anzuordnen, dass er leicht gedruckt und gelesen werden kann, ist es für Software nicht einfach, ihn in Klartext umzuwandeln. Daher kann pypdf beim Extrahieren von Text aus einer PDF-Datei Fehler machen und einige PDFs möglicherweise überhaupt nicht öffnen. Leider können Sie nicht viel dagegen tun. pypdf kann möglicherweise einfach nicht mit einigen Ihrer speziellen PDF-Dateien arbeiten.

2. PDF-Seiten drehen
 

Python
# importing the required classes from pypdf import PdfReader PdfWriter def PDFrotate(origFileName newFileName rotation): # creating a pdf Reader object reader = PdfReader(origFileName) # creating a pdf writer object for new pdf writer = PdfWriter() # rotating each page for page in range(len(reader.pages)): pageObj = reader.pages[page] pageObj.rotate(rotation) # Add the rotated page object to the PDF writer writer.add_page(pageObj) # Write the rotated pages to the new PDF file with open(newFileName 'wb') as newFile: writer.write(newFile) def main(): # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'rotated_example.pdf' # rotation angle rotation = 270 # calling the PDFrotate function PDFrotate(origFileName newFileName rotation) if __name__ == '__main__': # calling the main function main() 

Hier können Sie sehen, wie die erste Seite von gedrehtes_beispiel.pdf sieht nach der Drehung so aus (rechtes Bild):

Java-Ups-Konzepte

Eine PDF-Datei drehen' title=

Einige wichtige Punkte im Zusammenhang mit dem obigen Code:
 

mylivecriclet
  • Für die Rotation erstellen wir zunächst ein PDF-Reader-Objekt des Original-PDFs.
writer = PdfWriter()  
  • Gedrehte Seiten werden in ein neues PDF geschrieben. Zum Schreiben in PDFs verwenden wir das Objekt von PDFWriter Klasse des PyPDF-Moduls.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Jetzt iterieren wir jede Seite des Original-PDF. Wir erhalten das Seitenobjekt von .Seiten[] Methode der PDF-Reader-Klasse. Jetzt drehen wir die Seite um drehen() Methode der Seitenobjektklasse. Dann fügen wir mithilfe von eine Seite zum PDF-Writer-Objekt hinzu hinzufügen() Methode der PDF-Writer-Klasse durch Übergabe des gedrehten Seitenobjekts.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Jetzt müssen wir die PDF-Seiten in eine neue PDF-Datei schreiben. Zuerst öffnen wir das neue Dateiobjekt und schreiben mit PDF-Seiten darauf schreiben() Methode des PDF-Writer-Objekts. Zum Schluss schließen wir das ursprüngliche PDF-Dateiobjekt und das neue Dateiobjekt.

3. PDF-Dateien zusammenführen

Python
# importing required modules from pypdf import PdfWriter def PDFmerge(pdfs output): # creating pdf file writer object pdfWriter = PdfWriter() # appending pdfs one by one for pdf in pdfs: pdfWriter.append(pdf) # writing combined pdf to output pdf file with open(output 'wb') as f: pdfWriter.write(f) def main(): # pdf files to merge pdfs = ['example.pdf' 'rotated_example.pdf'] # output pdf file name output = 'combined_example.pdf' # calling pdf merge function PDFmerge(pdfs=pdfs output=output) if __name__ == '__main__': # calling the main function main() 

Die Ausgabe des obigen Programms ist ein kombiniertes PDF kombiniertes_Beispiel.pdf durch Zusammenführung erhalten Beispiel.pdf Und gedrehtes_beispiel.pdf .
 

  • Werfen wir einen Blick auf wichtige Aspekte dieses Programms:
     
pdfWriter = PdfWriter()
  • Zum Zusammenführen verwenden wir eine vorgefertigte Klasse PDFWriter des pypdf-Moduls.
    Hier erstellen wir ein Objekt pdfwriter der PDF-Writer-Klasse
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Jetzt hängen wir das Dateiobjekt jeder PDF-Datei mithilfe von an das PDF-Writer-Objekt an append() Verfahren.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Abschließend schreiben wir die PDF-Seiten mit in die Ausgabe-PDF-Datei schreiben Methode des PDF-Writer-Objekts.

4. PDF-Datei aufteilen

Python
# importing the required modules from pypdf import PdfReader PdfWriter def PDFsplit(pdf splits): # creating pdf reader object reader = PdfReader(pdf) # starting index of first slice start = 0 # starting index of last slice end = splits[0] for i in range(len(splits)+1): # creating pdf writer object for (i+1)th split writer = PdfWriter() # output pdf file name outputpdf = pdf.split('.pdf')[0] + str(i) + '.pdf' # adding pages to pdf writer object for page in range(startend): writer.add_page(reader.pages[page]) # writing split pdf pages to pdf file with open(outputpdf 'wb') as f: writer.write(f) # interchanging page split start position for next split start = end try: # setting split end position for next split end = splits[i+1] except IndexError: # setting split end position for last split end = len(reader.pages) def main(): # pdf file to split pdf = 'example.pdf' # split page positions splits = [24] # calling PDFsplit function to split pdf PDFsplit(pdf splits) if __name__ == '__main__': # calling the main function main() 

Die Ausgabe erfolgt in drei neuen PDF-Dateien mit Teil 1 (Seite 01) Teil 2 (Seite 23) Teil 3 (Seite 4-Ende) .
Im obigen Python-Programm wurde keine neue Funktion oder Klasse verwendet. Mithilfe einfacher Logik und Iterationen haben wir die Aufteilungen der übergebenen PDFs entsprechend der übergebenen Liste erstellt spaltet sich .

Voreingenommenheit und Varianz

5. Wasserzeichen zu PDF-Seiten hinzufügen

Python
# importing the required modules from pypdf import PdfReader PdfWriter def add_watermark(wmFile pageObj): # creating pdf reader object of watermark pdf file reader = PdfReader(wmFile) # merging watermark pdf's first page with passed page object. pageObj.merge_page(reader.pages[0]) # returning watermarked page object return pageObj def main(): # watermark pdf file name mywatermark = 'watermark.pdf' # original pdf file name origFileName = 'example.pdf' # new pdf file name newFileName = 'watermarked_example.pdf' # creating pdf File object of original pdf pdfFileObj = open(origFileName 'rb') # creating a pdf Reader object reader = PdfReader(pdfFileObj) # creating a pdf writer object for new pdf writer = PdfWriter() # adding watermark to each page for page in range(len(reader.pages)): # creating watermarked page object wmpageObj = add_watermark(mywatermark reader.pages[page]) # adding watermarked page object to pdf writer writer.add_page(wmpageObj) # writing watermarked pages to new file with open(newFileName 'wb') as newFile: writer.write(newFile) # closing the original pdf file object pdfFileObj.close() if __name__ == '__main__': # calling the main function main() 

So sieht die erste Seite der Original-PDF-Datei (links) und der mit Wasserzeichen versehenen PDF-Datei (rechts) aus:
 

Die PDF-Datei mit einem Wasserzeichen versehen' loading='lazy' title=

  • Der gesamte Vorgang ist derselbe wie im Beispiel für die Seitendrehung. Der einzige Unterschied ist:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • Das Seitenobjekt wird mithilfe von in ein mit Wasserzeichen versehenes Seitenobjekt umgewandelt add_watermark() Funktion.
  • Versuchen wir es zu verstehen add_watermark() Funktion:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • Zunächst erstellen wir ein PDF-Reader-Objekt von wasserzeichen.pdf . Zum übergebenen Seitenobjekt verwenden wir merge_page() Funktion und übergeben Sie das Seitenobjekt der ersten Seite des Wasserzeichen-PDF-Reader-Objekts. Dadurch wird das Wasserzeichen über das übergebene Seitenobjekt gelegt.


Und hier sind wir am Ende dieses langen Tutorials zum Arbeiten mit PDF-Dateien in Python angelangt.
Jetzt können Sie ganz einfach Ihren eigenen PDF-Manager erstellen!
Referenzen:
 

  • https://automatetheboringstuff.com/chapter13/
  • https://pypi.org/project/pypdf/

Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel über write.geeksforgeeks.org schreiben oder Ihren Artikel per E-Mail an [email protected] senden. Sehen Sie, wie Ihr Artikel auf der Hauptseite von GeeksforGeeks erscheint, und helfen Sie anderen Geeks.
Bitte schreiben Sie Kommentare, wenn Sie etwas Falsches finden oder wenn Sie weitere Informationen zu dem oben besprochenen Thema teilen möchten.
 

Quiz erstellen