Arbeide med PDF-filer i Python

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 .

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.

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

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  (  start    end  ):   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   =   [  2    4  ]   # 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 .

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

  • 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