Perl -skript " krypa " på nätet , siktning genom havet av HTML-sidor för information , och oundvikligen möta några av de miljontals Adobe Acrobat PDF -filer stänkte över Internet . Även om de är redo att skriva ut och attraktiva ur synvinkel av en sökrobot , PDF-filer är en något svårare nöt att knäcka än enkel , textbaserad HTML-sidor . Lyckligtvis , som med många web uppgifter , det finns en Perl -modul som kan göra livet lättare : CAM : : PDF . Detta programming interface , men mestadels avsedda att skapa och manipulera PDF -filer , har några verktyg som gör att skript för att söka deras innehåll .
Du behöver :
Perl skriptmiljö
. CAM : : PDF Perl -modul
. Text eller kod redaktör .
PDF -fil
1
Installera CAM : . : PDF . CPAN verktyget tillhandahåller det enklaste sättet att göra detta-starta cpan på kommandoraden och vid prompten , skriv " installera CAM : : PDF " . (utan citattecken)
2
Öppna en editor och starta skriptet in följande rader för att starta Perl tolk och importera de nödvändiga modulen :
# /usr /bin /perl
använda CAM : : PDF ,
Tillsätt nästa två rader process kommandoradsargumenten att användaren kommer att passera i :
min $ file=skift ,
min $ search=skift ,
Det första argumentet som skickas till skriptet kommer att vara namnet på en PDF -fil , och det andra, söksträngen . .
3
Skapa en ny CAM : : PDF objekt genom att lägga till följande rad i skriptet :
min $ doc=CAM : : PDF-> nya ( $ fil ) ;
av de importerade modulens NumPages metod för att definiera den övre gränsen , skapa en slinga för att behandla varje sida i dokumentet :
foreach min $ p ( ( 1 . . $ doc-> NumPages ()))
{
4 .
inom Loopen , lägga till den här raden för att få varje sida av text från PDF- filen :
min $ str=$ doc-> getPageText ( $ p ) ,
Tillsätt nästa manus uttalande att dela upp sidans text upp i en matris av separata rader :
@ lines=split ( /\ n /, $ str ) ;
Avsluta loopen uttalande genom att ange en avslutande haken :
}
5 .
slutligen lägga till en loop till skriptet att bearbeta varje rad på sidan och söka en match för användarens söksträngen som ett reguljärt uttryck . Om det vanliga uttrycket returnerar en match , skriver detta exempel linjen och sidnummer till stdout . I stället för dessa skriva uttalanden , bör du genomföra koden för att bearbeta resultatet som behövs .
min $ i=0 ;
foreach $ line ( @ linjer )
{
+ + $ i ;
if ( $ rad=~ /$ sökning /)
{
print " \ " $ sökning \ " hittades i linje $ i på sidan $ p \ n ";
print " $ rad \ n \ n "
} }
tips och varningar
eftersom texten i PDF- filer inte är hierarkiskt organiserade så att HTML- filer , kommer du sannolikt behöva att konstruera skript för att söka vissa typer av PDF -filer ( e. g. former , bulletiner , scheman ) . Det kan inte vara möjligt att skriva ett robust Perlskript som effektivt kan söka alla typer av PDF -fil .