logo

Rad s PDF datotekama u Pythonu

Svi morate biti upoznati s time što su PDF-ovi. Zapravo, oni su jedan od najvažnijih i najčešće korištenih digitalnih medija. PDF je skraćenica za Prijenosni format dokumenta . Koristi se .pdf proširenje. Koristi se za predstavljanje i razmjenu dokumenata pouzdano neovisno o softverskom hardveru ili operativnom sustavu.
Izumio Adobe PDF je sada otvoreni standard koji održava Međunarodna organizacija za standardizaciju (ISO). PDF-ovi mogu sadržavati poveznice i gumbe iz polja audio, video i poslovne logike.
U ovom ćemo članku naučiti kako možemo izvoditi razne operacije poput:
 

  • Izdvajanje teksta iz PDF-a
  • Rotiranje PDF stranica
  • Spajanje PDF-ova
  • Razdvajanje PDF-a
  • Dodavanje vodenog žiga na PDF stranice

Montaža: Korištenje jednostavnih python skripti!
Koristit ćemo modul treće strane pypdf.
pypdf je python biblioteka izgrađena kao PDF alat. Sposoban je za:
 

  • Izdvajanje informacija o dokumentu (autor naslova...)
  • Dijeljenje dokumenata stranicu po stranicu
  • Spajanje dokumenata stranicu po stranicu
  • Izrezivanje stranica
  • Spajanje više stranica u jednu stranicu
  • Šifriranje i dešifriranje PDF datoteka
  • i više!

Da biste instalirali pypdf, pokrenite sljedeću naredbu iz naredbenog retka:



pip install pypdf

Ovaj naziv modula razlikuje velika i mala slova pa provjerite je li i je mala slova, a sve ostalo je veliko. Svi kodovi i PDF datoteke korištene u ovom vodiču/članku su dostupni ovdje .

što je monitor

1. Izdvajanje teksta iz PDF datoteke

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

Izlaz gornjeg programa izgleda ovako:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

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

Pokušajmo razumjeti gornji kod u dijelovima:
 

reader = PdfReader('example.pdf')  
  • Ovdje stvaramo objekt od PdfReader klasa pypdf modula i proslijedite put do PDF datoteke i dobijete objekt PDF čitača.
     
print(len(reader.pages))  
  • stranice svojstvo daje broj stranica u PDF datoteci. Na primjer, u našem slučaju to je 20 (pogledajte prvi red ispisa).
     
pageObj = reader.pages[0]  
  • Sada stvaramo objekt od PageObject klasa pypdf modula. Objekt PDF čitača ima funkciju stranice[] koji uzima broj stranice (počevši od indeksa 0) kao argument i vraća objekt stranice.
     
print(pageObj.extract_text())  
  • Objekt stranice ima funkciju ekstrakt_teksta() za izdvajanje teksta s PDF stranice.


Bilješka: Iako su PDF datoteke izvrsne za postavljanje teksta na način koji je ljudima jednostavan za ispis i čitanje, softver ih ne može jednostavno raščlaniti u čisti tekst. Kao takav, pypdf bi mogao pogriješiti prilikom izdvajanja teksta iz PDF-a i možda čak uopće neće moći otvoriti neke PDF-ove. Nažalost, ne možete puno učiniti u vezi s tim. pypdf možda jednostavno ne može raditi s nekim od vaših PDF datoteka.

2. Rotiranje PDF stranica
 

10 posto od 60
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() 

Ovdje možete vidjeti kako izgleda prva stranica rotirani_primjer.pdf izgleda ovako (desna slika) nakon rotacije:

Rotiranje pdf datoteke' title=

Neke važne točke povezane s gornjim kodom:
 

  • Za rotaciju prvo stvaramo objekt PDF čitača izvornog PDF-a.
writer = PdfWriter()  
  • Zakrenute stranice bit će zapisane u novi PDF. Za pisanje u PDF-ove koristimo objekt of PdfWriter klasa pypdf modula.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Sada ponavljamo svaku stranicu izvornog PDF-a. Dobivamo objekt stranice putem .stranice[] metoda PDF reader klase. Sada okrećemo stranicu za rotirati() metoda klase objekta stranice. Zatim dodajemo stranicu objektu PDF pisca pomoću dodati() metoda klase PDF writer prosljeđivanjem objekta rotirane stranice.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Sada moramo napisati PDF stranice u novu PDF datoteku. Prvo otvorimo novi objekt datoteke i u njega upišemo PDF stranice koristeći pisati() metoda objekta PDF pisca. Na kraju zatvaramo izvorni objekt PDF datoteke i novi objekt datoteke.

3. Spajanje PDF datoteka

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

Izlaz gornjeg programa je kombinirani PDF kombinirani_primjer.pdf dobiveni spajanjem primjer.pdf i rotirani_primjer.pdf .
 

fibonaccijev niz u c
  • Pogledajmo važne aspekte ovog programa:
     
pdfWriter = PdfWriter()
  • Za spajanje koristimo unaprijed izgrađenu klasu PdfWriter pypdf modula.
    Ovdje stvaramo objekt pdfwriter razreda PDF pisca
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Sada dodajemo objekt datoteke svakog PDF-a u objekt PDF pisača pomoću dodati() metoda.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Na kraju pišemo PDF stranice u izlaznu PDF datoteku pomoću pisati metoda objekta PDF pisca.

4. Razdvajanje PDF datoteke

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

Izlaz će biti tri nove PDF datoteke sa dio 1 (stranica 01) dio 2 (stranica 23) dio 3 (stranica 4-kraj) .
U gornjem python programu nije korištena nikakva nova funkcija ili klasa. Koristeći jednostavnu logiku i iteracije stvorili smo podjele položenog PDF-a prema popisu položenog rascjepi .

koliko gradova ima u nas

5. Dodavanje vodenog žiga na PDF stranice

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

Evo kako izgleda prva stranica originalne (lijevo) i PDF datoteke s vodenim žigom (desno):
 

Označavanje vodenim žigom pdf datoteke' loading='lazy' title=

  • Cijeli postupak je isti kao u primjeru rotacije stranice. Jedina razlika je:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • Objekt stranice pretvara se u objekt stranice s vodenim žigom pomoću dodaj_vodeni žig() funkcija.
  • Pokušajmo razumjeti dodaj_vodeni žig() funkcija:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • Najprije stvaramo objekt PDF čitača vodeni žig.pdf . Objektu proslijeđene stranice koji koristimo merge_page() funkciju i proslijedi objekt stranice prve stranice objekta PDF čitača vodenog žiga. Ovo će prekriti vodeni žig preko objekta stranice koji je prošao.


I ovdje smo došli do kraja ovog dugog vodiča o radu s PDF datotekama u pythonu.
Sada možete jednostavno izraditi vlastiti PDF upravitelj!
Reference:
 

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

Ako vam se sviđa GeeksforGeeks i želite doprinijeti, možete napisati članak koristeći write.geeksforgeeks.org ili svoj članak poslati poštom na [email protected]. Pogledajte kako se vaš članak pojavljuje na glavnoj stranici GeeksforGeeksa i pomozite drugim Geekovima.
Napišite komentare ako pronađete bilo što netočno ili ako želite podijeliti više informacija o temi koja je gore razmotrena.
 

Napravi kviz