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 . Den bruker .pdf utvidelse. Den brukes til å presentere og utveksle dokumenter pålitelig uavhengig av programvaremaskinvare 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 fra felter lydvideo 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:
- Trekker ut dokumentinformasjon (tittelforfatter …)
- 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 pydf kjør følgende kommando fra kommandolinjen:
pip install pypdfDette 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 .
markdown fotnoter
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
August272008
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.
Note: 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 pypdf 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 ganske enkelt ikke fungere med noen av dine spesielle PDF-filer.
streng og understreng
2. Roterende PDF-sider
# 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()
Her kan du se hvordan den første siden av rotert_eksempel.pdf ser slik ut (høyre bilde) etter rotasjon:

java cast int til streng
Noen viktige punkter knyttet til koden ovenfor:
- For rotasjon lager 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)
writer.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')
writer.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 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()
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:
pdfWriter = PdfWriter()- For sammenslåing bruker vi en forhåndsbygd klasse Pdf Writer av pydf-modulen.
Her lager vi et objekt pdf-forfatter av PDF-forfatterklassen
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Nå legger vi til filobjekt for hver PDF til PDF-skriverobjekt ved hjelp av legge til() metode.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Til slutt skriver vi PDF-sidene til utdata-PDF-filen ved hjelp av skrive metode for PDF-skriverobjekt.
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(startend): 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 = [24] # 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 01) delt 2(side 23) delt 3(side 4-ende) .
Ingen ny funksjon eller klasse har blitt brukt i pythonprogrammet ovenfor. Ved å bruke enkel logikk og iterasjoner lagde vi delingene av bestått PDF i henhold til den beståtte listen deler seg .
sdlc livssyklus
5. Legge til vannmerke på PDF-sider
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()
Slik ser den første siden av original (venstre) og vannmerket (høyre) PDF-fil ut:

- 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 add_watermark() funksjon.
- La oss prøve å forstå add_watermark() funksjon:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- Fremst lager vi et PDF-leserobjekt av vannmerke.pdf . Til det beståtte sideobjektet vi bruker 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:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Hvis du liker GeeksforGeeks og ønsker å bidra, kan du også skrive en artikkel ved å bruke write.geeksforgeeks.org eller sende artikkelen til [email protected]. Se artikkelen din som vises på GeeksforGeeks hovedside og hjelp andre nerder.
Vennligst skriv kommentarer hvis du finner noe feil eller hvis du vil dele mer informasjon om emnet diskutert ovenfor.