logo

Lucrul cu fișiere PDF în Python

Cu toții trebuie să fiți familiarizați cu ce sunt PDF-urile. De fapt, acestea sunt una dintre cele mai importante și mai utilizate medii digitale. PDF înseamnă Format de document portabil . Se foloseste .pdf extensie. Este folosit pentru a prezenta și a schimba documente în mod fiabil, independent de hardware-ul software sau de sistemul de operare.
Inventat de Chirpici PDF este acum un standard deschis menținut de Organizația Internațională pentru Standardizare (ISO). PDF-urile pot conține link-uri și butoane din câmpuri audio video și logica de afaceri.
În acest articol vom afla cum putem face diverse operațiuni precum:
 

  • Extragerea textului din PDF
  • Rotirea paginilor PDF
  • Îmbinarea PDF-urilor
  • Împărțirea PDF-ului
  • Adăugarea filigranului la paginile PDF

Instalare: Folosind scripturi Python simple!
Vom folosi un modul terț pypdf.
pypdf este o bibliotecă python construită ca un set de instrumente PDF. Este capabil de:
 

  • Extragerea informațiilor documentului (autorul titlului...)
  • Împărțirea documentelor pagină cu pagină
  • Îmbinarea documentelor pagină cu pagină
  • Decuparea paginilor
  • Îmbinarea mai multor pagini într-o singură pagină
  • Criptarea și decriptarea fișierelor PDF
  • si mai mult!

Pentru a instala pypdf, rulați următoarea comandă din linia de comandă:



pip install pypdf

Numele acestui modul face distincția între majuscule și minuscule, așa că asigurați-vă că şi este cu litere mici și orice altceva este cu litere mari. Toate codurile și fișierele PDF utilizate în acest tutorial/articol sunt disponibile Aici .

adăugați la o matrice în java

1. Extragerea textului din fișierul PDF

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

Ieșirea programului de mai sus arată astfel:
 

java pentru buclă
20  
PythonBasics
S.R.Doty
August272008
Contents

1Preliminaries
4
1.1WhatisPython?...................................
..4
1.2Installationanddocumentation....................
.........4 [and some more lines...]

Să încercăm să înțelegem codul de mai sus în bucăți:
 

reader = PdfReader('example.pdf')  
  • Aici creăm un obiect de PdfReader clasa de modul pypdf și transmiteți calea către fișierul PDF și obțineți un obiect de citire PDF.
     
print(len(reader.pages))  
  • pagini proprietatea oferă numărul de pagini din fișierul PDF. De exemplu, în cazul nostru, este 20 (vezi prima linie de ieșire).
     
pageObj = reader.pages[0]  
  • Acum creăm un obiect de PageObject clasa modulului pypdf. Obiectul cititor PDF are funcție pagini[] care ia numărul paginii (începând de la indexul 0) ca argument și returnează obiectul pagină.
     
print(pageObj.extract_text())  
  • Obiectul pagină are funcție extract_text() pentru a extrage text din pagina PDF.


Nota: În timp ce fișierele PDF sunt grozave pentru aranjarea textului într-un mod ușor de imprimat și citit de către oameni, software-ul nu este ușor de analizat în text simplu. Ca atare, pypdf poate face greșeli atunci când extrage text dintr-un PDF și poate chiar să nu poată deschide deloc unele PDF-uri. Din păcate, nu prea poți face în acest sens. pypdf ar putea pur și simplu să nu poată funcționa cu unele dintre fișierele PDF specifice.

2. Rotirea paginilor PDF
 

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

Aici puteți vedea cum este prima pagină a exemplu_rotat.pdf arată ca (imaginea din dreapta) după rotire:

Rotirea unui fișier pdf' title=

Câteva puncte importante legate de codul de mai sus:
 

  • Pentru rotație creăm mai întâi un obiect de citire PDF al PDF-ului original.
writer = PdfWriter()  
  • Paginile rotite vor fi scrise într-un nou PDF. Pentru a scrie în PDF-uri folosim obiectul de PdfWriter clasa modulului pypdf.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Acum repetăm ​​fiecare pagină a PDF-ului original. Obținem obiectul paginii de .pagini[] metoda clasei de citire PDF. Acum rotim pagina roti() metoda clasei de obiecte de pagină. Apoi adăugăm o pagină la obiectul PDF writer folosind adăuga() metoda clasei de redactare PDF prin trecerea obiectului pagină rotită.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Acum trebuie să scriem paginile PDF într-un fișier PDF nou. Mai întâi deschidem noul obiect fișier și scriem pagini PDF în el folosind scrie() metoda obiectului writer PDF. În cele din urmă, închidem obiectul fișier PDF original și noul obiect fișier.

3. Îmbinarea fișierelor PDF

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

Rezultatul programului de mai sus este un PDF combinat exemplu_combinat.pdf obtinut prin contopire exemplu.pdf şi exemplu_rotat.pdf .
 

  • Să aruncăm o privire asupra aspectelor importante ale acestui program:
     
pdfWriter = PdfWriter()
  • Pentru fuziune folosim o clasă pre-construită PdfWriter a modulului pypdf.
    Aici creăm un obiect pdfwriter din clasa de redactare PDF
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Acum adăugăm obiectul fișierului fiecărui PDF la obiectul de redactare PDF folosind adăuga() metodă.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • În cele din urmă scriem paginile PDF în fișierul PDF de ieșire folosind scrie metoda obiectului writer PDF.

4. Împărțirea fișierului PDF

string.substring java
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() 

Ieșirea vor fi trei fișiere PDF noi cu împărțire 1 (pagina 01) împărțire 2 (pagina 23) împărțire 3 (pagina 4-sfârșit) .
Nu a fost folosită nicio funcție sau clasă nouă în programul python de mai sus. Folosind o logică simplă și iterații, am creat împărțirea PDF-ului trecut conform listei trecute despica .

alfabet după număr

5. Adăugarea filigranului la paginile PDF

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

Iată cum arată prima pagină a fișierului PDF original (stânga) și cu filigran (dreapta):
 

Filigranarea fișierului pdf' loading='lazy' title=

  • Tot procesul este același ca exemplul de rotație a paginii. Singura diferenta este:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • Obiectul pagină este convertit în obiect pagină cu filigran folosind add_watermark() funcţie.
  • Să încercăm să înțelegem add_watermark() funcţie:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • În primul rând, creăm un obiect de citire PDF filigran.pdf . La obiectul pagină transmis pe care îl folosim merge_page() funcția și treceți obiectul pagină din prima pagină a obiectului cititor PDF filigran. Acest lucru va suprapune filigranul peste obiectul pagină trecut.


Și aici ajungem la sfârșitul acestui lung tutorial despre lucrul cu fișiere PDF în python.
Acum vă puteți crea cu ușurință propriul manager PDF!
Referinte:
 

  • https://automatetheboringstuff.com/chapter13/
  • https://pypi.org/project/pypdf/

Dacă vă place GeeksforGeeks și doriți să contribui, puteți scrie și un articol folosind write.geeksforgeeks.org sau trimiteți articolul la [email protected]. Vedeți articolul dvs. care apare pe pagina principală GeeksforGeeks și ajutați alți Geeks.
Vă rugăm să scrieți comentarii dacă găsiți ceva incorect sau dacă doriți să împărtășiți mai multe informații despre subiectul discutat mai sus.
 

Creați un test