Ej,
Ik ben bezig met een simpele PDF document uploader. Nu is het zo dat de PDF's die ik wil uploaden nogal "in elkaar geprutst" zijn. Dat wil zeggen: er wordt van nogal exotische (niet door GS herkende) paper size gebruik gemaakt.
Basically zijn de PDFs (volgens mij) gemaakt door alles uit een powerpoint pagina te copy/pasten in een Word document wat daarna nog eens naar PDF geconverteerd is. Anyway, the problem at hand:
Als ik een preview thumbnail maak, gebruik ik doorgaans de volgende commando's:
Dat werkt prima voor standaard (portrait) PDF files, maar niet voor landscape files, en al helemaal niet voor de exotische page size files.
Lees: de gegenereerde thumbnail staat dan "op z'n kant". Dat willen we niet
Ik bedacht me dus dat 't handig zou zijn om de page size van (de eerste pagina van) een PDF file uit te lezen, en aan de hand daarvan te bepalen of een PDF in landscape, danwel portrait orientation staat.
Dit genereert een temp file waarin de Bounding Box van de betreffende (eerste) pagina van de PDF file staat. Zoiets dus:
Je zou dus zeggen dat als je de coordinaten bekijkt je een heel eind zou komen:
Maar helaasch, als ik een thumbnail van een 'portrait' pdf genereer, staat deze toch op z'n kant. Hier heb ik dus niks aan. Meest logische vervolgstap: kijken naar de actual page size: in dit geval is dat 9,97" x 7,49" ... Stiekem toch landscape dus.
Maar ik heb geen flauw idee hoe ik deze properties uit de file moet toveren. En this is where you come in .....
Oh. Ik heb natuurlijk ook de verschillende PDFlib (lite) functies bekeken, maar ik krijg er alleen maar errors mee
.. what the ... I said get ....
Anyway,
Ik zoek dus een mogelijkheid om te bepalen of ik een gegenereerde thumbnail nog (met ImageMagick's convert) moet roteren. De bounding box is geen optie. Page size zou kunnen maar ik weet niet hoe ik die moet achterhalen. Page orientation kan ik al helemaal niet terugvinden ... and I'm running out of options.
Iemand?
Ik ben bezig met een simpele PDF document uploader. Nu is het zo dat de PDF's die ik wil uploaden nogal "in elkaar geprutst" zijn. Dat wil zeggen: er wordt van nogal exotische (niet door GS herkende) paper size gebruik gemaakt.
Basically zijn de PDFs (volgens mij) gemaakt door alles uit een powerpoint pagina te copy/pasten in een Word document wat daarna nog eens naar PDF geconverteerd is. Anyway, the problem at hand:
Als ik een preview thumbnail maak, gebruik ik doorgaans de volgende commando's:
PHP:
1
2
3
4
| $cmd = "/usr/bin/gs -q -dNOPAUSE -dBATCH -sDEVICE=jpeg -sOutputFile=$dest $src 2>&1"; exec($cmd); $cmd = "/usr/bin/convert -resize $width"."x"."$height $dest $dest 2>&1" exec($cmd); |
Dat werkt prima voor standaard (portrait) PDF files, maar niet voor landscape files, en al helemaal niet voor de exotische page size files.
Lees: de gegenereerde thumbnail staat dan "op z'n kant". Dat willen we niet
Ik bedacht me dus dat 't handig zou zijn om de page size van (de eerste pagina van) een PDF file uit te lezen, en aan de hand daarvan te bepalen of een PDF in landscape, danwel portrait orientation staat.
PHP:
1
2
3
| $outputFile = '/tmp/bbox-'.md5(time()); $inputFile = '/home/thedane/test-portrait.pdf'; $cmd = "/usr/bin/gs -q -dNOPAUSE -dBATCH -dNOPROMPT -dFirstPage=1 -dLastPage=1 -sDEVICE=bbox -dFirstpage=1 -dLastpage=1 $inputFile2>&1 >/dev/null | tee $outputFile "; |
Dit genereert een temp file waarin de Bounding Box van de betreffende (eerste) pagina van de PDF file staat. Zoiets dus:
code:
1
2
| %%BoundingBox: 88 34 521 757 %%HiResBoundingBox: 88.073997 34.613999 520.649984 756.600024 |
Je zou dus zeggen dat als je de coordinaten bekijkt je een heel eind zou komen:
PHP:
1
2
3
4
5
6
7
8
9
| $buf = file($outputFile ); $coords = explode(' ', $buf[0]); // width > height ? if (($coords[3] - $coords[1]) > ($coords[4] - $coords[2])) { // PDF in LANDSCAPE // rotate file. } else { // PDF in PORTRAIT } |
Maar helaasch, als ik een thumbnail van een 'portrait' pdf genereer, staat deze toch op z'n kant. Hier heb ik dus niks aan. Meest logische vervolgstap: kijken naar de actual page size: in dit geval is dat 9,97" x 7,49" ... Stiekem toch landscape dus.
Maar ik heb geen flauw idee hoe ik deze properties uit de file moet toveren. En this is where you come in .....
Oh. Ik heb natuurlijk ook de verschillende PDFlib (lite) functies bekeken, maar ik krijg er alleen maar errors mee

PHP:
1
2
3
4
5
| $pdf = new PDFlib(); $pdf->begin_document($inputFile, ""); echo $pdf->get_value('pagewidth', 0); |
code:
1
| Fatal error: Uncaught exception 'PDFlibException' with message 'Can't set parameter 'pagewidth' in 'document' scope' in /var/www/gs.php:13 Stack trace: #0 /var/www/gs.php(13): PDFlib->get_value('pagewidth', 0) #1 {main} thrown in /var/www/gs.php on line 13 |
.. what the ... I said get ....

Anyway,
Ik zoek dus een mogelijkheid om te bepalen of ik een gegenereerde thumbnail nog (met ImageMagick's convert) moet roteren. De bounding box is geen optie. Page size zou kunnen maar ik weet niet hoe ik die moet achterhalen. Page orientation kan ik al helemaal niet terugvinden ... and I'm running out of options.
Iemand?
edit:
Ohja, als ik de betreffende PDF in een reader (such as Adobe Acrobat) open, verschijnt het document wel correct: niet gekanteld, in een soort van landscape mode.
Ohja, als ik de betreffende PDF in een reader (such as Adobe Acrobat) open, verschijnt het document wel correct: niet gekanteld, in een soort van landscape mode.