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.
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.
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)
După ce citim documentul PDF, putem efectua acum diferite operații pe document, așa cum vom vedea în această secțiune.
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
.
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, înpagina = 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ă).
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.
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.
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.