I skal alle være bekendt med, hvad PDF-filer er. Faktisk er de et af de vigtigste og mest brugte digitale medier. PDF står for Bærbart dokumentformat . Det bruger .pdf udvidelse. Det bruges til at præsentere og udveksle dokumenter pålideligt, uafhængigt af software, hardware eller operativsystem.
Opfundet af Adobe , PDF er nu en åben standard, der vedligeholdes af International Organization for Standardization (ISO). PDF'er kan indeholde links og knapper, formularfelter, lyd, video og forretningslogik.
I denne artikel vil vi lære, hvordan vi kan udføre forskellige operationer som:
- Udtræk tekst fra PDF
- Roterende PDF-sider
- Sammenlægning af PDF-filer
- Opdeling af PDF
- Tilføjelse af vandmærke til PDF-sider
Installation: Brug simple python-scripts!
Vi vil bruge et tredjepartsmodul, pypdf.
pypdf er et python-bibliotek bygget som et PDF-værktøjssæt. Den er i stand til:
- Udtrække dokumentoplysninger (titel, forfatter, …)
- Opdeling af dokumenter side for side
- Sammenfletning af dokumenter side for side
- Beskæring af sider
- Fletning af flere sider til en enkelt side
- Kryptering og dekryptering af PDF-filer
- og mere!
For at installere pypdf skal du køre følgende kommando fra kommandolinjen:
pip install pypdf>
Dette modulnavn skelner mellem store og små bogstaver, så sørg for at og er små bogstaver og alt andet er store bogstaver. Al kode og PDF-filer, der bruges i denne vejledning/artikel, er tilgængelige her .
1. Udpakning af tekst fra PDF-fil
Python
understreng i bash
# 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())> |
>
>
Outputtet af ovenstående program ser sådan ud:
20 PythonBasics S.R.Doty August27,2008 Contents 1Preliminaries 4 1.1WhatisPython?................................... ..4 1.2Installationanddocumentation.................... .........4 [and some more lines...]>
Lad os prøve at forstå ovenstående kode i bidder:
reader = PdfReader('example.pdf')> - Her skaber vi et objekt af Pdf-læser klasse af pypdf-modul og videregive stien til PDF-filen og få et PDF-læserobjekt.
print(len(reader.pages))>
- sider egenskaben angiver antallet af sider i PDF-filen. For eksempel, i vores tilfælde er det 20 (se første linje af output).
pageObj = reader.pages[0]>
- Nu skaber vi et objekt af Sideobjekt klasse af pydf-modul. PDF-læserobjekt har funktion sider[] som tager sidetal (startende fra indeks 0) som argument og returnerer sideobjektet.
print(pageObj.extract_text())>
- Sideobjekt har funktion extract_text() at udtrække tekst fra PDF-siden.
Bemærk: Selvom PDF-filer er gode til at lægge tekst ud på en måde, der er let for folk at udskrive og læse, er de ikke ligetil for software at parse til almindelig tekst. Som sådan kan pydf begå fejl, når tekst udtrækkes fra en PDF og kan endda være ude af stand til at åbne nogle PDF-filer overhovedet. Det er ikke meget du kan gøre ved dette, desværre. pypdf kan simpelthen være ude af stand til at arbejde med nogle af dine særlige 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()> |
java liste node
>
>
Her kan du se, hvordan den første side af roteret_eksempel.pdf ser ud som (højre billede) efter rotation:
tilføje til array java

Nogle vigtige punkter relateret til ovenstående kode:
- Til rotation opretter vi først et PDF-læserobjekt af den originale PDF.
writer = PdfWriter()>
- Roterede sider vil blive skrevet til en ny PDF. Til at skrive til PDF'er bruger vi genstanden for Pdf Writer klasse af pydf-modul.
for page in range(len(pdfReader.pages)): pageObj = pdfReader.pages[page] pageObj.rotate(rotation) pdfWriter.add_page(pageObj)>
- Nu gentager vi hver side i den originale PDF. Vi får sideobjekt ved .sider[] metode til PDF-læserklasse. Nu roterer vi siden med rotere() metode til sideobjektklasse. Derefter tilføjer vi en side til PDF-skriverobjekt ved hjælp af addage() metode til PDF-skriverklasse ved at sende det roterede sideobjekt.
newFile = open(newFileName, 'wb') pdfWriter.write(newFile) newFile.close()>
- Nu skal vi skrive PDF-siderne til en ny PDF-fil. For det første åbner vi det nye filobjekt og skriver PDF-sider til det ved hjælp af skrive() metode til PDF-skriverobjekt. Til sidst lukker vi det originale PDF-filobjekt og det nye filobjekt.
3. Sammenlægning af 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()> |
>
>
Outputtet af ovenstående program er en kombineret PDF, kombineret_eksempel.pdf , opnået ved sammenlægning eksempel.pdf og roteret_eksempel.pdf .
- Lad os se på vigtige aspekter af dette program:
pdfMerger = PdfMerger()>
- Til sammenlægning bruger vi en præbygget klasse, Pdffusion af pydf-modulet.
Her skaber vi et objekt pdffusion af PDF-fusionsklasse
for pdf in pdfs: pdfmerger.append(open(focus, 'rb'))>
- Nu tilføjer vi filobjekt for hver PDF til PDF-fusionsobjekt ved hjælp af Tilføj() metode.
with open(output, 'wb') as f: pdfMerger.write(f)>
- Til sidst skriver vi PDF-siderne til output-PDF-filen ved hjælp af skrive metode til PDF-fusionsobjekt.
4. Opdeling af PDF-fil
Python
do and while loop i java
# 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()> |
>
>
Output vil være tre nye PDF-filer med split 1 (side 0,1), split 2 (side 2,3), split 3 (side 4-ende) .
Ingen ny funktion eller klasse er blevet brugt i ovenstående python-program. Ved hjælp af simpel logik og iterationer oprettede vi opdelingerne af bestået PDF i henhold til den beståede liste splitter .
5. Tilføjelse af vandmærke til 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()> |
java forekomst af
>
>
Sådan ser den første side af den originale (venstre) og vandmærkede (højre) PDF-fil ud:

- Hele processen er den samme som eksemplet med siderotation. Eneste forskel er:
wmpageObj = add_watermark(mywatermark, pdfReader.pages[page])>
- Sideobjekt konverteres til vandmærket sideobjekt vha Tilføj vandmærke() fungere.
- Lad os prøve at forstå Tilføj vandmærke() fungere:
reader = PdfReader(wmFile) pageObj.merge_page(reader.pages[0]) wmFileObj.close() return pageObj>
- Først og fremmest opretter vi et PDF-læserobjekt af vandmærke.pdf . Til det beståede sideobjekt bruger vi merge_page() funktion og videregive sideobjektet på den første side af vandmærke PDF-læserobjektet. Dette vil overlejre vandmærket over det beståede sideobjekt.
Og her når vi slutningen af denne lange tutorial om at arbejde med PDF-filer i python.
Nu kan du nemt oprette din egen PDF-manager!
Referencer:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Hvis du kan lide techcodeview.com og gerne vil bidrage, kan du også skrive en artikel ved at bruge write.techcodeview.com eller maile din artikel til [email protected]
Skriv venligst kommentarer, hvis du finder noget forkert, eller hvis du vil dele flere oplysninger om emnet diskuteret ovenfor.