PDF-dokument har en väsentlig fördel framför exempelvis HTML, och det är att dokumenten ser likadant ut oavsett vilken läsare eller dator du användare för att öppna det på. Även om HTML strävar efter samma sak så är det tyvärr långt ifrån i praktiken. Detta gör att PDF-dokument lämpar sig väldigt bra till dokument som kanske anses ”för viktiga” för att endast visas i HTML. Ett exempel skulle kunna vara fakturor, rapporter eller andra viktiga genererade dokument.
Jag har själv använt mig av ett egenutvecklat script för att generera fakturor till PDF på automatik från PHP. Jag har använt mig av biblioteket PDFlib, men efter en ominstallation av Apache/PHP märkte jag att alla mina fakturor fick en exempeltext tvärs över hela dokumentet. Detta på grund av att jag inte har någon licens. Eftersom jag anser att licenserna är orimligt dyra så letade jag upp ett annat alternativ till PDFlib. PHP Pdf creation heter lösningen på mitt problem. Den stödjer fler funktioner än vad som fanns i PDFlib Lite som jag tror jag använde tidigare, och mycket mindre kod för att generera samma dokument som tidigare. En annan fördel är att PHP Pdf creation är endast en klass och inte en tillbyggnad till PHP som PDFlib är, vilket resulterar i att du behöver inte aktivera ‘extension’ för PDFlib i PHP.ini.
Efter drygt 2 timmars arbete har jag nu bytt från PDFlib till PHP Pdf creation. Det är inte speciellt svårt att jobba med PDF-dokument från PHP och jag rekommenderar det om ni har en tjänst/verktyg där det skulle kunna passa in. Exempelvis så är detta all kod ni behöver för ett ”Hello World”-dokument:
// Inkludera klass-filen
include ‘class.pdf.php’;
// Skapa ett nytt objekt
$pdf = new Cpdf();
// Välj font och skriv ut ”Hello Word” med text-storlek 30
$pdf->selectFont(‘./fonts/Helvetica’);
$pdf->addText(30,400,30,’Hello World’);
// Skicka PDF-dokumentet till webbläsaren
$pdf->stream();
ImageMagick är en mjukvara med syfte att skapa och ändra bilder, men skiljer sig från program som Photoshop. ImageMagick bygger på att du anropar programmet genom en kommandotolk, så som ”Command Promt” i Windows eller motsvarande i andra operativsystem. Detta kan man med PHP uppnå med funktionen system() eller exec().
Det jag ville uppnå var att skapa thumbnails (tumnaglar) av större bilder när de laddas upp till webbplatsen. Tumnaglarna skulle dessutom ha absoluta mått oavsett om bilden var vertikal eller horisontal, och samma förhållande som original-bilden så den inte känns ut- eller ihopdragen. Med andra ord så vill jag att så mycket som möjligt av orginalbilden finns med i tumnageln och resten klipps bort för att hålla rätt aspect ratio.
Kommando till ImageMagick i Windows:
convert ”C:\orginal-image.jpg” -thumbnail 150×100^^ -gravity center -crop 150×100+0+0 +repage -format jpg -quality 75 ”C:\thumbnail.jpg”
Kommando till ImageMagick i Linux/Unix:
convert ‘/home/orginal-image.jpg’ -thumbnail 150×100^ -gravity center -crop 150×100+0+0 +repage -format jpg -quality 75 ‘/home/thumbnail.jpg’
PHP-funktion med kommando för Windows:
system(”convert \”C:\\orginal-image.jpg\” -thumbnail 150×100^^ -gravity center -crop 150×100+0+0 +repage -format jpg -quality 75 \”C:\\thumbnail.jpg\”");
Skillnaden mellan Windows och Linux är inte mycket. Jag har för vana att använda apostrof istället för citattecken i Linux. Samt att man är tvungen att att använda escape character ^ för anropet i Windows.
För att snabbt förklara vad som händer så anropas convert men orginal-image.jpg som bild att behandlas. -thumbnail förminskar bilden med hjälp av geometrin som nämns efteråt (150×100) och tar bort all meta-data i bilden. 150×100 är storleken på bilen som önskas och operator ^ (^^ i Windows) berättar för ImageMagick att geometrin är minsta möjliga. Bredden och Höjden får alltså aldrig vara mindre än det, men så nära som möjligt. Detta gör att antingen bredden eller höjden har uppnåt storleken vi vill ha men att där finns rester att klippa bort på bilden. Vi sätter därför fokus i mitten av bilden med -gravity center och klipper ut en bild i 150×100 pixlar av det som är kvar med -crop 150×100+0+0. De andra parametrarna +repage -format jpg -quality 75 ser till att det blir en bildfil (det som kliptes ut med -crop) och inte två filer, formatet på tumnageln blir JPEG och kvaliteten är 75 av 100 (ett värde jag tycker är rimligt att använda).