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 pypdfOvaj 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 60Python
# 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:

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

- 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.