Ni måste alla vara bekanta med vad PDF-filer är. De är faktiskt ett av de viktigaste och mest använda digitala medierna. PDF står för Portabelt dokumentformat . Den använder .pdf förlängning. Den används för att presentera och utbyta dokument på ett tillförlitligt sätt oberoende av 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 från fält ljudvideo och affärslogik.
I den här artikeln kommer vi att lära oss hur vi kan utföra olika operationer som:
- 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 (titelfö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 pypdfDetta 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 .
ersätter sträng i java
1. Extrahera text från 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())
Utdata från ovanstående program ser ut så här:
20
PythonBasics
S.R.Doty
August272008
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:
java sträng till int konvertering
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
# 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()
Här kan du se hur den första sidan av roterat_exempel.pdf ser ut som (höger bild) efter rotation:

Några viktiga punkter relaterade till ovanstående kod:
- För rotation skapar vi först ett PDF-läsobjekt 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 objektet för Pdf Writer klass av pydf-modul.
for page in range(len(pdfReader.pages)):
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
- Nu itererar vi varje sida i den ursprungliga PDF-filen. Vi får sidobjekt av .pages[] metod för PDF-läsare klass. Nu roterar vi sidan med rotera() metod för sidobjektklass. Sedan lägger vi till en sida till PDF-skrivobjekt med hjälp av tillägga() metoden för PDF-skrivarklass genom att skicka det roterade sidobjektet.
newFile = open(newFileName 'wb')
writer.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
insättningssort i javaPython
# 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()
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:
pdfWriter = PdfWriter()- För sammanslagning använder vi en förbyggd klass Pdf Writer av pydf-modulen.
Här skapar vi ett objekt pdfwriter av klassen för PDF-författare
# appending pdfs one by one
for pdf in pdfs:
pdfWriter.append(pdf)
- Nu lägger vi till filobjekt för varje PDF till PDF-skrivarobjekt med hjälp av bifoga() metod.
# writing combined pdf to output pdf file
with open(output 'wb') as f:
pdfWriter.write(f)
- Slutligen skriver vi PDF-sidorna till utdata-PDF-filen med hjälp av skriva metod för PDF-skrivarobjekt.
4. Dela 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 kommer att vara tre nya PDF-filer med del 1 (sida 01) del 2(sida 23) del 3(sida 4-slut) .
Ingen ny funktion eller klass har använts i ovanstående python-program. Med hjälp av enkel logik och iterationer skapade vi uppdelningarna av godkänd PDF enligt den godkända listan splittringar .
sträng i c++
5. Lägga till vattenstämpel på PDF-sidor
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()
Så här ser den första sidan av original (vänster) och vattenmärkt (höger) PDF-fil ut:

- 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 add_watermark() fungera.
- Låt oss försöka förstå add_watermark() fungera:
reader = PdfReader(wmFile)
pageObj.merge_page(reader.pages[0])
return pageObj
- Främst skapar vi ett PDF-läsarobjekt av vattenmärke.pdf . Till det passerade sidobjektet vi använder 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:
- https://automatetheboringstuff.com/chapter13/
- https://pypi.org/project/pypdf/
Om du gillar GeeksforGeeks och vill bidra kan du också skriva en artikel med write.geeksforgeeks.org eller maila din artikel till [email protected]. Se din artikel som visas på GeeksforGeeks huvudsida och hjälp andra nördar.
Skriv kommentarer om du hittar något felaktigt eller om du vill dela mer information om ämnet som diskuterats ovan.