Darbas su PDF failais Python
Visi turite žinoti, kas yra PDF. Tiesą sakant, jie yra viena iš svarbiausių ir plačiausiai naudojamų skaitmeninių laikmenų. PDF reiškia Nešiojamojo dokumento formatas . Tai naudoja .pdf pratęsimas. Jis naudojamas dokumentams pateikti ir keistis patikimai nepriklausomai nuo programinės įrangos ar operacinės sistemos.
Išrado Adobe PDF dabar yra atviras standartas, prižiūrimas Tarptautinės standartizacijos organizacijos (ISO). PDF failuose gali būti nuorodų ir mygtukų, sudarytų iš garso vaizdo ir verslo logikos laukų.
Šiame straipsnyje sužinosime, kaip galime atlikti įvairias operacijas, pavyzdžiui:
- Teksto ištraukimas iš pdf
- Besisukantys PDF puslapiai
- PDF sujungimas
- Pdf skaidymas
- Vandenženklio pridėjimas prie PDF puslapių
Montavimas: Naudojant paprastus python scenarijus!
Mes naudosime trečiosios šalies modulį pypdf.
pypdf yra python biblioteka, sukurta kaip PDF įrankių rinkinys. Jis gali:
- Ištraukiama dokumento informacija (pavadinimo autorius…)
- Dokumentų skaidymas po puslapius
- Dokumentų sujungimas puslapis po puslapio
- Puslapių apkarpymas
- Kelių puslapių sujungimas į vieną puslapį
- PDF failų šifravimas ir iššifravimas
- ir dar daugiau!
Norėdami įdiegti pypdf, komandinėje eilutėje paleiskite šią komandą:
pip install pypdfŠiame modulio pavadinime skiriamos didžiosios ir mažosios raidės, todėl įsitikinkite, kad ir yra mažosios, o visa kita – didžiosios. Galimas visas šioje pamokoje/straipsnyje naudojamas kodas ir PDF failai čia .
1. Teksto ištraukimas iš PDF failo
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 ())Aukščiau pateiktos programos išvestis atrodo taip:
20
PythonBasics
S.R.Doty
August272008
Contents
1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]
Pabandykime suprasti aukščiau pateiktą kodą dalimis:
reader = PdfReader('example.pdf')
- Čia mes sukuriame objektą PdfReader pypdf modulio klasė ir perduokite kelią į PDF failą ir gaukite PDF skaitytuvo objektą.
print(len(reader.pages))
- puslapių ypatybė nurodo PDF failo puslapių skaičių. Pavyzdžiui, mūsų atveju tai yra 20 (žr. pirmąją išvesties eilutę).
pageObj = reader.pages[0]
- Dabar sukuriame objektą Puslapio objektas pypdf modulio klasė. PDF skaitytuvo objektas turi funkciją puslapiai[] kuris paima puslapio numerį (pradedant nuo indekso 0) kaip argumentą ir grąžina puslapio objektą.
print(pageObj.extract_text())
- Puslapio objektas turi funkciją ekstrakto_tekstas() norėdami ištraukti tekstą iš PDF puslapio.
Pastaba: Nors PDF failai puikiai tinka teksto išdėstymui taip, kad žmonėms būtų lengva spausdinti ir skaityti, programinei įrangai nėra paprasta juos išanalizuoti į paprastą tekstą. Dėl to pypdf gali padaryti klaidų ištraukdamas tekstą iš PDF ir net negalėti atidaryti kai kurių PDF failų. Deja, šiuo klausimu nelabai ką galite padaryti. pypdf gali tiesiog neveikti su kai kuriais konkrečiais jūsų PDF failais.
2. Besisukantys PDF puslapiai
# 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 ()
Čia galite pamatyti, kaip pirmasis puslapis pasuktas_pavyzdys.pdf atrodo taip (paveikslėlis dešinėje) po pasukimo:
Keletas svarbių punktų, susijusių su aukščiau nurodytu kodu:
- Norėdami pasukti, pirmiausia sukuriame originalaus PDF PDF skaitytuvo objektą.
writer = PdfWriter()
- Pasukti puslapiai bus įrašyti į naują PDF. Norėdami rašyti į PDF, naudojame objektą PdfWriter pypdf modulio klasė.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- Dabar kartojame kiekvieną originalaus PDF puslapį. Mes gauname puslapio objektą .puslapiai[] PDF skaitytuvo klasės metodas. Dabar pasukame puslapį pasukti () puslapio objektų klasės metodas. Tada mes pridedame puslapį prie PDF rašymo objekto naudodami pridėti () PDF rašytojų klasės metodas, perduodamas pasukto puslapio objektą.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- Dabar turime įrašyti PDF puslapius į naują PDF failą. Pirmiausia atidarome naują failo objektą ir naudodamiesi į jį įrašome PDF puslapius rašyti () PDF rašymo objekto metodas. Galiausiai uždarome originalų PDF failo objektą ir naują failo objektą.
3. PDF failų sujungimas
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 ()
Aukščiau pateiktos programos išvestis yra kombinuotas PDF failas kombinuotas_pavyzdys.pdf gautas sujungus pavyzdys.pdf ir pasuktas_pavyzdys.pdf .
- Pažvelkime į svarbius šios programos aspektus:
pdfWriter = PdfWriter() - Sujungimui naudojame iš anksto sukurtą klasę PdfWriter pypdf modulis.
Čia mes sukuriame objektą pdfwriter PDF rašytojų klasėje
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Dabar kiekvieno PDF failo objektą pridedame prie PDF rašymo objekto naudodami pridėti () metodas.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Galiausiai mes rašome PDF puslapius į išvesties PDF failą naudodami rašyti PDF rašymo objekto metodas.
4. PDF failo skaidymas
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 ()
Išvestis bus trys nauji PDF failai su 1 padalijimas (01 puslapis) 2 padalijimas (23 puslapis) 3 padalijimas (4 puslapis) .
Aukščiau pateiktoje python programoje nebuvo naudojama jokia nauja funkcija ar klasė. Naudodami paprastą logiką ir iteracijas sukūrėme priimto PDF padalijimus pagal pateiktų sąrašą suskyla .
5. Vandenženklio pridėjimas prie PDF puslapių
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 ()
Štai kaip atrodo pirmasis originalaus (kairėje) ir vandenženklio (dešinėje) PDF failo puslapis:
- Visas procesas yra toks pat kaip puslapio pasukimo pavyzdyje. Vienintelis skirtumas yra:
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- Puslapio objektas konvertuojamas į vandens ženklu pažymėtą puslapio objektą naudojant add_watermark() funkcija.
- Pabandykime suprasti add_watermark() funkcija:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- Pirmiausia sukuriame PDF skaitytuvo objektą vandens ženklas.pdf . Perduotam puslapio objektui naudojame merge_page() funkcija ir perduoti vandens ženklo PDF skaitytuvo objekto pirmojo puslapio puslapio objektą. Tai perdengs vandens ženklą ant praleisto puslapio objekto.
Ir čia pasiekiame šios ilgos pamokos apie darbą su PDF failais python pabaigoje.
Dabar galite lengvai sukurti savo PDF tvarkyklę!
Nuorodos:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Jei jums patinka „GeeksforGeeks“ ir norėtumėte prisidėti, taip pat galite parašyti straipsnį naudodami write.geeksforgeeks.org arba išsiųsti savo straipsnį el. paštu [email protected]. Peržiūrėkite savo straipsnį „GeeksforGeeks“ pagrindiniame puslapyje ir padėkite kitiems „Geeks“.
Rašykite komentarus, jei radote ką nors neteisingo arba norite pasidalinti daugiau informacijos aukščiau aptarta tema.