logo

Treballant amb fitxers PDF a Python

Tots heu d'estar familiaritzats amb què són els PDF. De fet, són un dels mitjans digitals més importants i utilitzats. PDF significa Format de document portàtil . S'utilitza .pdf extensió. S'utilitza per presentar i intercanviar documents de manera fiable independentment del maquinari del programari o del sistema operatiu.
Inventat per Adobe El PDF és ara un estàndard obert mantingut per l'Organització Internacional per a l'Estandardització (ISO). Els PDF poden contenir enllaços i botons de camps d'àudio, vídeo i lògica empresarial.
En aquest article aprendrem com podem fer diverses operacions com:
 

  • Extracció de text del PDF
  • Pàgines PDF rotatives
  • Fusionar PDF
  • Divisió de PDF
  • Afegeix una marca d'aigua a les pàgines PDF

Instal·lació: Utilitzant scripts Python senzills!
Utilitzarem un mòdul pypdf de tercers.
pypdf és una biblioteca de Python creada com a conjunt d'eines PDF. És capaç de:
 

  • Extracció d'informació del document (autor del títol...)
  • Divisió de documents pàgina per pàgina
  • Fusionar documents pàgina per pàgina
  • Retallar pàgines
  • Combinació de diverses pàgines en una única pàgina
  • Xifrar i desxifrar fitxers PDF
  • i més!

Per instal·lar pypdf, executeu l'ordre següent des de la línia d'ordres:



pip install pypdf

El nom d'aquest mòdul distingeix entre majúscules i minúscules, així que assegureu-vos que i és en minúscula i tota la resta és en majúscula. Tots els fitxers de codi i PDF utilitzats en aquest tutorial/article estan disponibles aquí .

iteració del mapa java

1. Extracció de text d'un fitxer 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()) 

La sortida del programa anterior té aquest aspecte:
 

20  
PythonBasics
S.R.Doty
August272008
Contents

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

Intentem entendre el codi anterior en trossos:
 

reader = PdfReader('example.pdf')  
  • Aquí creem un objecte de PdfReader classe del mòdul pypdf i passeu el camí al fitxer PDF i obteniu un objecte lector de PDF.
     
print(len(reader.pages))  
  • pàgines La propietat proporciona el nombre de pàgines del fitxer PDF. Per exemple, en el nostre cas és 20 (vegeu la primera línia de sortida).
     
pageObj = reader.pages[0]  
  • Ara creem un objecte de PageObject classe del mòdul pypdf. L'objecte lector de PDF té funció pàgines[] que pren el número de pàgina (a partir de l'índex 0) com a argument i retorna l'objecte de la pàgina.
     
print(pageObj.extract_text())  
  • L'objecte de la pàgina té funció extracte_text() per extreure text de la pàgina PDF.


Nota: Tot i que els fitxers PDF són excel·lents per dissenyar text d'una manera que sigui fàcil d'imprimir i llegir per a la gent, no són senzills per al programari per analitzar-los en text sense format. Com a tal, pypdf pot cometre errors en extreure text d'un PDF i fins i tot pot ser que no pugui obrir alguns PDF. Malauradament, no hi ha molt que puguis fer al respecte. És possible que pypdf simplement no pugui funcionar amb alguns dels vostres fitxers PDF concrets.

2. Rotació de pàgines PDF
 

java substituir-ho tot
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() 

Aquí podeu veure com la primera pàgina de exemple_rotat.pdf sembla (imatge de la dreta) després de la rotació:

Girant un fitxer pdf' title=

Alguns punts importants relacionats amb el codi anterior:
 

  • Per a la rotació, primer creem un objecte lector de PDF del PDF original.
writer = PdfWriter()  
  • Les pàgines girades s'escriuran en un PDF nou. Per escriure en PDF utilitzem l'objecte de PdfWriter classe del mòdul pypdf.
