Nooit meer metadata invoeren - deel 5
Het gevaar van elke dag bloggen in plaats van (bijvoorbeeld) één keer per week is dat je twee (
#1 en
#2) dagen lang ontzettende onzin kunt lopen verkopen voordat je er de derde dag achter komt dat het onzin was. Dat was nu ook het geval. De enige troost is dat het nog niemand anders opgevallen was.
Een van mijn verzuchtingen deze week was:
"Tegen beter weten in heb ik toch nog maar een keer geprobeerd of ik niet toch ook de in Word, Excel, Powerpoint en PDF-documenten aanwezige metadata kon filteren. Gisteren gaf ik al aan dat ik het heel vreemd vond als dat niet met PHP zou kunnen, maar na vandaag moet ik concluderen dat dat waarschijnlijk simpelweg niet kan."
(bron)
Vandaag zal ik laten zien hoe het met Word, Powerpoint en Excel-bestanden werkt Ãén hoe simpel het uiteindelijk bleek te zijn om metadata uit PDF-bestanden te halen.
Voorbereidingen vooraf
Het script is geschreven in PHP en heeft voor het uit de Office-documenten halen van metadata de beschikking over resp. Word, Powerpoint en Excel nodig. Die programma's staan meestal niet geïnstalleerd op een webserver en die wil je er eigenlijk ook niet hebben.
Daarom heb ik het script zo geschreven dat je het ook gewoon op een Windows (getest op XP) computer kunt uitvoeren, zonder dat je daarvoor andere dingen hoeft te installeren. Je hoeft dan niet Apache (webserver) of MySQL (database) te installeren of poorten op je computer te openen. Er wordt niets gewijzigd in de registry van Windows, er komen geen bestanden op andere plekken terecht. Je hebt één map met bestanden die je als je dat wilt achteraf in één keer kunt verwijderen.
De eerste stap hieronder (PHP downloaden) hoef je alleen uit te voeren als je nog géén PHP geïnstalleerd hebt staan op de computer waarop je het script wilt gebruiken. Als je dat al hebt kun je bij stap 2) beginnen.
1) PHP downloaden
Het eerste wat je moet doen is PHP downloaden.
Ik heb gewerkt met
PHP versie 5.0.4
Je moet de link hebben bij "PHP 5.0.4 zip package [7,488Kb] - 31 Mar 2005", dus
niet de installer!
Als je op de link klikt kun je een 'mirror' kiezen, de standaardsite is meestal prima. Klik op de link bij de site en sla het zipbestand op op de harde schijf, bijvoorbeeld in D:\PHP_5
Unzip het bestand, mét behoud van de mappenstructuur in de map waarin je hem opgeslagen had. Herbenoem de map dan naar
php zodat het php.exe bestand dat er in staat eenvoudiger te bereiken is (als D:\PHP_5\php\php.exe).
2) Script downloaden
Maak nu een map 'scripts' aan in de PHP_5 map en sla daar dit
scriptbestand (txt 5kB) in op. Herbenoem het bestand naar
metadata_office_pdf.php.
We zijn nu klaar met de voorbereidingen.
PHP vanaf de commandoprompt
Normaal gesproken zet je een PHP-script dat je maakt op een webserver, opent dan de browser en voert het adres van het bestand in. Het bestand wordt dan verwerkt/uitgevoerd en het resultaat wordt in de browser getoond.
Je kunt PHP echter ook vanaf de commandoprompt (in een DOS-venster) uitvoeren. Het voordeel is dat je dan geen webserver en browser nodig hebt.
3) Batchbestand voor PHP aanmaken
Maak in de map 'PHP_5' een bestand
office_metadata.bat aan met daarin de volgende commandoregel:
D:\PHP_5\php\php.exe -n -f D:\PHP_5\scripts\metadata_office_pdf.php %1 > office_PDF_metadata.htm
(dit moet op één regel in het bestand)
Deze commandoregel doet het volgende:
*
D:\PHP_5\php\php.exe roept de PHP-interperter aan
*
-n geeft aan dat PHP niet moet zoeken naar PHP.ini
*
-f geeft aan dat het bestant dat volgt het uit te voeren script is
*
%1 wordt in het batchbestand bij het uitvoeren vervangen door de parameter die je meegeeft (de naam van het bestand dat bekeken moet worden)
*
> office_PDF_metadata.htm zorgt er voor dat de uitvoer van het batchbestand niet op het scherm getoond wordt, maar opgeslagen wordt in een html-bestand.
4) Uitvoeren van het batchbestand
Start nu in Windows XP een DOS-venster op (Start > Uitvoeren > CMD) en ga naar de plek waar het batchbestand staat. Het batchbestand verwacht één parameter, de naam van het bestand dat bekeken moet worden. Je moet het volledige pad naar het bestand aangeven, bijvoorbeeld:
D:\
PHP_5>office_metadata d:\Office\mijntestbestand.ppt
Waarbij d:\Office\mijntestbestand.ppt het bestand is waar je de metadata uit wilt halen. Er wordt dan een bestand
office_PDF_metadata.htm aangemaakt met de metadata die er uit gehaald is.
(vond je dit allemaal wat veel van het goede en heb je dit niet gedaan, dan mag je natuurlijk toch gewoon door lezen)
Metadata uit PDF-documenten
Ik dacht dat ik alles geprobeerd had om met PHP metadata uit een PDF-document te krijgen. Het is ook wel mogelijk met de '
COM'-functionaliteit van PHP onder Windows, maar blijkbaar niet zonder dat je de volledige versie van Adobe Acrobat geïnstalleerd hebt staan.
Het blijkt echter dat PDF-bestanden ook 'gewoon' met een teksteditor te lezen zijn en dat de metadata daar relatief eenvoudig in terug te vinden is:
In de linkerafbeelding zie je de metadata zoals XP die laat zien, aan de rechterkant de inhoud van het PDF-document met ongeveer aan het einde van het bestand de metadata.
Het script opent het PDF document en loopt er regel voor regel doorheen en gebruikt een RegExp om te kijken of het een regel met de metadata is.
Voor de twee datums die in de metadata zitten (Creation Date en Modification Date) zijn in het PDF-formaat duidelijke afspraken vastgelegd, maar omdat van de twee testbestanden die ik had er één zich al niet aan die afspraken hield bevat het script ook een stukje code dat probeert daar zo flexibel mogelijk iets van te maken.
Het resultaat ziet er zo uit:
Metadata uit Office-documenten
Office-documenten zijn 'binary files', dat wil zeggen dat als ik ze in bijvoorbeeld notepad open, het er ongeveer zo uitziet:
Nu zal het best mogelijk zijn om erachter te komen hoe je in de brei van codes de metadata rechtstreeks uit het bestand haalt, maar ik had geen tijd om te proberen daar achter te komen.
Daarom heb ik hier wél gebruik gemaakt van de '
COM'-functionaliteit van PHP onder Windows. Dat betekent dat ik met PHP op de achtergrond (je ziet ze niet eens verschijnen) het benodigde programma (Word, Excel, Powerpoint) opstart, daar het bestand in open en dan, via de
redelijk goed gedocumenteerde mogelijkheden die Office-applicaties hebben om het programma op afstand te besturen, de in het document aanwezige metadata uitlees.
De lijst met mogelijke eigenschappen is erg lang, al zijn ze overigens niet steeds hetzelfde:
Ik heb de voorbeelden overigens met opzet niet bewerkt zodat je kunt zien dat de hoeveelheid beschikbare metadata bij een 'gewoon' Office-document niet altijd even groot is. Zo heeft het Excel-bestand standaard geen titel, terwijl het Powerpoint-bestand standaard de titel van de eerste dia krijgt (niet echt zinvol). Aanpassen kan echter zowel vanuit het Office-programma zelf, als vanuit Windows XP:
Je hebt er dus geen aparte/extra programma's voor nodig én hoeft niet twee aparte bestanden (het Office-document + het metadatabestand) te onderhouden. Ik kan me voorstellen dat je aan een docent/gewone gebruiker kunt vragen om in ieder geval deze informatie in te vullen als dat betekent dat dat dan niet meer hoeft bij het uploaden van het document.
Eerdere berichten:
*
deel 1 ging over foto's;
*
deel 2 over video en audio;
*
deel 3 ging over Word, Excel, Powerpoint en PDF-documenten;
*
deel 4 bekeek een tweetal applicaties voor metadatabeheer in PDF-bestanden.
Datgene wat je beschrijft in de sectie 'PHP downloaden' is me niet helemaal duidelijk:
* is dat iets wat alleen werkt bij PHP5?
* is dat iets waarvoor je (nog een keer apart) PHP voor moet downloaden?
* wat gebeurt er nou precies in die DOS-regel die je opgeeft?
* is dit nou een methode die los staat van die twee die je daaronder beschrijft?