Jeg beundrer virkelig Portable Document Format (PDF) -filer. Jeg husker dagene da slike filer løste eventuelle formateringsproblemer mens du utvekslet filer på grunn av enkelte forskjeller i Word-versjoner, eller av andre grunner.
Vi snakker hovedsakelig om Python her, er vi ikke? Og vi er interessert i å knytte det til å jobbe med PDF-dokumenter. Vel, du kan si det er så enkelt, spesielt hvis du har brukt Python med tekstfiler (txt) før. Men det er litt annerledes her. PDF-dokumenter er binære filer og mer komplekse enn bare enkle tekstfiler, spesielt siden de inneholder forskjellige skrifttypetyper, farger osv.
Det betyr ikke at det er vanskelig å jobbe med PDF-dokumenter ved hjelp av Python, det er ganske enkelt, og ved hjelp av en ekstern modul løser problemet.
Som vi nevnte ovenfor, ville det være nøkkelen å bruke en ekstern modul. Modulen vi skal bruke i denne opplæringen er PyPDF2
. Som det er en ekstern modul, er det første normale trinnet vi må ta er å installere den modulen. For det vil vi bruke pip, som er (basert på Wikipedia):
Et pakkehåndteringssystem som brukes til å installere og administrere programvarepakker skrevet i Python. Mange pakker finnes i Python Package Index (PyPI).
Du kan følge trinnene som er nevnt i Python Packaging User Guide for installasjon pip
, men hvis du har det Python 2.7.9
og høyere, eller Python 3.4
og høyere, har du allerede pip
!
PyPDF2
Nå kan du enkelt installere ved å skrive følgende kommando (i Mac OS Xs terminal):
pip installere pypdf2
Flott! Du har nå PyPDF2
installert, og du er klar til å begynne å spille med PDF-dokumenter.
Eksempelfilen vi skal jobbe med i denne opplæringen er sample.pdf. Gå videre og last ned filen for å følge opplæringen, eller du kan ganske enkelt bruke en PDF-fil du liker.
La oss nå gå videre og lese PDF-dokumentet. Siden vi skal bruke PyPDF2
, vi må importere modulen som følger:
importer pypdf2
Etter at du har importert modulen, bruker vi PdfFileReader-klassen. Så ser man skriptet for å lese PDF-dokumentet som følger:
importer PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file)
Etter å ha lest PDF-dokumentet, kan vi nå utføre forskjellige operasjoner på dokumentet, slik vi vil se i denne delen.
La oss sjekke antall sider i sample.pdf. For dette kan vi bruke metoden getNumPages ():
number_of_pages = read_pdf.getNumPages () print number_of_pages
I dette tilfellet vil den returnerte verdien være 1
.
La oss nå sjekke antall noen sider i PDF-dokumentet. Vi kan bruke metoden getPageNumber (side)
, Legg merke til at vi må passere et objekt av typen side
til metoden. For å hente a side
, vi vil bruke getPage (nummer)
metode, hvor Nummer
representerer sidetallet i PDF-dokumentet. Argumentet Nummer
starter med verdien 0
.
Vel, jeg vet når du bruker getPage (nummer)
Du kjenner allerede sidenummeret, men dette er bare for å illustrere hvordan du bruker disse metodene sammen. Dette kan demonstreres i følgende skript:
side = read_pdf.getPage (0) page_number = read_pdf.getPageNumber (side) print page_number
Fortsett, prøv skriptet. Hvilken utgang fikk du?
Vi vet at i sample.pdf
(filen vi eksperimenterer med), vi har bare en side (nummer 0
). Hva om vi passerte nummeret 1
som sidenummeret til getPage (nummer)
? I dette tilfellet får du følgende feil:
Traceback (siste samtalen sist): File "test.py", linje 6, iside = read_pdf.getPage (1) Fil "/usr/local/lib/python2.7/site-packages/PyPDF2/pdf.py", linje 1158, i getPage return self.flattenedPages [pageNumber] IndexError: listeindeks ut av område
Dette skyldes at siden ikke er tilgjengelig, og vi bruker et sidetal uten rekkevidde (eksisterer ikke).
PDF-siden kommer med forskjellige moduser, som er som følger:
/ UseNone | Ikke vis konturer eller miniatyrbilder |
/ UseOutlines | Vis skisser (aka bokmerker) panel |
/ UseThumbs | Vis sideminiatyrpanelet |
/Full skjerm | Fullskjermvisning |
/ UseOC | Vis panel for valgfritt innholdsgruppe (OCG) |
/ UseAttachments | Vis vedleggspanelet |
For å sjekke vår sidemodus kan vi bruke følgende skript:
side = read_pdf.getPage (0) page_mode = read_pdf.getPageMode () print page_mode
I tilfelle av vårt PDF-dokument (sample.pdf
), er den returnerte verdien ingen
, noe som betyr at sidemodus ikke er spesifisert. Hvis du vil spesifisere en sidemodus, kan du bruke metoden setPageMode (modus)
, hvor modus
er en av modusene som er oppført i tabellen ovenfor.
Vi har vandret rundt filen så langt, så la oss se hva som er inni. Metoden extractText ()
vil være vår venn i denne oppgaven.
La meg vise deg det fulle skriptet for å gjøre det, i motsetning til det jeg gjorde over i å vise deg bare det nødvendige skriptet for å utføre en operasjon. Skriptet for å trekke ut en tekst fra PDF-dokumentet er som følger:
importere PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file) number_of_pages = read_pdf.getNumPages () side = read_pdf.getPage (0) page_content = page.extractText () skriv ut page_content
Jeg ble overrasket da jeg fikk følgende utgang i stedet for det i sample.pdf
:
!"# $% # $% &% $ & '() *% +, -%. / 01' * 23% 4 5 '% 1 $ # 26% 3 /% 7 /)) / 8% % 8 # 3 "% 3" *% 313/9 # &)%
Dette skyldes mest sannsynligvis et skriftproblem, slik at tegnet koder kartet til andre verdier. Så det er noen ganger et problem med selve PDF-dokumentet, da PDF-dokumentet kanskje ikke inneholder dataene som kreves for å gjenopprette innholdet.
Jeg prøvde dermed en annen fil, som er et papir av meg: paper.pdf
. Gå videre og erstatt sample.pdf
i koden med paper.pdf
. Utgangen i dette tilfellet var:
Medisinsk Imaging 2012: Image Perception, Observer Performance, og Technology Assessment, redigert av Craig K. Abbey, Claudia R. Mello-Thoms, Proc. av SPIE Vol. 8318, 83181I © 2012 SPIE · CCC-kode: 1605-7422 / 12 / $ 18 · doi: 10.1117 / 12.912389Proc. av SPIE Vol. 8318 83181I-1Downloadet fra SPIE Digital Library på 13 Aug 2012 til 134,130.12.208. Vilkår for bruk: http://spiedl.org/terms
Men hvor er resten av teksten på siden? Vel, faktisk extractText ()
Metoden synes ikke å være perfekt, og noen forbedringer må gjøres. Men målet her er å vise deg hvordan du arbeider med PDF-filer ved hjelp av Python, og det virker som noen forbedringer må gjøres i domenet.
Som vi kan se, gjør Python det enkelt å arbeide med PDF-dokumenter. Denne opplæringen har bare riper overflaten på dette emnet, og du kan finne flere detaljer om ulike operasjoner du kan utføre på PDF-dokumenter på PyPDF2-dokumentasjonssiden.