Cum să lucrați cu documente PDF utilizând Python

Admir adora fișierele de format portabil (PDF). Îmi amintesc zilele în care astfel de fișiere au rezolvat probleme de formatare în timp ce schimbau fișiere datorită unor diferențe în versiunile Word sau din alte motive.

Vorbim în primul rând despre Python aici, nu-i așa? Și suntem interesați să legăm acest lucru de lucrul cu documente PDF. Ei bine, puteți spune că este atât de simplu, mai ales dacă ați folosit Python cu fișiere text (txt) înainte. Dar, este ceva diferit aici. Documentele PDF sunt fișiere binare și mai complexe decât fișierele plaintext, mai ales că conțin diferite tipuri de fonturi, culori etc..

Asta nu inseamna ca este greu sa lucrezi cu documente PDF folosind Python, este destul de simplu si folosesti un modul extern rezolvand problema.

PyPDF2

După cum am menționat mai sus, folosirea unui modul extern ar fi cheia. Modulul pe care îl vom folosi în acest tutorial este PyPDF2. Deoarece este un modul extern, primul pas normal trebuie să facem instalare acel modul. Pentru aceasta, vom folosi pip, care este (bazat pe Wikipedia):

Un sistem de gestionare a pachetelor utilizat pentru instalarea și gestionarea pachetelor software scrise în Python. Multe pachete pot fi găsite în Python Package Index (PyPI).

Puteți urma pașii menționați în Ghidul utilizatorului pentru ambalarea Python pentru instalare țâfnă, dar dacă aveți Python 2.7.9 și mai mare, sau Python 3.4 și mai sus, deja aveți țâfnă!

PyPDF2 acum poate fi instalat pur și simplu tastând următoarea comandă (în terminalul Mac OS X):

pip instalați pypdf2

Grozav! Acum ai PyPDF2 instalat și sunteți gata să începeți să jucați cu documente PDF.

Citirea unui document PDF

Fișierul cu exemplul cu care vom lucra în acest tutorial este sample.pdf. Continuați și descărcați fișierul pentru a urma tutorialul sau puteți pur și simplu să utilizați orice fișier PDF care vă place.

Să mergem mai departe și să citim documentul PDF. De când vom folosi PyPDF2, trebuie să importăm modulul, după cum urmează:

import pypdf2

După importarea modulului, vom folosi clasa PdfFileReader. Deci, scriptul pentru citirea documentului PDF arată după cum urmează:

import PyPDF2 pdf_file = deschide ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file)

Mai multe operații pe documente PDF

După ce citim documentul PDF, putem efectua acum diferite operații pe document, așa cum vom vedea în această secțiune.

Număr de pagini

Să verificăm numărul de pagini din sample.pdf. Pentru aceasta, putem folosi metoda getNumPages ():

number_of_pages = read_pdf.getNumPages () print numărul_pages

În acest caz, valoarea returnată va fi 1.

Numărul paginii

Să verificăm acum numărul de pagini din documentul PDF. Putem folosi metoda getPageNumber (pagina), Observați că trebuie să trecem un obiect de tip pagină la această metodă. Pentru a prelua a pagină, vom folosi getPage (număr) metoda, unde număr reprezintă numărul paginii din documentul PDF. Argumentul număr începe cu valoarea 0.

Ei bine, știu când îl folosiți getPage (număr) deja cunoașteți numărul paginii, dar acest lucru este doar pentru a ilustra modul de utilizare a acestor metode împreună. Acest lucru poate fi demonstrat în următorul script:

pagina = read_pdf.getPage (0) page_number = read_pdf.getPageNumber (pagina) print page_number

Continuă, încercați scenariul. Ce ieșire ați obținut?

Știm asta în sample.pdf (fișierul cu care experimentăm), avem doar o pagină (numărul 0). Dacă am trecut numărul 1 ca numărul paginii la getPage (număr)? În acest caz, veți primi următoarea eroare:

