Arbeide med PDF-filer i Python

Arbeide med PDF-filer i Python

Alle må være kjent med hva PDF-filer er. Faktisk er de et av de viktigste og mest brukte digitale mediene. PDF står for Bærbart dokumentformat . Det bruker .pdf Utvidelse. Den brukes til å presentere og utveksle dokumenter pålitelig, uavhengig av programvare, maskinvare eller operativsystem.
Oppfunnet av Adobe , PDF er nå en åpen standard vedlikeholdt av International Organization for Standardization (ISO). PDF-filer kan inneholde lenker og knapper, skjemafelt, lyd, video og forretningslogikk.
I denne artikkelen vil vi lære hvordan vi kan utføre ulike operasjoner som:

  • Trekker ut tekst fra PDF
  • Roterende PDF-sider
  • Slå sammen PDF-er
  • Deling av PDF
  • Legger til vannmerke på PDF-sider

Installasjon: Bruk enkle python-skript!
Vi vil bruke en tredjepartsmodul, pypdf.
pypdf er et python-bibliotek bygget som et PDF-verktøysett. Den er i stand til:

  • Trekke ut dokumentinformasjon (tittel, forfatter, ...)
  • Del opp dokumenter side for side
  • Slå sammen dokumenter side for side
  • Beskjæring av sider
  • Slå sammen flere sider til én enkelt side
  • Kryptering og dekryptering av PDF-filer
  • og mer!

For å installere pypdf, kjør følgende kommando fra kommandolinjen:

pip install pypdf 

Dette modulnavnet skiller mellom store og små bokstaver, så sørg for at og er små bokstaver og alt annet er store bokstaver. All koden og PDF-filene som brukes i denne opplæringen/artikkelen er tilgjengelige her .

1. Trekke ut tekst fra PDF-fil

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

Utdataene fra programmet ovenfor ser slik ut:

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

La oss prøve å forstå koden ovenfor i biter:

reader = PdfReader('example.pdf') 
  • Her lager vi et objekt av PdfReader klasse av pypdf-modulen og gi stien til PDF-filen og få et PDF-leserobjekt.
print(len(reader.pages)) 
  • sider egenskapen gir antall sider i PDF-filen. For eksempel, i vårt tilfelle, er det 20 (se første linje med utdata).
pageObj = reader.pages[0] 
  • Nå lager vi et objekt av Sideobjekt klasse av pydf-modulen. PDF-leserobjekt har funksjon sider[] som tar sidenummer (starter fra indeks 0) som argument og returnerer sideobjektet.
print(pageObj.extract_text()) 
  • Sideobjekt har funksjon extract_text() for å trekke ut tekst fra PDF-siden.

Merk: Mens PDF-filer er flotte for å legge ut tekst på en måte som er lett for folk å skrive ut og lese, er de ikke enkle for programvare å analysere til ren tekst. Som sådan kan pydf gjøre feil når du trekker ut tekst fra en PDF og kan til og med være ute av stand til å åpne noen PDF-filer i det hele tatt. Det er ikke mye du kan gjøre med dette, dessverre. pypdf kan rett og slett ikke fungere med noen av dine spesielle PDF-filer.

2. Roterende PDF-sider

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

Her kan du se hvordan den første siden av rotert_eksempel.pdf ser slik ut (høyre bilde) etter rotasjon:

Rotere en pdf-fil

Noen viktige punkter knyttet til koden ovenfor:

  • For rotasjon oppretter vi først et PDF-leserobjekt av den originale PDF-en.
writer = PdfWriter() 
  • Roterte sider vil bli skrevet til en ny PDF. For å skrive til PDF-er bruker vi objektet til Pdf Writer klasse av pydf-modulen.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj) 
  • Nå gjentar vi hver side i den originale PDF-filen. Vi får sideobjekt ved .pages[] metode for PDF-leserklasse. Nå roterer vi siden etter rotere() metode for sideobjektklasse. Deretter legger vi til en side til PDF-skriverobjekt ved hjelp av addage() metode for PDF-skriverklassen ved å sende det roterte sideobjektet.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close() 
  • Nå må vi skrive PDF-sidene til en ny PDF-fil. Først åpner vi det nye filobjektet og skriver PDF-sider til det ved hjelp av skrive() metode for PDF-skriverobjekt. Til slutt lukker vi det originale PDF-filobjektet og det nye filobjektet.

3. Slå sammen PDF-filer

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

Utdataene fra programmet ovenfor er en kombinert PDF, kombinert_eksempel.pdf , oppnådd ved sammenslåing eksempel.pdf og rotert_eksempel.pdf .

  • La oss ta en titt på viktige aspekter ved dette programmet:
pdfMerger = PdfMerger() 
  • For sammenslåing bruker vi en forhåndsbygd klasse, PdfMerger av pydf-modulen.
    Her lager vi et objekt pdfFusjon av PDF-fusjonsklasse
for pdf in pdfs: pdfmerger.append(open(focus, 'rb')) 
  • Nå legger vi til filobjekt for hver PDF til PDF-fusjonsobjekt ved å bruke legge til() metode.
with open(output, 'wb') as f: pdfMerger.write(f) 
  • Til slutt skriver vi PDF-sidene til utdata-PDF-filen ved hjelp av skrive metode for PDF-fusjonsobjekt.

4. Deling av PDF-fil

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

Utdata vil være tre nye PDF-filer med delt 1 (side 0,1), delt 2(side 2,3), delt 3(side 4-ende) .
Ingen ny funksjon eller klasse har blitt brukt i pythonprogrammet ovenfor. Ved å bruke enkel logikk og iterasjoner opprettet vi delingene av bestått PDF i henhold til den beståtte listen deler seg .

5. Legge til vannmerke på PDF-sider

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

Slik ser den første siden av original (venstre) og vannmerket (høyre) PDF-fil ut:

Vannmerke pdf-filen

  • Hele prosessen er den samme som siderotasjonseksemplet. Eneste forskjellen er:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page]) 
  • Sideobjekt konverteres til vannmerket sideobjekt ved hjelp av Legg til vannmerke() funksjon.
  • La oss prøve å forstå Legg til vannmerke() funksjon:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj 
  • Fremst lager vi et PDF-leserobjekt av vannmerke.pdf . Til det beståtte sideobjektet bruker vi merge_page() funksjon og send sideobjektet til den første siden av PDF-leserobjektet for vannmerke. Dette vil legge vannmerket over det passerte sideobjektet.

Og her kommer vi til slutten av denne lange opplæringen om å jobbe med PDF-filer i python.
Nå kan du enkelt lage din egen PDF-behandler!
Referanser:

Hvis du liker techcodeview.com og ønsker å bidra, kan du også skrive en artikkel ved å bruke write.techcodeview.com eller sende artikkelen til [email protected]
Vennligst skriv kommentarer hvis du finner noe feil, eller hvis du vil dele mer informasjon om emnet diskutert ovenfor.