logo

Arbeide med PDF-filer i Python

Alle må være kjent med hva PDF-filer er. Faktisk er de et av de viktigste og mest brukte digitale mediene. PDF står for Bærbart dokumentformat . Den bruker .pdf utvidelse. Den brukes til å presentere og utveksle dokumenter pålitelig uavhengig av programvaremaskinvare eller operativsystem.
Oppfunnet av Adobe PDF er nå en åpen standard vedlikeholdt av International Organization for Standardization (ISO). PDF-filer kan inneholde lenker og knapper fra felter lydvideo og forretningslogikk.
I denne artikkelen vil vi lære hvordan vi kan utføre ulike operasjoner som:
 

  • Trekker ut tekst fra PDF
  • Roterende PDF-sider
  • Slå sammen PDF-er
  • Deling av PDF
  • Legger til vannmerke på PDF-sider

Installasjon: Bruk enkle python-skript!
Vi vil bruke en tredjepartsmodul pypdf.
pypdf er et python-bibliotek bygget som et PDF-verktøysett. Den er i stand til:
 

  • Trekker ut dokumentinformasjon (tittelforfatter …)
  • Del opp dokumenter side for side
  • Slå sammen dokumenter side for side
  • Beskjæring av sider
  • Slå sammen flere sider til én enkelt side
  • Kryptering og dekryptering av PDF-filer
  • og mer!

For å installere pydf kjør følgende kommando fra kommandolinjen:



pip install pypdf

Dette modulnavnet skiller mellom store og små bokstaver, så sørg for at og er små bokstaver og alt annet er store bokstaver. All koden og PDF-filene som brukes i denne opplæringen/artikkelen er tilgjengelige her .

markdown fotnoter

1. Trekke ut tekst fra PDF-fil

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

Utdataene fra programmet ovenfor ser slik ut:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

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

La oss prøve å forstå koden ovenfor i biter:
 

reader = PdfReader('example.pdf')  
  • Her lager vi et objekt av PdfReader klasse av pypdf-modulen og gi stien til PDF-filen og få et PDF-leserobjekt.
     
print(len(reader.pages))  
  • sider egenskapen gir antall sider i PDF-filen. For eksempel i vårt tilfelle er det 20 (se første linje med utdata).
     
pageObj = reader.pages[0]  
  • Nå lager vi et objekt av Sideobjekt klasse av pydf-modulen. PDF-leserobjekt har funksjon sider[] som tar sidenummer (starter fra indeks 0) som argument og returnerer sideobjektet.
     
print(pageObj.extract_text())  
  • Sideobjekt har funksjon extract_text() for å trekke ut tekst fra PDF-siden.


Note: Mens PDF-filer er flotte for å legge ut tekst på en måte som er lett for folk å skrive ut og lese, er de ikke enkle for programvare å analysere til ren tekst. Som sådan kan pypdf gjøre feil når du trekker ut tekst fra en PDF og kan til og med være ute av stand til å åpne noen PDF-filer i det hele tatt. Det er ikke mye du kan gjøre med dette dessverre. pypdf kan ganske enkelt ikke fungere med noen av dine spesielle PDF-filer.

streng og understreng

2. Roterende PDF-sider
 

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

Her kan du se hvordan den første siden av rotert_eksempel.pdf ser slik ut (høyre bilde) etter rotasjon:

Rotere en pdf-fil' title=

java cast int til streng

Noen viktige punkter knyttet til koden ovenfor:
 

  • For rotasjon lager vi først et PDF-leserobjekt av den originale PDF-en.
writer = PdfWriter()  
  • Roterte sider vil bli skrevet til en ny PDF. For å skrive til PDF-er bruker vi objektet til Pdf Writer klasse av pydf-modulen.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Nå gjentar vi hver side i den originale PDF-filen. Vi får sideobjekt ved .pages[] metode for PDF-leserklasse. Nå roterer vi siden etter rotere() metode for sideobjektklasse. Deretter legger vi til en side til PDF-skriverobjekt ved hjelp av addage() metode for PDF-skriverklassen ved å sende det roterte sideobjektet.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Nå må vi skrive PDF-sidene til en ny PDF-fil. Først åpner vi det nye filobjektet og skriver PDF-sider til det ved hjelp av skrive() metode for PDF-skriverobjekt. Til slutt lukker vi det originale PDF-filobjektet og det nye filobjektet.

3. Slå sammen PDF-filer

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

Utdataene fra programmet ovenfor er en kombinert PDF kombinert_eksempel.pdf oppnådd ved sammenslåing eksempel.pdf og rotert_eksempel.pdf .
 

  • La oss ta en titt på viktige aspekter ved dette programmet:
     
pdfWriter = PdfWriter()
  • For sammenslåing bruker vi en forhåndsbygd klasse Pdf Writer av pydf-modulen.
    Her lager vi et objekt pdf-forfatter av PDF-forfatterklassen
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Nå legger vi til filobjekt for hver PDF til PDF-skriverobjekt ved hjelp av legge til() metode.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Til slutt skriver vi PDF-sidene til utdata-PDF-filen ved hjelp av skrive metode for PDF-skriverobjekt.

4. Deling av PDF-fil

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

Utdata vil være tre nye PDF-filer med delt 1 (side 01) delt 2(side 23) delt 3(side 4-ende) .
Ingen ny funksjon eller klasse har blitt brukt i pythonprogrammet ovenfor. Ved å bruke enkel logikk og iterasjoner lagde vi delingene av bestått PDF i henhold til den beståtte listen deler seg .

sdlc livssyklus

5. Legge til vannmerke på PDF-sider

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

Slik ser den første siden av original (venstre) og vannmerket (høyre) PDF-fil ut:
 

Vannmerke pdf-filen' loading='lazy' title=

  • Hele prosessen er den samme som siderotasjonseksemplet. Eneste forskjellen er:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • Sideobjekt konverteres til vannmerket sideobjekt ved hjelp av add_watermark() funksjon.
  • La oss prøve å forstå add_watermark() funksjon:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • Fremst lager vi et PDF-leserobjekt av vannmerke.pdf . Til det beståtte sideobjektet vi bruker merge_page() funksjon og send sideobjektet til den første siden av PDF-leserobjektet for vannmerke. Dette vil legge vannmerket over det passerte sideobjektet.


Og her kommer vi til slutten av denne lange opplæringen om å jobbe med PDF-filer i python.
Nå kan du enkelt lage din egen PDF-behandler!
Referanser:
 

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

Hvis du liker GeeksforGeeks og ønsker å bidra, kan du også skrive en artikkel ved å bruke write.geeksforgeeks.org eller sende artikkelen til [email protected]. Se artikkelen din som vises på GeeksforGeeks hovedside og hjelp andre nerder.
Vennligst skriv kommentarer hvis du finner noe feil eller hvis du vil dele mer informasjon om emnet diskutert ovenfor.
 

Lag quiz