logo

Arbejde med PDF-filer i Python

I skal alle være bekendt med, hvad PDF-filer er. Faktisk er de et af de vigtigste og mest udbredte digitale medier. PDF står for Bærbart dokumentformat . Det bruger .pdf forlængelse. Det bruges til at præsentere og udveksle dokumenter pålideligt uafhængigt af softwarehardware eller operativsystem.
Opfundet af Adobe PDF er nu en åben standard, der vedligeholdes af International Organization for Standardization (ISO). PDF'er kan indeholde links og knapper fra felter, lydvideo og forretningslogik.
I denne artikel vil vi lære, hvordan vi kan udføre forskellige operationer som:
 

  • Udtræk tekst fra PDF
  • Roterende PDF-sider
  • Sammenlægning af PDF-filer
  • Opdeling af PDF
  • Tilføjelse af vandmærke til PDF-sider

Installation: Brug simple python-scripts!
Vi vil bruge et tredjepartsmodul pypdf.
pypdf er et python-bibliotek bygget som et PDF-værktøjssæt. Den er i stand til:
 

  • Udtræk af dokumentoplysninger (titelforfatter …)
  • Opdeling af dokumenter side for side
  • Sammenfletning af dokumenter side for side
  • Beskæring af sider
  • Fletning af flere sider til en enkelt side
  • Kryptering og dekryptering af PDF-filer
  • og mere!

For at installere pydf skal du køre følgende kommando fra kommandolinjen:



pip install pypdf

Dette modulnavn skelner mellem store og små bogstaver, så sørg for at og er små bogstaver og alt andet er store bogstaver. Al kode og PDF-filer, der bruges i denne vejledning/artikel, er tilgængelige her .

markdown fodnoter

1. Udpakning af 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()) 

Outputtet af ovenstående program ser således ud:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

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

Lad os prøve at forstå ovenstående kode i bidder:
 

reader = PdfReader('example.pdf')  
  • Her skaber vi et objekt af Pdf-læser klasse af pypdf-modul og videregive stien til PDF-filen og få et PDF-læserobjekt.
     
print(len(reader.pages))  
  • sider egenskaben angiver antallet af sider i PDF-filen. For eksempel i vores tilfælde er det 20 (se første linje af output).
     
pageObj = reader.pages[0]  
  • Nu skaber vi et objekt af Sideobjekt klasse af pydf-modul. PDF-læserobjekt har funktion sider[] som tager sidetal (startende fra indeks 0) som argument og returnerer sideobjektet.
     
print(pageObj.extract_text())  
  • Sideobjekt har funktion extract_text() at udtrække tekst fra PDF-siden.


Note: Selvom PDF-filer er gode til at lægge tekst ud på en måde, der er let for folk at udskrive og læse, er de ikke ligetil for software at parse til almindelig tekst. Som sådan kan pypdf begå fejl, når tekst uddrages fra en PDF og kan endda være ude af stand til at åbne nogle PDF'er overhovedet. Det er desværre ikke meget du kan gøre ved dette. pypdf kan simpelthen være ude af stand til at arbejde med nogle af dine særlige 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 side af roteret_eksempel.pdf ser ud som (højre billede) efter rotation:

Rotere en pdf-fil' title=

hvordan man bestemmer skærmstørrelsen

Nogle vigtige punkter relateret til ovenstående kode:
 

  • Til rotation opretter vi først et PDF-læserobjekt af den originale PDF.
writer = PdfWriter()  
  • Roterede sider vil blive skrevet til en ny PDF. Til at skrive til PDF'er bruger vi genstanden for Pdf Writer klasse af pydf-modul.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Nu gentager vi hver side i den originale PDF. Vi får sideobjekt ved .pages[] metode til PDF-læserklasse. Nu roterer vi siden ved rotere() metode til sideobjektklasse. Derefter tilføjer vi en side til PDF-skriverobjekt ved hjælp af tilføje() metode til PDF-skriverklasse ved at sende det roterede sideobjekt.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Nu skal vi skrive PDF-siderne til en ny PDF-fil. Først åbner vi det nye filobjekt og skriver PDF-sider til det ved hjælp af skrive() metode til PDF-skriverobjekt. Til sidst lukker vi det originale PDF-filobjekt og det nye filobjekt.

3. Sammenlægning af 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() 

Outputtet af ovenstående program er en kombineret PDF kombineret_eksempel.pdf opnået ved sammenlægning eksempel.pdf og roteret_eksempel.pdf .
 

  • Lad os se på vigtige aspekter af dette program:
     
pdfWriter = PdfWriter()
  • Til sammenlægning bruger vi en præbygget klasse Pdf Writer af pydf-modulet.
    Her skaber vi et objekt pdf-forfatter af PDF-skribent klasse
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Nu tilføjer vi filobjekt for hver PDF til PDF-skriverobjekt ved hjælp af tilføje() metode.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Til sidst skriver vi PDF-siderne til output-PDF-filen vha skrive metode til PDF-skriverobjekt.

4. Opdeling af 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() 

Output vil være tre nye PDF-filer med del 1 (side 01) del 2(side 23) del 3(side 4-ende) .
Ingen ny funktion eller klasse er blevet brugt i ovenstående python-program. Ved hjælp af simpel logik og iterationer skabte vi opdelingerne af bestået PDF i henhold til den beståede liste splitter .

sdlc livscyklus

5. Tilføjelse af vandmærke til 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() 

Sådan ser den første side af den originale (venstre) og vandmærkede (højre) PDF-fil ud:
 

Vandmærke pdf-filen' loading='lazy' title=

  • Hele processen er den samme som eksemplet med siderotation. Eneste forskel er:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • Sideobjekt konverteres til vandmærket sideobjekt vha tilføje_vandmærke() fungere.
  • Lad os prøve at forstå tilføje_vandmærke() fungere:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • Først og fremmest opretter vi et PDF-læserobjekt af vandmærke.pdf . Til det beståede sideobjekt, vi bruger merge_page() funktion og videregive sideobjektet på den første side af vandmærke PDF-læserobjektet. Dette vil overlejre vandmærket over det beståede sideobjekt.


Og her når vi slutningen af ​​denne lange tutorial om at arbejde med PDF-filer i python.
Nu kan du nemt oprette din egen PDF-manager!
Referencer:
 

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

Hvis du kan lide GeeksforGeeks og gerne vil bidrage, kan du også skrive en artikel ved at bruge write.geeksforgeeks.org eller sende din artikel til [email protected]. Se din artikel, der vises på GeeksforGeeks hovedside, og hjælp andre nørder.
Skriv venligst kommentarer, hvis du finder noget forkert, eller hvis du vil dele flere oplysninger om emnet diskuteret ovenfor.
 

Opret quiz