logo

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

int řetězec




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