for page in range(len(pdfReader.pages)):  
pageObj = pdfReader.pages[page]
pageObj.rotate(rotation)
writer.add_page(pageObj)
  • Ara repetim cada pàgina del PDF original. Obtenim l'objecte de la pàgina per pàgines .[] mètode de classe de lector de PDF. Ara girem la pàgina girar () mètode de classe d'objectes de pàgina. A continuació, afegim una pàgina a l'objecte d'escriptor de PDF utilitzant afegir() mètode de classe d'escriptor PDF passant l'objecte de pàgina girada.
newFile = open(newFileName 'wb')  
writer.write(newFile)
newFile.close()
  • Ara hem d'escriure les pàgines PDF en un nou fitxer PDF. En primer lloc, obrim el nou objecte de fitxer i escrivim pàgines PDF amb ell escriure () mètode de l'objecte de l'escriptor PDF. Finalment tanquem l'objecte fitxer PDF original i l'objecte fitxer nou.

3. Fusionar fitxers 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() 

La sortida del programa anterior és un PDF combinat exemple_combinat.pdf obtingut per fusió exemple.pdf i exemple_rotat.pdf .
 

substituint la cadena a java
  • Fem una ullada als aspectes importants d'aquest programa:
     
pdfWriter = PdfWriter()
  • Per a la fusió, utilitzem una classe preconstruïda PdfWriter del mòdul pypdf.
    Aquí creem un objecte pdfwriter de la classe d'escriptura de PDF
 # appending pdfs one by one  
for pdf in pdfs:
pdfWriter.append(pdf)
  • Ara afegim l'objecte de fitxer de cada PDF a l'objecte de l'escriptor de PDF utilitzant el afegir() mètode.
 # writing combined pdf to output pdf file  
with open(output 'wb') as f:
pdfWriter.write(f)
  • Finalment escrivim les pàgines PDF al fitxer PDF de sortida utilitzant escriure mètode de l'objecte de l'escriptor PDF.

4. Divisió d'arxiu PDF

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

La sortida serà de tres fitxers PDF nous split 1 (pàgina 01) split 2 (pàgina 23) split 3 (pàgina 4-final) .
No s'ha utilitzat cap funció o classe nova al programa Python anterior. Utilitzant una lògica i iteracions senzilles, vam crear les divisions dels PDF passats segons la llista aprovada es divideix .

unitat aritmètica lògica

5. Afegir una marca d'aigua a les pàgines 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() 

Així és com es veu la primera pàgina del fitxer PDF original (esquerra) i amb filigrana (dreta):
 

Marca d'aigua del fitxer pdf' loading='lazy' title=

  • Tot el procés és el mateix que l'exemple de rotació de pàgines. L'única diferència és:
     
wmpageObj = add_watermark(mywatermark pdfReader.pages[page])  
  • L'objecte de pàgina es converteix en objecte de pàgina amb filigrana mitjançant afegir_marca d'aigua() funció.
  • Intentem entendre-ho afegir_marca d'aigua() funció:
     
 reader = PdfReader(wmFile)  
pageObj.merge_page(reader.pages[0])
return pageObj
  • En primer lloc, creem un objecte lector de PDF filigrana.pdf . A l'objecte de pàgina passat que fem servir merge_page() funció i passa l'objecte de pàgina de la primera pàgina de l'objecte lector de PDF de filigrana. Això superposarà la filigrana sobre l'objecte de la pàgina passat.


I aquí arribem al final d'aquest llarg tutorial sobre com treballar amb fitxers PDF en Python.
Ara podeu crear fàcilment el vostre propi gestor de PDF!
Referències:
 

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

Si t'agrada GeeksforGeeks i vols contribuir, també pots escriure un article mitjançant write.geeksforgeeks.org o enviar el teu article a [email protected]. Vegeu el vostre article que apareix a la pàgina principal de GeeksforGeeks i ajudeu altres Geeks.
Si us plau, escriviu comentaris si trobeu alguna cosa incorrecta o si voleu compartir més informació sobre el tema tractat anteriorment.
 

Crea un qüestionari