Práce se soubory PDF v Pythonu

Práce se soubory PDF v Pythonu

Všichni musíte být obeznámeni s tím, co jsou soubory PDF. Ve skutečnosti jsou jedním z nejdůležitějších a nejrozšířenějších digitálních médií. PDF znamená Přenosný formát dokumentu . Používá .pdf rozšíření. Používá se ke spolehlivé prezentaci a výměně dokumentů, nezávisle na softwaru, hardwaru nebo operačním systému.
Vynalezl Adobe PDF je nyní otevřený standard spravovaný Mezinárodní organizací pro standardizaci (ISO). Soubory PDF mohou obsahovat odkazy a tlačítka, pole formulářů, zvuk, video a obchodní logiku.
V tomto článku se naučíme, jak můžeme provádět různé operace jako:

  • Extrahování textu z PDF
  • Otáčení stránek PDF
  • Sloučení souborů PDF
  • Rozdělení PDF
  • Přidání vodoznaku na stránky PDF

Instalace: Pomocí jednoduchých pythonových skriptů!
Budeme používat modul třetí strany, pypdf.
pypdf je knihovna pythonu vytvořená jako sada nástrojů PDF. Je schopen:

  • Extrahování informací o dokumentu (název, autor, …)
  • Rozdělení dokumentů stránku po stránce
  • Slučování dokumentů stránku po stránce
  • Oříznutí stránek
  • Sloučení více stránek do jedné stránky
  • Šifrování a dešifrování souborů PDF
  • a více!

Chcete-li nainstalovat pypdf, spusťte z příkazového řádku následující příkaz:

pip install pypdf 

Tento název modulu rozlišuje velká a malá písmena, takže se ujistěte, že a je malá písmena a vše ostatní je velká písmena. Všechny kódy a soubory PDF použité v tomto tutoriálu/článku jsou k dispozici tady .

1. Extrahování textu ze souboru PDF

Krajta




# 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 výše uvedeného programu vypadá takto:

20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4   [and some more lines...] 

Pokusme se porozumět výše uvedenému kódu po částech:

reader = PdfReader('example.pdf') 
  • Zde vytvoříme objekt PdfReader třídy modulu pypdf a předejte cestu k souboru PDF a získejte objekt čtečky PDF.
print(len(reader.pages)) 
  • stránky vlastnost udává počet stránek v souboru PDF. Například v našem případě je to 20 (viz první řádek výstupu).
pageObj = reader.pages[0] 
  • Nyní vytvoříme objekt PageObject třída modulu pypdf. Objekt čtečky PDF má funkci stránky[] který převezme číslo stránky (počínaje indexem 0) jako argument a vrátí objekt stránky.
print(pageObj.extract_text()) 
  • Objekt stránky má funkci extrakt_text() extrahovat text ze stránky PDF.

Poznámka: I když jsou soubory PDF skvělé pro uspořádání textu způsobem, který je pro lidi snadný k tisku a čtení, není snadné je pro software analyzovat do prostého textu. Jako takový může pypdf dělat chyby při extrahování textu z PDF a dokonce nemusí být možné některé soubory PDF vůbec otevřít. S tím se bohužel moc dělat nedá. pypdf může jednoduše být neschopný pracovat s některými vašimi konkrétními soubory PDF.

2. Otáčení stránek PDF

Krajta




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

Zde můžete vidět, jak na první stránce otočený_příklad.pdf vypadá po otočení jako (pravý obrázek):

Otočení souboru pdf

Některé důležité body související s výše uvedeným kódem:

  • Pro otočení nejprve vytvoříme objekt čtečky PDF původního PDF.
writer = PdfWriter() 
  • Otočené stránky budou zapsány do nového PDF. Pro zápis do PDF používáme objekt PdfWriter třída modulu pypdf.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj) 
  • Nyní iterujeme každou stránku původního PDF. Získáme objekt stránky pomocí .stránky[] metoda třídy PDF reader. Nyní otočíme stránku o točit se() metoda třídy objektu stránky. Potom přidáme stránku do objektu PDF Writer pomocí přírůstek() metoda třídy PDF Writer předáním objektu otočené stránky.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close() 
  • Nyní musíme zapsat stránky PDF do nového souboru PDF. Nejprve otevřeme nový objekt souboru a zapíšeme do něj stránky PDF pomocí napsat() metoda objektu PDF Writer. Nakonec zavřeme původní objekt souboru PDF a nový objekt souboru.

3. Slučování souborů PDF

Krajta




# 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ýstupem výše uvedeného programu je kombinované PDF, kombinovaný_příklad.pdf , získané sloučením example.pdf a otočený_příklad.pdf .

  • Pojďme se podívat na důležité aspekty tohoto programu:
pdfMerger = PdfMerger() 
  • Pro sloučení používáme předpřipravenou třídu, PdfMerger modulu pypdf.
    Zde vytvoříme objekt pdfMerger třídy sloučení PDF
for pdf in pdfs: pdfmerger.append(open(focus, 'rb')) 
  • Nyní připojíme objekt souboru každého PDF k objektu sloučení PDF pomocí připojit() metoda.
with open(output, 'wb') as f: pdfMerger.write(f) 
  • Nakonec zapíšeme stránky PDF do výstupního souboru PDF pomocí napsat metoda objektu sloučení PDF.

4. Rozdělení souboru PDF

Krajta




# 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ýstupem budou tři nové soubory PDF s rozdělení 1 (strana 0,1), rozdělení 2 (strana 2,3), rozdělení 3 (strana 4-konec) .
Ve výše uvedeném programu python nebyla použita žádná nová funkce nebo třída. Pomocí jednoduché logiky a iterací jsme vytvořili rozdělení předaného PDF podle předaného seznamu rozdělí .

5. Přidání vodoznaku na stránky PDF

Krajta




# 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 vypadá první stránka původního (vlevo) a vodoznaku (vpravo) souboru PDF:

Vodoznak do souboru pdf

  • Celý proces je stejný jako v příkladu rotace stránky. Jediný rozdíl je:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page]) 
  • Objekt stránky se převede na objekt stránky s vodoznakem pomocí přidat vodoznak() funkce.
  • Pokusme se pochopit přidat vodoznak() funkce:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj 
  • Především vytvoříme objekt čtečky PDF vodoznak.pdf . K předávanému objektu stránky používáme merge_page() a předat objekt stránky první stránky objektu čtečky PDF vodoznaku. Tím se překryje vodoznak přes předaný objekt stránky.

A tady se dostáváme na konec tohoto dlouhého tutoriálu o práci se soubory PDF v pythonu.
Nyní si můžete snadno vytvořit svého vlastního správce PDF!
Reference:

Pokud se vám líbí techcodeview.com a chtěli byste přispět, můžete také napsat článek pomocí write.techcodeview.com nebo poslat svůj článek na [email protected]
Pokud najdete něco nesprávného nebo pokud chcete sdílet více informací o výše uvedeném tématu, napište prosím komentáře.