logo

Werken met PDF-bestanden in Python

Jullie moeten allemaal bekend zijn met wat PDF's zijn. In feite zijn ze een van de belangrijkste en meest gebruikte digitale media. PDF staat voor Draagbaar documentformaat . Het gebruikt .pdf verlenging. Het wordt gebruikt om documenten betrouwbaar te presenteren en uit te wisselen, onafhankelijk van softwarehardware of besturingssysteem.
Uitgevonden door Adobe PDF is nu een open standaard die wordt beheerd door de International Organization for Standardization (ISO). PDF's kunnen koppelingen en knoppen bevatten uit de velden audio, video en bedrijfslogica.
In dit artikel zullen we leren hoe we verschillende bewerkingen kunnen uitvoeren, zoals:
 

  • Tekst uit pdf halen
  • PDF-pagina's roteren
  • PDF's samenvoegen
  • PDF splitsen
  • Watermerk toevoegen aan PDF-pagina's

Installatie: Gebruik eenvoudige Python-scripts!
We zullen een module pypdf van derden gebruiken.
pypdf is een Python-bibliotheek gebouwd als een PDF-toolkit. Het is in staat om:
 

  • Documentinformatie extraheren (titel auteur …)
  • Documenten pagina voor pagina splitsen
  • Documenten pagina voor pagina samenvoegen
  • Pagina's bijsnijden
  • Meerdere pagina's samenvoegen tot één pagina
  • Coderen en decoderen van PDF-bestanden
  • en meer!

Om pypdf te installeren, voert u de volgende opdracht uit vanaf de opdrachtregel:



pip install pypdf

Deze modulenaam is hoofdlettergevoelig, dus zorg ervoor dat de En is kleine letters en al het andere is hoofdletters. Alle code en PDF-bestanden die in deze tutorial/artikel worden gebruikt, zijn beschikbaar hier .

uml-diagram java

1. Tekst extraheren uit een PDF-bestand

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()) 

De uitvoer van het bovenstaande programma ziet er als volgt uit:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

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

Laten we proberen de bovenstaande code in stukjes te begrijpen:
 

aardnoot versus pinda
reader = PdfReader('example.pdf')  
  • Hier maken we een object van PdfReader klasse van de pypdf-module en geef het pad door naar het PDF-bestand en ontvang een PDF-lezerobject.
     
print(len(reader.pages))  
  • pagina's eigenschap geeft het aantal pagina's in het PDF-bestand aan. In ons geval is dit bijvoorbeeld 20 (zie eerste uitvoerregel).
     
pageObj = reader.pages[0]  
  • Nu maken we een object van PaginaObject klasse van pypdf-module. PDF-lezerobject heeft functie pagina's[] die het paginanummer (beginnend bij index 0) als argument neemt en het pagina-object retourneert.
     
print(pageObj.extract_text())  
  • Pagina-object heeft functie extract_text() om tekst uit de PDF-pagina te extraheren.


Opmerking: Hoewel PDF-bestanden uitstekend geschikt zijn voor het opmaken van tekst op een manier die mensen gemakkelijk kunnen afdrukken en lezen, zijn ze voor software niet eenvoudig te analyseren in leesbare tekst. Als zodanig kan pypdf fouten maken bij het extraheren van tekst uit een PDF en kan het zelfs zijn dat sommige PDF's helemaal niet kunnen worden geopend. Hier kun je helaas niet veel aan doen. pypdf kan mogelijk eenvoudigweg niet werken met sommige van uw specifieke PDF-bestanden.

2. PDF-pagina's roteren
 

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 kunt u zien hoe de eerste pagina van geroteerd_voorbeeld.pdf ziet er na rotatie uit (rechter afbeelding):

Het roteren van een pdf-bestand' title=

Enkele belangrijke punten met betrekking tot de bovenstaande code:
 

  • Voor rotatie maken we eerst een PDF-lezerobject van de originele PDF.
writer = PdfWriter()  
  • Geroteerde pagina's worden naar een nieuwe PDF geschreven. Voor het schrijven naar PDF's gebruiken we het object van PdfWriter klasse van pypdf-module.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Nu herhalen we elke pagina van de originele PDF. We krijgen een pagina-object door .pagina's[] methode van PDF-lezerklasse. Nu draaien we de pagina om draaien() methode van paginaobjectklasse. Vervolgens voegen we een pagina toe aan het PDF-schrijverobject met behulp van toevoegen() methode van de PDF-schrijverklasse door het geroteerde paginaobject door te geven.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Nu moeten we de PDF-pagina's naar een nieuw PDF-bestand schrijven. Eerst openen we het nieuwe bestandsobject en schrijven er PDF-pagina's naar met behulp van schrijven() methode van PDF-schrijverobject. Ten slotte sluiten we het originele PDF-bestandsobject en het nieuwe bestandsobject.

3. PDF-bestanden samenvoegen

boolean om Java te stringen
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() 

De uitvoer van het bovenstaande programma is een gecombineerde PDF gecombineerd_voorbeeld.pdf verkregen door samenvoeging voorbeeld.pdf En geroteerd_voorbeeld.pdf .
 

  • Laten we eens kijken naar belangrijke aspecten van dit programma:
     
pdfWriter = PdfWriter()
  • Voor het samenvoegen gebruiken we een vooraf gebouwde klasse PdfWriter van de pypdf-module.
    Hier maken we een object pdfschrijver van de PDF-schrijversklasse
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Nu voegen we het bestandsobject van elke PDF toe aan het PDF-schrijverobject met behulp van de toevoegen() methode.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Ten slotte schrijven we de PDF-pagina's naar het uitgevoerde PDF-bestand met behulp van schrijven methode van PDF-schrijverobject.

4. PDF-bestand splitsen

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() 

De uitvoer zal drie nieuwe PDF-bestanden zijn met split 1 (pagina 01) split 2 (pagina 23) split 3 (pagina 4-einde) .
Er is geen nieuwe functie of klasse gebruikt in het bovenstaande Python-programma. Met behulp van eenvoudige logica en iteraties hebben we de splitsingen van doorgegeven PDF's gemaakt volgens de doorgegeven lijst splitsingen .

tekenreeks in c

5. Watermerk toevoegen aan PDF-pagina's

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() 

Zo ziet de eerste pagina van het originele (links) en watermerk (rechts) PDF-bestand eruit:
 

Het pdf-bestand van een watermerk voorzien' loading='lazy' title=

  • Het hele proces is hetzelfde als in het voorbeeld van paginarotatie. Het enige verschil is:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • Pagina-object wordt geconverteerd naar een pagina-object met een watermerk met behulp van add_watermark() functie.
  • Laten we proberen het te begrijpen add_watermark() functie:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • In de eerste plaats maken we een PDF-lezerobject van watermerk.pdf . Voor het doorgegeven paginaobject gebruiken we merge_page() functie en geef het paginaobject van de eerste pagina van het watermerk PDF-lezerobject door. Hierdoor wordt het watermerk over het doorgegeven paginaobject gelegd.


En hier bereiken we het einde van deze lange tutorial over het werken met PDF-bestanden in Python.
Nu kunt u eenvoudig uw eigen PDF-manager maken!
Referenties:
 

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

Als je GeeksforGeeks leuk vindt en een bijdrage wilt leveren, kun je ook een artikel schrijven met write.geeksforgeeks.org of je artikel mailen naar [email protected]. Zie uw artikel verschijnen op de hoofdpagina van GeeksforGeeks en help andere Geeks.
Schrijf opmerkingen als u iets onjuist vindt of als u meer informatie wilt delen over het hierboven besproken onderwerp.
 

Quiz maken