logo

Arbeta med PDF-filer i Python

Ni måste alla vara bekanta med vad PDF-filer är. Faktum är att de är ett av de viktigaste och mest använda digitala medierna. PDF står för Portabelt dokumentformat . Det använder .pdf förlängning. Den används för att presentera och utbyta dokument på ett tillförlitligt sätt, oberoende av mjukvara, hårdvara eller operativsystem.
Uppfunnet av Adobe , PDF är nu en öppen standard som underhålls av International Organization for Standardization (ISO). PDF-filer kan innehålla länkar och knappar, formulärfält, ljud, video och affärslogik.
I den här artikeln kommer vi att lära oss hur vi kan utföra olika operationer som:

watchcartoononline.io alternativ
  • Extrahera text från PDF
  • Roterande PDF-sidor
  • Slå ihop PDF-filer
  • Dela upp PDF
  • Lägger till vattenstämpel på PDF-sidor

Installation: Använd enkla python-skript!
Vi kommer att använda en tredjepartsmodul, pypdf.
pypdf är ett pythonbibliotek byggt som en PDF-verktygslåda. Den kan:



  • Extrahera dokumentinformation (titel, författare, …)
  • Dela upp dokument sida för sida
  • Sammanfoga dokument sida för sida
  • Beskär sidor
  • Slå ihop flera sidor till en enda sida
  • Kryptera och dekryptera PDF-filer
  • och mer!

För att installera pydf, kör följande kommando från kommandoraden:

pip install pypdf>

Detta modulnamn är skiftlägeskänsligt, så se till att och är gemener och allt annat är versaler. All kod och PDF-filer som används i denna handledning/artikel är tillgängliga här .

1. Extrahera text från PDF-fil



Pytonorm






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

>

>

Utdata från ovanstående program ser ut så här:

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

Låt oss försöka förstå ovanstående kod i bitar:

reader = PdfReader('example.pdf')>
  • Här skapar vi ett objekt av PdfReader klass av pypdf-modul och skicka sökvägen till PDF-filen och få ett PDF-läsarobjekt.
print(len(reader.pages))>
  • sidor egenskapen anger antalet sidor i PDF-filen. Till exempel, i vårt fall är det 20 (se första utdataraden).
pageObj = reader.pages[0]>
  • Nu skapar vi ett objekt av PageObject klass av pydf-modul. PDF-läsarobjekt har funktion sidor[] som tar sidnummer (med början från index 0) som argument och returnerar sidobjektet.
print(pageObj.extract_text())>
  • Sidobjekt har funktion extrakt_text() för att extrahera text från PDF-sidan.

Notera: Även om PDF-filer är bra för att lägga ut text på ett sätt som är lätt för människor att skriva ut och läsa, är de inte enkla för programvara att tolka till klartext. Som sådan kan pypdf göra misstag när man extraherar text från en PDF och kanske till och med inte kan öppna vissa PDF-filer alls. Det är inte mycket du kan göra åt detta, tyvärr. pypdf kanske helt enkelt inte kan fungera med vissa av dina PDF-filer.

2. Roterande PDF-sidor

Pytonorm




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

>

>

Här kan du se hur den första sidan av roterat_exempel.pdf ser ut som (höger bild) efter rotation:

Rotera en pdf-fil

Några viktiga punkter relaterade till ovanstående kod:

  • För rotation skapar vi först ett PDF-läsarobjekt av den ursprungliga PDF-filen.
writer = PdfWriter()>
  • Roterade sidor kommer att skrivas till en ny PDF. För att skriva till PDF-filer använder vi föremålet för Pdf Writer klass av pydf-modul.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)>
  • Nu upprepar vi varje sida i den ursprungliga PDF-filen. Vi får sidobjekt av .pages[] metod för PDF-läsarklass. Nu roterar vi sidan med rotera() metod för sidobjektklass. Sedan lägger vi till en sida till PDF-skrivobjekt med hjälp av addage() metoden för PDF-skrivarklassen genom att skicka det roterade sidobjektet.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
  • Nu måste vi skriva PDF-sidorna till en ny PDF-fil. Först öppnar vi det nya filobjektet och skriver PDF-sidor till det med hjälp av skriva() metod för PDF-skrivarobjekt. Slutligen stänger vi det ursprungliga PDF-filobjektet och det nya filobjektet.

3. Sammanfoga PDF-filer

Pytonorm




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

>

>

Utdata från ovanstående program är en kombinerad PDF, kombinerat_exempel.pdf , erhålls genom sammanslagning exempel.pdf och roterat_exempel.pdf .

  • Låt oss ta en titt på viktiga aspekter av detta program:
pdfMerger = PdfMerger()>
  • För sammanslagning använder vi en förbyggd klass, PdfMerger av pydf-modulen.
    Här skapar vi ett objekt pdfMerger av PDF-fusionsklass
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
  • Nu lägger vi till filobjekt för varje PDF till PDF-fusionsobjekt med hjälp av bifoga() metod.
with open(output, 'wb') as f: pdfMerger.write(f)>
  • Slutligen skriver vi PDF-sidorna till den utgående PDF-filen med hjälp av skriva metod för PDF-fusionsobjekt.

4. Dela PDF-fil

Pytonorm




# 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 kommer att vara tre nya PDF-filer med del 1 (sida 0,1), del 2(sida 2,3), del 3(sida 4-slut) .
Ingen ny funktion eller klass har använts i ovanstående python-program. Med enkel logik och iterationer skapade vi uppdelningarna av godkänd PDF enligt den godkända listan delar upp .

5. Lägga till vattenstämpel på PDF-sidor

Pytonorm




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

>

>

Så här ser den första sidan av original (vänster) och vattenmärkt (höger) PDF-fil ut:

Vattenmärka pdf-filen

  • Hela processen är densamma som sidrotationsexemplet. Enda skillnaden är:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])>
  • Sidobjekt konverteras till vattenmärkt sidobjekt med hjälp av Lägg till vattenstämpel() fungera.
  • Låt oss försöka förstå Lägg till vattenstämpel() fungera:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
  • Främst skapar vi ett PDF-läsarobjekt av vattenmärke.pdf . Till det passerade sidobjektet använder vi merge_page() funktion och skicka sidobjektet för den första sidan i PDF-läsarobjektet för vattenstämpel. Detta kommer att lägga vattenstämpeln över det passerade sidobjektet.

Och här når vi slutet av denna långa handledning om att arbeta med PDF-filer i python.
Nu kan du enkelt skapa din egen PDF-hanterare!
Referenser:

Om du gillar techcodeview.com och vill bidra kan du också skriva en artikel med write.techcodeview.com eller maila din artikel till [email protected]
Skriv kommentarer om du hittar något felaktigt eller om du vill dela mer information om ämnet som diskuterats ovan.