Práca so súbormi PDF v Pythone
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 spoľahlivé prezentovanie a výmenu dokumentov, nezávisle od softvéru, hardvéru alebo operačného systému.
Vynašiel Adobe PDF je teraz otvorený štandard udržiavaný Medzinárodnou organizáciou pre normalizáciu (ISO). Súbory PDF môžu obsahovať odkazy a tlačidlá, polia formulárov, zvuk, video a obchodnú logiku.
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 (názov, autor, ...)
- 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 viac!
Ak chcete nainštalovať pypdf, spustite nasledujúci príkaz z príkazového riadku:
pip install pypdf
Tento 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 .
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 z vyššie uvedeného programu vyzerá takto:
20 PythonBasics S.R.Doty August27,2008 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 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 usporiadanie textu spôsobom, ktorý je pre ľudí jednoduchý na tlač a čítanie, nie je jednoduché ich softvérovo analyzovať 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
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)):> > > # creating rotated page object> > pageObj> => reader.pages[page]> > pageObj.rotate(rotation)> > > # adding rotated page object to pdf writer> > pdfWriter.add_page(pageObj)> > > # new pdf file object> > newFile> => open> (newFileName,> 'wb'> )> > > # writing rotated pages to new file> > pdfWriter.write(newFile)> > > # closing the new pdf file object> > newFile.close()> > > 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 vyzerá takto (pravý obrázok) po otočení:
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) pdfWriter.add_page(pageObj)
- Teraz opakujeme 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 točiť sa() metóda triedy objektu stránky. Potom pridáme stránku do objektu PDF Writer pomocou prírastok() metóda triedy PDF Writer odovzdaním objektu otočenej stránky.
newFile = open(newFileName, 'wb') pdfWriter.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> PdfMerger> > > def> PDFmerge(pdfs, output):> > # creating pdf file merger object> > pdfMerger> => PdfMerger()> > > # appending pdfs one by one> > for> pdf> in> pdfs:> > pdfMerger.append(pdf)> > > # writing combined pdf to output pdf file> > with> open> (output,> 'wb'> ) as f:> > pdfMerger.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:
pdfMerger = PdfMerger()
- Na zlúčenie používame vopred zostavenú triedu, PdfMerger modulu pypdf.
Tu vytvoríme objekt pdfMerger triedy zlúčenia PDF
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))
- Teraz pripojíme objekt súboru každého PDF k objektu zlúčenia PDF pomocou súboru pripojiť () metóda.
with open(output, 'wb') as f: pdfMerger.write(f)
- Nakoniec zapíšeme stránky PDF do výstupného súboru PDF pomocou písať metóda zlúčenia objektu PDF.
4. Rozdelenie súboru PDF
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()> |
Výstupom budú tri nové súbory PDF s rozdelenie 1 (strana 0,1), rozdelenie 2 (strana 2,3), 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í .
5. Pridanie vodoznaku na stránky PDF
Python
# importing the required modules> from> pypdf> import> PdfReader> > def> add_watermark(wmFile, pageObj):> > # creating pdf reader object of watermark pdf file> > reader> => PdfReader(wmFileObj)> > > # 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)> > > # new pdf file object> > newFile> => open> (newFileName,> 'wb'> )> > > # writing watermarked pages to new file> > writer.write(newFile)> > > # closing the new pdf file object> > newFile.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]) wmFileObj.close() return pageObj
- V prvom rade vytvoríme objekt čítačky PDF vodoznak.pdf . K odovzdanému objektu stránky 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 jednoducho vytvoriť svojho vlastného správcu PDF!
Referencie:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Ak sa vám páči techcodeview.com a chceli by ste prispieť, môžete tiež napísať článok pomocou write.techcodeview.com alebo poslať svoj článok na [email protected]
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.