Traceback (ultimul apel ultimul): Fișierul "test.py", linia 6, în  pagina = read_pdf.getPage (1) Fișierul "/usr/local/lib/python2.7/site-packages/PyPDF2/pdf.py", rândul 1158, în returnarea getPage self.flattenedPages [pageNumber] IndexError: index list out of gamă

Acest lucru se datorează faptului că pagina nu este disponibilă și folosim un număr de pagină din interval (nu există).

Mod de pagină

Pagina PDF vine cu diferite moduri, care sunt după cum urmează:

/ UseNone Nu afișați panourile de contur sau miniaturi
/ UseOutlines
Afișează panoul conturului (aka bookmarks)
/ UseThumbs
Afișați panoul miniaturilor de pagină
/Ecran complet
Afișare pe tot ecranul
/ UseOC
Afișați panoul de grup opțional de conținut (OCG)
/ UseAttachments
Afișați panoul atașamentelor

Pentru a verifica modul de pagină, putem folosi următorul script:

pagină = read_pdf.getPage (0) page_mode = read_pdf.getPageMode () print page_mode

În cazul documentului PDF (sample.pdf), valoarea returnată este nici unul, ceea ce înseamnă că modul de pagină nu este specificat. Dacă doriți să specificați un mod de pagină, puteți utiliza metoda setPageMode (mod), Unde mod este unul dintre modurile enumerate în tabelul de mai sus.

Extrageți textul

Am rătăcit dosarul până acum, așa că să vedem ce este înăuntru. Metoda extractText () va fi prietenul nostru în această sarcină.

Permiteți-mi să vă arăt scriptul complet pentru a face acest lucru, spre deosebire de ceea ce făceam mai sus în a vă arăta doar scriptul necesar pentru a efectua o operație. Scriptul pentru extragerea unui text din documentul PDF este după cum urmează:

importul PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file) number_of_pages = read_pdf.getNumPages () pagina = read_pdf.getPage (0) page_content = page.extractText

Am fost surprins când am obținut următoarea ieșire, mai degrabă decât înăuntru sample.pdf:

!"# $% # $% &% $ &" () *% +, -%. / 01 '* 23% 4 5'% 1 $ # 26% 3 /% 7 /)) % 8 # 3 "% 3" *% 313/9 # &)%

Acest lucru se datorează cel mai probabil unei probleme de tip font, astfel încât caracterele de caractere să corespundă altor valori. Deci, este uneori o problemă cu documentul PDF în sine, deoarece documentul PDF ar putea să nu conțină datele necesare pentru restabilirea conținutului.

Am încercat astfel un alt dosar, care este o lucrare a mea: paper.pdf. Continuați și înlocuiți-vă sample.pdf în codul cu paper.pdf. Rezultatul în acest caz a fost:

Imagistica medicală 2012: percepția imaginii, performanța observatorului și evaluarea tehnologică, editată de Craig K. Abbey, Claudia R. Mello-Thoms, Proc. din SPIE Vol. 8318, 83181I © 2012 SPIE · Codul CCC: 1605-7422 / 12 / $ 18 · doi: 10.1117 / 12.912389Proc. din SPIE Vol. 8318 83181I-1Descărcată din Biblioteca Digitală SPIE pe 13 Aug 2012 la 134.130.12.208. Termeni de utilizare: http://spiedl.org/terms

Dar, unde este restul textului din pagină? De fapt, de fapt extractText () metoda pare să nu fie perfectă și trebuie să se facă unele îmbunătățiri. Dar scopul aici este să vă arătăm cum să lucrați cu fișierele PDF folosind Python și se pare că trebuie făcute îmbunătățiri în domeniul.

Concluzie

După cum putem vedea, Python simplifică să lucreze cu documente PDF. Acest tutorial tocmai a zgâriat suprafața pe acest subiect și puteți găsi mai multe detalii despre diferitele operații pe care le puteți efectua pe documente PDF pe pagina de documentare PyPDF2. 

Cod