Delo z datotekami PDF v Pythonu

Delo z datotekami PDF v Pythonu

Vsi morate vedeti, kaj so PDF-ji. Pravzaprav so eden najpomembnejših in najbolj razširjenih digitalnih medijev. PDF pomeni Prenosni format dokumenta . Uporablja se .pdf razširitev. Uporablja se za zanesljivo predstavitev in izmenjavo dokumentov, neodvisno od programske, strojne opreme ali operacijskega sistema.
Izumil Adobe , PDF je zdaj odprt standard, ki ga vzdržuje Mednarodna organizacija za standardizacijo (ISO). PDF-ji lahko vsebujejo povezave in gumbe, polja obrazcev, zvok, video in poslovno logiko.
V tem članku se bomo naučili, kako lahko izvajamo različne operacije, kot so:

  • Pridobivanje besedila iz PDF-ja
  • Vrtenje strani PDF
  • Združevanje datotek PDF
  • Razdelitev PDF
  • Dodajanje vodnega žiga na strani PDF

Namestitev: Uporaba preprostih skriptov python!
Uporabili bomo modul tretje osebe, pypdf.
pypdf je knjižnica python, zgrajena kot komplet orodij PDF. Sposoben je:

  • Izvleček podatkov o dokumentu (naslov, avtor, …)
  • Razdelitev dokumentov po straneh
  • Spajanje dokumentov stran za stranjo
  • Obrezovanje strani
  • Spajanje več strani v eno stran
  • Šifriranje in dešifriranje datotek PDF
  • in več!

Če želite namestiti pypdf, zaženite naslednji ukaz iz ukazne vrstice:

pip install pypdf 

To ime modula razlikuje med velikimi in malimi črkami, zato se prepričajte, da je in je z malimi črkami in vse ostalo je z velikimi črkami. Na voljo so vsa koda in datoteke PDF, uporabljene v tej vadnici/članku tukaj .

1. Ekstrahiranje besedila iz datoteke 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())>

Rezultat zgornjega programa je videti takole:

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

Poskusimo razumeti zgornjo kodo v delih:

reader = PdfReader('example.pdf') 
  • Tukaj ustvarimo predmet PdfReader razreda modula pypdf in posredujte pot do datoteke PDF ter pridobite objekt bralnika PDF.
print(len(reader.pages)) 
  • strani podaja število strani v datoteki PDF. Na primer, v našem primeru je 20 (glejte prvo vrstico izpisa).
pageObj = reader.pages[0] 
  • Zdaj ustvarimo predmet PageObject razred modula pypdf. Predmet bralnika PDF ima funkcijo strani [] ki vzame številko strani (začenši z indeksom 0) kot argument in vrne objekt strani.
print(pageObj.extract_text()) 
  • Predmet strani ima funkcijo izvleček_besedila() za ekstrahiranje besedila s strani PDF.

Opomba: Medtem ko so datoteke PDF odlične za postavitev besedila na način, ki ga ljudje enostavno natisnejo in preberejo, jih programska oprema ne more preprosto razčleniti v golo besedilo. Kot tak lahko pypdf dela napake pri pridobivanju besedila iz PDF-ja in nekaterih PDF-jev morda sploh ne more odpreti. Na žalost glede tega ne morete veliko storiti. pypdf morda preprosto ne bo mogel delati z nekaterimi vašimi datotekami PDF.

2. Vrtenje strani 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()>

Tukaj si lahko ogledate, kako na prvi strani rotated_example.pdf izgleda (desna slika) po rotaciji:

Vrtenje pdf datoteke

Nekaj ​​pomembnih točk, povezanih z zgornjo kodo:

  • Za rotacijo najprej ustvarimo predmet bralnika PDF izvirnega PDF-ja.
writer = PdfWriter() 
  • Zasukane strani bodo zapisane v nov PDF. Za pisanje v PDF uporabljamo objekt of PdfWriter razred modula pypdf.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj) 
  • Zdaj ponovimo vsako stran izvirnega PDF-ja. Predmet strani dobimo z .pages[] metoda PDF Reader razreda. Zdaj pa stran zavrtimo za vrti() metoda razreda objektov strani. Nato dodamo stran predmetu zapisovalnika PDF z uporabo dodatek() metoda razreda zapisovalnika PDF s posredovanjem predmeta zasukane strani.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close() 
  • Zdaj moramo strani PDF zapisati v novo datoteko PDF. Najprej odpremo nov predmet datoteke in vanj zapišemo strani PDF z uporabo pisati() metoda predmeta zapisovalnika PDF. Na koncu zapremo izvirni objekt datoteke PDF in objekt nove datoteke.

3. Združevanje datotek 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()>

Rezultat zgornjega programa je kombiniran PDF, kombinirani_primer.pdf , pridobljeno z združitvijo primer.pdf in rotated_example.pdf .

  • Oglejmo si pomembne vidike tega programa:
pdfMerger = PdfMerger() 
  • Za združevanje uporabljamo vnaprej zgrajen razred, PdfMerger modula pypdf.
    Tukaj ustvarimo predmet pdfMerger združitvenega razreda PDF
for pdf in pdfs: pdfmerger.append(open(focus, 'rb')) 
  • Zdaj dodamo datotečni objekt vsakega PDF-ja objektu združevanja PDF z uporabo pripni() metoda.
with open(output, 'wb') as f: pdfMerger.write(f) 
  • Na koncu zapišemo strani PDF v izhodno datoteko PDF z uporabo pisati metoda združitvenega predmeta PDF.

4. Razdelitev datoteke 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()>

Rezultat bodo tri nove datoteke PDF z del 1 (stran 0,1), del 2 (stran 2,3), del 3 (stran 4-konec) .
V zgornjem programu python ni bila uporabljena nobena nova funkcija ali razred. Z uporabo preproste logike in iteracij smo ustvarili razdelitve prejetih PDF-jev glede na seznam prejetih razcepi .

5. Dodajanje vodnega žiga na strani 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()>

Tukaj je videti prva stran izvirne (levo) in z vodnim žigom (desno) datoteke PDF:

Vodni žig datoteke pdf

  • Celoten postopek je enak kot v primeru vrtenja strani. Edina razlika je:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page]) 
  • Predmet strani se pretvori v objekt strani z vodnim žigom z uporabo add_watermark() funkcijo.
  • Poskusimo razumeti add_watermark() funkcija:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj 
  • Predvsem ustvarimo objekt bralnika PDF vodni žig.pdf . Predmetu strani uporabimo merge_page() funkcijo in posreduje predmet strani prve strani predmeta bralnika PDF z vodnim žigom. To bo prekrivalo vodni žig čez objekt strani, ki ste jo opravili.

In tukaj smo prišli do konca te dolge vadnice o delu z datotekami PDF v pythonu.
Zdaj lahko preprosto ustvarite svojega upravitelja PDF!
Reference:

Če vam je všeč techcodeview.com in bi radi prispevali, lahko tudi napišete članek z uporabo write.techcodeview.com ali svoj članek pošljete na naslov [email protected]
Prosimo, napišite komentarje, če najdete karkoli napačnega ali če želite deliti več informacij o zgoraj obravnavani temi.