Jag beundrar verkligen Portable Document Format (PDF) -filer. Jag kommer ihåg de dagar då sådana filer löste några formateringsproblem medan du bytte filer på grund av vissa skillnader i Word-versioner eller av andra skäl.
Vi talar främst om Python här, är vi inte? Och vi är intresserade av att koppla det till att arbeta med PDF-dokument. Tja, du kanske säger att det är så enkelt, speciellt om du har använt Python med textfiler (txt) innan. Men det är lite annorlunda här. PDF-dokument är binära filer och mer komplexa än bara rentextfiler, särskilt eftersom de innehåller olika typsnitt, färger etc..
Det betyder inte att det är svårt att arbeta med PDF-dokument med Python, det är ganska enkelt, och med en extern modul löser problemet.
Som vi nämnde ovan skulle det vara nyckeln att använda en extern modul. Modulen vi ska använda i denna handledning är PyPDF2
. Eftersom det är en extern modul, är det första normala steget vi måste ta är att Installera den modulen. För det ska vi använda pip, vilket är (baserat på Wikipedia):
Ett pakethanteringssystem som används för att installera och hantera mjukvarupaket som är skrivna i Python. Många paket finns i Python Package Index (PyPI).
Du kan följa stegen som nämns i Python Packaging User Guide för installation pip
, men om du har det python 2.7.9
och högre, eller python 3,4
och högre har du redan pip
!
PyPDF2
Nu kan du enkelt installera genom att skriva följande kommando (i Mac OS X: s terminal):
pip installera pypdf2
Bra! Du har nu PyPDF2
installerat, och du är redo att börja spela med PDF-dokument.
Den provfil vi ska arbeta med i denna handledning är sample.pdf. Gå vidare och ladda ner filen för att följa handledningen, eller du kan helt enkelt använda en PDF-fil du vill ha.
Låt oss nu gå vidare och läsa PDF-dokumentet. Eftersom vi kommer att använda PyPDF2
, vi måste importera modulen enligt följande:
importera pypdf2
Efter att ha importerat modulen använder vi PdfFileReader-klassen. Så ser skriptet för att läsa PDF-dokumentet som följer:
importera PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file)
Efter att ha läst PDF-dokumentet kan vi nu utföra olika operationer på dokumentet, som vi kommer att se i det här avsnittet.
Låt oss kolla antalet sidor i sample.pdf. För detta kan vi använda metoden getNumPages ():
number_of_pages = read_pdf.getNumPages () print number_of_pages
I det här fallet kommer det returnerade värdet att vara 1
.
Låt oss nu kolla numret på en viss sida i PDF-dokumentet. Vi kan använda metoden getPageNumber (sida)
, Observera att vi måste vidarebefordra ett objekt av typen sida
till metoden. För att hämta a sida
, vi kommer att använda getPage (antal)
metod, var siffra
representerar sidnumret i PDF-dokumentet. Argumentet siffra
börjar med värdet 0
.
Tja, jag vet när du använder getPage (antal)
du vet redan sidnummer, men det här är bara för att illustrera hur man använder dessa metoder tillsammans. Detta kan visas i följande skript:
page = read_pdf.getPage (0) page_number = read_pdf.getPageNumber (sida) skriv ut sidan_number
Fortsätt, prova manuset. Vilken produkt fick du?
Vi vet att i exempel.pdf
(filen vi experimenterar med), vi har bara en sida (nummer 0
). Vad händer om vi passerade numret 1
som sidnummer till getPage (antal)
? I det här fallet får du följande fel:
Traceback (senaste samtal senast): Fil "test.py", rad 6, insida = read_pdf.getPage (1) Fil "/usr/local/lib/python2.7/site-packages/PyPDF2/pdf.py", rad 1158, i getPage return self.flattenedPages [pageNumber] IndexError: listindex ut av räckvidd
Detta beror på att sidan inte är tillgänglig, och vi använder ett sidnummer utanför intervallet (existerar inte).
PDF-sidan kommer med olika lägen, som är följande:
/ UseNone | Visa inte konturer eller miniatyrbilder |
/ UseOutlines | Visa konturer (aka bokmärken) |
/ UseThumbs | Visa sidminiaturpanelen |
/Fullskärm | Fullskärmsvisning |
/ UseOC | Visa panel för valfri innehållsgrupp (OCG) |
/ UseAttachments | Visa bilagan |
För att kontrollera vårt sidläge kan vi använda följande skript:
page = read_pdf.getPage (0) page_mode = read_pdf.getPageMode () skriv ut sidan_mode
När det gäller vårt PDF-dokument (exempel.pdf
) är det returnerade värdet ingen
, vilket innebär att sidläget inte är angivet. Om du vill ange ett sidläge kan du använda metoden setPageMode (läge)
, var läge
är ett av de lägen som anges i tabellen ovan.
Vi har hittills vandrat runt filen, så låt oss se vad som finns inuti. Metoden extractText ()
kommer att vara vår vän i denna uppgift.
Låt mig visa dig det fulla skriptet för att göra det, i motsats till vad jag gjorde ovan för att visa dig bara det obligatoriska skriptet för att utföra en operation. Skriptet för att extrahera en text från PDF-dokumentet är som följer:
importera PyPDF2 pdf_file = open ('sample.pdf') read_pdf = PyPDF2.PdfFileReader (pdf_file) number_of_pages = read_pdf.getNumPages () page = read_pdf.getPage (0) page_content = page.extractText () skriv ut page_content
Jag blev förvånad när jag fick följande produktion istället för den där exempel.pdf
:
!"# $% # $% &% $ & '() *% +, -%. / 01' * 23% 4 5 '% 1 $ # 26% 3 /% 7 /)) / 8% % 8 # 3 "% 3" *% 313/9 # &)%
Detta beror troligtvis på en typsnittsproblem, så att tecknet koderna över till andra värden. Så det är ibland ett problem med själva PDF-dokumentet, eftersom PDF-dokumentet kanske inte innehåller de data som krävs för att återställa innehållet.
Jag försökte sålunda en annan fil, som är ett av mina papper: paper.pdf
. Fortsätt och byt ut exempel.pdf
i koden med paper.pdf
. Utgången i detta fall var:
Medicinsk bildbehandling 2012: Bilduppfattning, Observatörsprestation och Teknikbedömning, redigerad av Craig K. Abbey, Claudia R. Mello-Thoms, Proc. av SPIE Vol. 8318, 83181I © 2012 SPIE · CCC-kod: 1605-7422 / 12 / $ 18 · doi: 10.1117 / 12.912389Proc. av SPIE Vol. 8318 83181I-1Downloads från SPIE Digital Library den 13 aug 2012 till 134,130.12.208. Villkor för användning: http://spiedl.org/terms
Men var är resten av texten på sidan? Jo, faktiskt extractText ()
Metoden verkar inte vara perfekt, och vissa förbättringar måste göras. Men målet är att visa dig hur man arbetar med PDF-filer med Python, och det verkar som att vissa förbättringar måste göras på domänen.
Som vi kan se, gör Python det enkelt att arbeta med PDF-dokument. Denna handledning skrapade bara ytan på detta ämne och du kan hitta mer information om olika operationer som du kan utföra på PDF-dokument på PyPDF2-dokumentationssidan.