Työskentely PDF-tiedostojen kanssa Pythonissa
Sinun kaikkien on tunnettava PDF-tiedostot. 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 ohjelmistolaitteistosta 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 ääni-video- ja liiketoimintalogiikkakentille.
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 tietoja (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 pypdfTä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
August272008
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ää tekstiksi. Näin ollen pypdf saattaa tehdä virheitä poimiessaan tekstiä PDF-tiedostosta, eikä se välttämättä pysty avaamaan joitain PDF-tiedostoja ollenkaan. Sinä et valitettavasti voi tehdä tälle paljoa. pypdf ei ehkä yksinkertaisesti pysty toimimaan joidenkin tiettyjen PDF-tiedostojesi kanssa.
2. Kääntyvät PDF-sivut
# 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 ()
Täältä näet, miten ensimmäinen sivu rotated_example.pdf näyttää tältä (oikea kuva) pyörityksen jälkeen:
Joitakin yllä olevaan koodiin liittyviä tärkeitä kohtia:
- Kiertoa 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)
writer.add_page(pageObj)
- Nyt toistamme alkuperäisen PDF:n jokaisen sivun. Saamme sivuobjektin .pages[] PDF-lukijaluokan menetelmä. Nyt käännämme sivua kiertää() sivuobjektiluokan menetelmä. Sitten lisäämme sivun PDF-kirjoitusobjektiin käyttämällä lisätä() PDF-kirjoitusluokan menetelmä ohittamalla kierretty sivuobjekti.
newFile = open(newFileName 'wb')
writer.write(newFile)
newFile.close()
- Nyt meidän on kirjoitettava PDF-sivut uuteen PDF-tiedostoon. Ensin avataan uusi tiedostoobjekti ja kirjoitetaan siihen PDF-sivuja käyttämällä kirjoittaa() PDF-kirjoitusobjektin menetelmä. Lopuksi suljemme alkuperäisen PDF-tiedoston objektin ja uuden tiedostoobjektin.
3. PDF-tiedostojen yhdistäminen
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 ()
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:
pdfWriter = PdfWriter() - Käytämme yhdistämiseen valmiiksi rakennettua luokkaa PdfWriter pypdf-moduulista.
Täällä luomme objektin pdfwriter PDF-kirjoittajaluokasta
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Nyt liitämme jokaisen PDF-tiedoston tiedostoobjektin PDF-kirjoitusobjektiin käyttämällä liitä() menetelmä.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Lopuksi kirjoitamme PDF-sivut tulostettavaan PDF-tiedostoon käyttämällä kirjoittaa PDF-kirjoitusobjektin 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 01) jako 2 (sivu 23) jako 3 (sivu 4-pää) .
Yllä olevassa python-ohjelmassa ei ole käytetty uutta funktiota tai luokkaa. Yksinkertaista logiikkaa ja iteraatioita käyttämällä loimme läpäissyt PDF-osat läpäisyluettelon mukaan halkeaa .
5. Vesileiman lisääminen PDF-sivuille
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 ()
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])
return pageObj
- Ensinnäkin luomme PDF-lukijaobjektin vesileima.pdf . Käytämme hyväksyttyyn sivuobjektiin 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 GeeksforGeeksistä ja haluat osallistua, voit myös kirjoittaa artikkelin osoitteessa write.geeksforgeeks.org tai lähettää artikkelisi osoitteeseen [email protected]. Katso artikkelisi ilmestyvän GeeksforGeeks-pääsivulle ja auta muita nörtejä.
Kirjoita kommentteja, jos huomaat jotain väärin tai haluat jakaa lisätietoja yllä käsitellystä aiheesta.