Het met PHP omzetten van Microsoft Office-documenten naar PDF is voor websitebouwers altijd een probleem. Er zijn genoeg voorbeeldscripts te vinden, de PEAR-respository heeft uitbreidingen beschikbaar om Excel en Word-documenten uit te lezen, maar het is het allemaal altijd net niet. Jammer genoeg is er geen perfecte oplossing, maar dit komt aardig in de buurt.
Breng eens een bezoekje aan JODConverter. Ja, ik weet dat het Java is. Ik ben nog niet klaar
JODConverter is een applicatie die je kan installeren op een PC waar ook OpenOffice.org op staat. JOD gebruikt OOo om bestanden mee te openen, en als iets anders op te slaan. Dat betekent dat je niet alleen van Excel en Word naar PDF kan, maar ook naar de OOo-formaten, of andersom. Alle bestandsformaten die door OOo worden ondersteund, worden dus automatisch ook ondersteund door JOD. Het enige waar je dan op hoeft te letten is dat je brondocument er in OOo goed uit ziet, en dat de lettertypes beschikbaar zijn.
In mijn geval is JOD geïnstalleerd op een aparte Linux-PC (Ubuntu). Daarop staat al OOo voorgeïnstalleerd. Om nou met PHP documenten te kunnen omzetten, heb ik ervoor gekozen JOD te gebruiken als webservice. Installatie-details staan hier en hier. Op die tweede link staat ook een PHP-voorbeeld, daarvoor is echter de PEAR HTTP-Request module vereist, en op de server waarop de website komt te draaien is die niet beschikbaar. Wel is de cURL-module beschikbaar.
In mijn geval wordt de code om een Excel-document om te zetten dan als volgt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // Het volledige pad naar het excel-document $sSourcePath = "/var/www/test.xls"; // Mime-type is nodig om aan de webservice door te geven wat // voor soort document het is $sSourceMime = "application/vnd.ms-excel"; // cURL initialiseren if ($rCurl = @curl_init()) { // URL waar de service draait curl_setopt($rCurl, CURLOPT_URL, "http://www.example.com:8080/converter/service"); // Aangeven dat we het antwoord van de server terug // willen krijgen curl_setopt($rCurl, CURLOPT_RETURNTRANSFER, true); // Aangeven dat we een HTTP POST verzoek gaan doen curl_setopt($r, CURLOPT_POST, true); // De inhoud van het Excel-bestand meesturen als POST data curl_setopt($rCurl, CURLOPT_POSTFIELDS, file_get_contents($sSourcePath)); // Als HTTP-header moet opgegeven worden wat de mime-type is // van het brondocument, en wat voor soort document we terug // willen krijgen curl_setopt($rCurl, CURLOPT_HTTPHEADER, array( 'Content-Type: '.$sSourceMime, 'Accept: application/pdf' )); // Vraag nu de pagina op, en sla het antwoord van de server // (als het goed is een PDF-document) op in $sPdf $sPdf = curl_exec($rCurl); // Sluit het cURL-verzoek nog even netjes af curl_close($rCurl); // Probeer het doelbestand te openen if ($rFile = @fopen("/var/www/test.pdf", 'w')) { // Schrijf de PDF-data naar het bestand en sluit deze fwrite($rFile, $sPdf); fclose($rFile); } } |
Zoals je ziet zit hier geen foutafhandeling in voor als de server niet beschikbaar is, of voor als JOD het bronbestand niet snapt. Maar ik ga niet alles voorkauwen
Recente reacties