Všetci musíte byť oboznámení s tým, čo sú súbory PDF. V skutočnosti sú jedným z najdôležitejších a najpoužívanejších digitálnych médií. PDF znamená Formát prenosného dokumentu . Používa sa .pdf rozšírenie. Používa sa na prezentáciu a výmenu dokumentov spoľahlivo nezávisle od softvérového hardvéru alebo operačného systému.
Vynašiel Adobe PDF je teraz otvorený štandard udržiavaný Medzinárodnou organizáciou pre štandardizáciu (ISO). Súbory PDF môžu obsahovať odkazy a tlačidlá v poliach zvuku, videa a obchodnej logiky.
V tomto článku sa dozvieme, ako môžeme vykonávať rôzne operácie, ako napríklad:
- Extrahovanie textu z PDF
- Otáčanie stránok PDF
- Zlúčenie súborov PDF
- Rozdelenie PDF
- Pridanie vodoznaku na stránky PDF
Inštalácia: Používanie jednoduchých python skriptov!
Budeme používať modul tretej strany pypdf.
pypdf je knižnica pythonu vytvorená ako súbor nástrojov PDF. Je schopný:
- Extrahovanie informácií o dokumente (autor názvu…)
- Rozdelenie dokumentov stránku po strane
- Zlúčenie dokumentov stránku po stránke
- Orezanie strán
- Zlúčenie viacerých stránok do jednej stránky
- Šifrovanie a dešifrovanie súborov PDF
- a ďalšie!
Ak chcete nainštalovať pypdf, spustite nasledujúci príkaz z príkazového riadku:
pip install pypdfTento názov modulu rozlišuje malé a veľké písmená, takže sa uistite, že a je malé a všetko ostatné je veľké. Všetky kódy a súbory PDF použité v tomto návode/článku sú k dispozícii tu .
nahradiť reťazec reťazcom java
1. Extrahovanie textu zo súboru PDF
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())
Výstup vyššie uvedeného programu vyzerá takto:
nahradiť reťazec javascript
20
PythonBasics
S.R.Doty
August272008
Contents
1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]
Pokúsme sa porozumieť vyššie uvedenému kódu v kúskoch:
reader = PdfReader('example.pdf')
- Tu vytvoríme objekt o PdfReader triedy modulu pypdf a odovzdajte cestu k súboru PDF a získajte objekt čítačky PDF.
print(len(reader.pages))
- stránky vlastnosť udáva počet strán v súbore PDF. Napríklad v našom prípade je to 20 (pozri prvý riadok výstupu).
pageObj = reader.pages[0]
- Teraz vytvoríme objekt PageObject triedy modulu pypdf. Objekt čítačky PDF má funkciu strany[] ktorý prevezme číslo stránky (začínajúc od indexu 0) ako argument a vráti objekt stránky.
print(pageObj.extract_text())
- Objekt stránky má funkciu extrakt_text() extrahovať text zo stránky PDF.
Poznámka: Aj keď sú súbory PDF skvelé na rozloženie textu spôsobom, ktorý si ľudia ľahko vytlačia a prečítajú, nie sú jednoduché pre softvér na analýzu do obyčajného textu. Ako taký môže pypdf robiť chyby pri extrakcii textu z PDF a dokonca nemusí byť možné niektoré súbory PDF vôbec otvoriť. Bohužiaľ s tým nemôžete veľa urobiť. pypdf môže jednoducho byť neschopný pracovať s niektorými vašimi konkrétnymi súbormi PDF.
2. Otáčanie stránok PDF
# 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()
Tu môžete vidieť, ako na prvej strane otočený_príklad.pdf po otočení vyzerá takto (pravý obrázok):

Niektoré dôležité body súvisiace s vyššie uvedeným kódom:
- Pre rotáciu najprv vytvoríme objekt PDF Reader z pôvodného PDF.
writer = PdfWriter()
- Otočené strany sa zapíšu do nového PDF. Na zápis do PDF používame objekt PdfWriter triedy modulu pypdf.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- Teraz iterujeme každú stránku pôvodného PDF. Dostaneme objekt stránky pomocou .stránky[] metóda triedy PDF Reader. Teraz otočíme stránku o otočiť () metóda triedy objektu stránky. Potom pridáme stránku do objektu PDF Writer pomocou pridať () metóda triedy PDF Writer odovzdaním objektu otočenej stránky.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- Teraz musíme zapísať stránky PDF do nového súboru PDF. Najprv otvoríme nový objekt súboru a pomocou neho napíšeme stránky PDF písať () metóda objektu PDF Writer. Nakoniec zatvoríme pôvodný objekt súboru PDF a nový objekt súboru.
3. Zlúčenie súborov PDF
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()
Výstupom vyššie uvedeného programu je kombinované PDF kombinovaný_príklad.pdf získané zlúčením priklad.pdf a otočený_príklad.pdf .
- Pozrime sa na dôležité aspekty tohto programu:
pdfWriter = PdfWriter()- Na zlúčenie používame vopred vybudovanú triedu PdfWriter modulu pypdf.
Tu vytvoríme objekt pdfwriter triedy PDF Writer
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Teraz pripojíme objekt súboru každého PDF k objektu PDF Writer pomocou pripojiť () metóda.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Nakoniec zapíšeme stránky PDF do výstupného súboru PDF pomocou písať metóda objektu PDF Writer.
4. Rozdelenie súboru PDF
if príkaz javaPython
# 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()
Výstupom budú tri nové súbory PDF s rozdelenie 1 (strana 01) rozdelenie 2 (strana 23) rozdelenie 3 (koniec strany 4) .
Vo vyššie uvedenom programe python nebola použitá žiadna nová funkcia alebo trieda. Pomocou jednoduchej logiky a iterácií sme vytvorili rozdelenia odovzdaného PDF podľa odovzdaného zoznamu rozdelí .
dynamické programovanie
5. Pridanie vodoznaku na stránky PDF
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()
Takto vyzerá prvá strana pôvodného (vľavo) a vodoznaku (vpravo) súboru PDF:

- Celý proces je rovnaký ako v príklade rotácie stránky. Jediný rozdiel je:
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])
- Objekt stránky sa prevedie na objekt stránky s vodotlačou pomocou pridať_vodoznak() funkciu.
- Skúsme pochopiť pridať_vodoznak() funkcia:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- V prvom rade vytvoríme objekt čítačky PDF vodoznak.pdf . K odovzdanému objektu stránky, ktorý používame merge_page() a odovzdať objekt stránky prvej strany vodoznakového objektu PDF Reader. Toto prekryje vodoznak cez objekt prechádzajúcej strany.
A tu sa dostávame na koniec tohto dlhého tutoriálu o práci so súbormi PDF v pythone.
Teraz si môžete ľahko vytvoriť svojho vlastného správcu PDF!
Referencie:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Ak máte radi GeeksforGeeks a chceli by ste prispieť, môžete tiež napísať článok pomocou write.geeksforgeeks.org alebo poslať svoj článok na [email protected]. Pozrite si, ako sa váš článok zobrazuje na hlavnej stránke GeeksforGeeks a pomôžte ostatným Geeks.
Napíšte komentáre, ak nájdete niečo nesprávne alebo ak chcete zdieľať viac informácií o téme diskutovanej vyššie.