Työskentely PDF-tiedostojen kanssa Pythonissa
Sinun kaikkien on tiedettävä, mitä PDF-tiedostot ovat. Itse asiassa ne ovat yksi tärkeimmistä ja laajimmin käytetyistä digitaalisista medioista. PDF tarkoittaa Kannettava asiakirjamuoto . Se käyttää .pdf laajennus. Sitä käytetään asiakirjojen esittämiseen ja vaihtamiseen luotettavasti ohjelmistosta, laitteistosta tai käyttöjärjestelmästä riippumatta.
Keksijä Adobe , PDF on nyt Kansainvälisen standardointijärjestön (ISO) ylläpitämä avoin standardi. PDF-tiedostot voivat sisältää linkkejä ja painikkeita, lomakekenttiä, ääntä, videota ja liiketoimintalogiikkaa.
Tässä artikkelissa opimme, kuinka voimme tehdä erilaisia toimintoja, kuten:
- Tekstin purkaminen PDF-tiedostosta
- Kääntyvät PDF-sivut
- PDF-tiedostojen yhdistäminen
- PDF:n jakaminen
- Vesileiman lisääminen PDF-sivuille
Asennus: Käytä yksinkertaisia python-skriptejä!
Käytämme kolmannen osapuolen moduulia, pypdf.
pypdf on python-kirjasto, joka on rakennettu PDF-työkalusarjaksi. Se pystyy:
- Poimitaan asiakirjan tiedot (nimi, tekijä,…)
- Asiakirjojen jakaminen sivulta sivulta
- Asiakirjojen yhdistäminen sivu sivulta
- Sivujen rajaus
- Useiden sivujen yhdistäminen yhdeksi sivuksi
- PDF-tiedostojen salaus ja salauksen purku
- ja enemmän!
Asenna pypdf suorittamalla seuraava komento komentoriviltä:
pip install pypdf
Tässä moduulin nimessä kirjainkoolla on merkitystä, joten varmista, että ja on pieniä kirjaimia ja kaikki muu on isoja. Kaikki tässä opetusohjelmassa/artikkelissa käytetyt koodit ja PDF-tiedostot ovat saatavilla tässä .
1. Tekstin purkaminen PDF-tiedostosta
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())> |
Yllä olevan ohjelman tulos näyttää tältä:
20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4 [and some more lines...]
Yritetään ymmärtää yllä oleva koodi paloina:
reader = PdfReader('example.pdf') - Täällä luomme kohteen PdfReader pypdf-moduulin luokan ja välitä polku PDF-tiedostoon ja hanki PDF-lukuobjekti.
print(len(reader.pages))
- sivuja ominaisuus ilmoittaa PDF-tiedoston sivujen lukumäärän. Esimerkiksi meidän tapauksessamme se on 20 (katso tulosteen ensimmäinen rivi).
pageObj = reader.pages[0]
- Nyt luomme kohteen PageObject pypdf-moduulin luokka. PDF-lukijaobjektilla on toiminto sivut[] joka ottaa sivunumeron (alkaen indeksistä 0) argumenttina ja palauttaa sivuobjektin.
print(pageObj.extract_text())
- Sivuobjektilla on toiminto Pura_teksti() poimia tekstiä PDF-sivulta.
Huomautus: Vaikka PDF-tiedostot sopivat mainiosti tekstin asettamiseen tavalla, joka on helppo tulostaa ja lukea, ohjelmistojen ei ole helppoa jäsentää niitä tavalliseksi tekstiksi. Sellaisenaan pypdf saattaa tehdä virheitä poimiessaan tekstiä PDF-tiedostosta, eikä se välttämättä pysty avaamaan kaikkia PDF-tiedostoja. Sinä et valitettavasti voi tälle paljoa tehdä. pypdf ei ehkä yksinkertaisesti pysty toimimaan joidenkin tiettyjen PDF-tiedostojesi kanssa.
2. Kääntyvät PDF-sivut
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()> |
Täällä voit nähdä, kuinka ensimmäinen sivu rotated_example.pdf näyttää (oikea kuva) pyörityksen jälkeen:
Joitakin yllä olevaan koodiin liittyviä tärkeitä kohtia:
- Kääntöä varten luomme ensin PDF-lukijaobjektin alkuperäisestä PDF-tiedostosta.
writer = PdfWriter()
- Kierretyt sivut kirjoitetaan uuteen PDF-tiedostoon. PDF-tiedostoihin kirjoittamiseen käytämme objektia PdfWriter pypdf-moduulin luokka.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)
- Nyt toistamme alkuperäisen PDF:n jokaisen sivun. Haemme sivuobjektin mukaan .pages[] PDF-lukijaluokan menetelmä. Nyt käännämme sivua kiertää() sivuobjektiluokan menetelmä. Sitten lisäämme sivun PDF-kirjoitusobjektiin käyttämällä lisäys () PDF-kirjoitusluokan menetelmä ohittamalla kierretty sivuobjekti.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()
- Nyt meidän on kirjoitettava PDF-sivut uuteen PDF-tiedostoon. Ensin avaamme uuden tiedostoobjektin ja kirjoitamme siihen PDF-sivuja käyttämällä kirjoittaa() PDF-kirjoitusobjektin menetelmä. Lopuksi suljemme alkuperäisen PDF-tiedostoobjektin ja uuden tiedostoobjektin.
3. PDF-tiedostojen yhdistäminen
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()> |
Yllä olevan ohjelman tulos on yhdistetty PDF, yhdistetty_esimerkki.pdf , saatu yhdistämällä esimerkki.pdf ja rotated_example.pdf .
- Katsotaanpa tämän ohjelman tärkeitä näkökohtia:
pdfMerger = PdfMerger()
- Käytämme yhdistämiseen valmiiksi rakennettua luokkaa, Pdfmerger pypdf-moduulista.
Täällä luomme objektin pdfYhdistäminen PDF-fuusioluokasta
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))
- Nyt liitämme jokaisen PDF-tiedoston tiedostoobjektin PDF-fuusioobjektiin käyttämällä liitä() menetelmä.
with open(output, 'wb') as f: pdfMerger.write(f)
- Lopuksi kirjoitamme PDF-sivut tulostettavaan PDF-tiedostoon käyttämällä kirjoittaa PDF-fuusioobjektin menetelmä.
4. PDF-tiedoston jakaminen
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()> |
Tulos on kolme uutta PDF-tiedostoa jako 1 (sivu 0,1), jako 2 (sivu 2,3), jako 3 (sivu 4-pää) .
Yllä olevassa python-ohjelmassa ei ole käytetty uutta funktiota tai luokkaa. Käytämme yksinkertaista logiikkaa ja iteraatioita, ja loimme hyväksytyn PDF:n jaot hyväksytyn luettelon mukaan halkeaa .
5. Vesileiman lisääminen PDF-sivuille
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()> |
Alkuperäisen (vasemmalla) ja vesileimalla (oikealla) PDF-tiedoston ensimmäinen sivu näyttää tältä:
- Kaikki prosessi on sama kuin sivun kiertoesimerkissä. Ainoa ero on:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])
- Sivuobjekti muunnetaan vesileimaiseksi sivuobjektiksi käyttämällä add_watermark() toiminto.
- Yritetään ymmärtää add_watermark() toiminto:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj
- Ensinnäkin luomme PDF-lukijaobjektin vesileima.pdf . Käytämme hyväksytylle sivuobjektille yhdistä_sivu() funktio ja välitä vesileiman PDF-lukijaobjektin ensimmäisen sivun sivuobjekti. Tämä peittää vesileiman ohitetun sivuobjektin päälle.
Ja tässä pääsemme tämän pitkän opetusohjelman loppuun, joka käsittelee PDF-tiedostojen käyttöä pythonissa.
Nyt voit helposti luoda oman PDF-hallinnan!
Viitteet:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Jos pidät techcodeview.comsta ja haluat osallistua, voit myös kirjoittaa artikkelin osoitteessa write.techcodeview.com tai lähettää artikkelisi sähköpostitse osoitteeseen [email protected]
Kirjoita kommentteja, jos huomaat jotain väärin tai jos haluat jakaa lisätietoja yllä käsitellystä aiheesta.