PDF Vorschaubild generieren

Alles, was PHP betrifft, kann hier besprochen werden.

PDF Vorschaubild generieren

Postby nullfreizeit » 06. January 2008 18:32

Hallo,

ich habe Xampp auf meinem PC installiert und starte damit ein PHP-Script welches für eine Mieterverwaltung nutze. Darüber erstelle ich mit FPDF auch Briefe und Nebenkostenabrechnungen für meine Mieter. Das alles funktioniert auch super.

Nun bin ich schon seit längerem durch Google auf der Suche nach einer Lösung die erstellten PDF Dateien (sind in der MySQL Datenbank gespeichert) in Vorschaubilder umzuwandeln (nur die erste Seite). Ich habe jetzt von sourceforge.net die Ghostscript Datei gs861w32.exe heruntergeladen und in c:/Programme/gs installiert. Auch ImageMagick, hab ich heruntergeladen (ImageMagick-windows.zip). Nur wie und wo kann ich es installieren?

Mein Xampp Verzeichnis liegt unter c:/Xampp. Ich bedanke mich bereits jetzt für eure Rückantworten.
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby nullfreizeit » 06. January 2008 19:44

Hallo,

ich weiß jetzt nicht wieviel Foren ich durchstöbert habe, aber jetzt klappt es zumindest wenn ich eine GIF nach JPG komprimieren will per Batch.

Batchdatei:
convert test.gif test.jpg

Allerdings will ich ja eine PDF nach JPG haben.
"convert test.pdf test.jpg" klappt nicht. Die Box geht auf und schließt sofort, test.jpg wird nicht erstellt. Ghostscript habe ich installiert, oder muss ich da noch was zusätzlich einstellen?

Hat jemand einen Tipp für mich?
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby nullfreizeit » 10. January 2008 18:41

Kennt sich keiner damit aus oder hat keiner Lust zu helfen?
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby nullfreizeit » 12. January 2008 10:59

Hallo,

hab jetzt eine PHP Datei mit dem Inhalt:

Code: Select all
<?
define('MAGICK_HOME','C:/xampp/imagegick/');
$sourcefile = 'C:/xampp/htdocs/test/test.gif'; //mit kompletter pfadangebe
$targetfile = 'C:/xampp/htdocs/test/test.jpg';
$cmd = MAGICK_HOME."convert ".$sourcefile." ".$targetfile;
exec ($cmd);
?>


Das klappt auch, nur wenn ich jetzt eine test.pdf in test.jpg umwandeln will geht es nicht. Es kommt auch kein Fehler.

Ich bin über jeden Tipp dankbar! :(
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby Scory » 12. January 2008 12:59

Mit ImageMagick und convert geht das nur schlecht. Die bessere Software dafür ist Ghostscript, und so sieht der Befehl aus, wie man die erste Seite einer test.pdf in eine test.jpg umwandelt (Achtung lang!):

Code: Select all
gswin32c.exe -q -dBATCH -dMaxBitmap=300000000 -dNOPAUSE -dSAFER -sDEVICE=jpeg
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dFirstPage=1 -dLastPage=1 -sOutputFile="C:\test.jpg"
"C:\test.pdf" -c quit


Der Befehl gswin32c.exe gehört zum Ghostscript Paket, zum Download hier klicken
Scory
 

Postby nullfreizeit » 12. January 2008 14:46

Hallo Scory,

das hätte ich dazu sagen sollen. Ghostscript habe ich installiert.
Liegt bei mir unter C:\Programme\gs
C:\Programme\gs\gs8.60\bin - da liegt der bin Ordner
in dem sind folgende Dateien:
gswin32.exe
gsdll32.dll
gswin32c.exe
gsdll32.lib

Wenn ich den Befehl ausführe:
Code: Select all
C:\Programme\gs\gs8.60\bin\gswin32c.exe -q -dBATCH -dMaxBitmap=300000000 -dNOPAUSE -dSAFER -sDEVICE=jpeg
-dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dFirstPage=1 -dLastPage=1 -sOutputFile="C:\xampp\htdocs\test\test.jpg"
"C:\xampp\htdocs\test\test.pdf" -c quit


öffnet er nur die test.pdf. Eine test.jpg wird nicht erstellt. Leider. Was mach ich denn falsch. Xampp läuft natürlich. :(
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby nullfreizeit » 12. January 2008 14:53

Ich danke dir. Es geht! Ich hatte es nur nicht in eine Zeile geschrieben!!!
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby nullfreizeit » 12. January 2008 15:38

Noch mal ne Zwischenfrage: Wie änder ich die Ausgabegröße?
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby Scory » 12. January 2008 16:02

Weiß ich nicht auswendig - ich glaube Ghostscript kennt eine Option "-r", mit der kann man die "Resolution" (= Auflösung"), also die Anzahl Pixel pro Seite, festlegen, zum Beispiel -r1200x800 - dann sind es nur 1200 mal 800 Pixel. Du mußt natürlich ein Format wählen, welches zur Eingabe passt (DIN A4 oder so?).

Spiele mal damit herum, außerdem gibt es noch die Option -sPAPERSIZE, beispielsweise -sPAPERSIZE=a4 (DIN A4 ist das natürlich) oder -sPAPERSIZE=legal (das ist US-Letter) usw.

Und - es gibt auch Doku, die darfst Du notfalls auch selbst lesen.

Wenn Du es gar nicht hinbekommst, kannst Du immer noch in einem 2. Schritt mit ImageMagick und "convert" die Größen ändern - das ist vielleicht sowieso besser.
Scory
 

Postby nullfreizeit » 12. January 2008 16:12

Hi,

also mit
-r_x_ bestimmt man die Auflösung
-g_x_ kann man Bildteile ausschneiden
-sPAPERSIZE=a4,a3,letter bewirkt leider nix

Die Doku hab ich mir zwar nicht durchgelesen, aber reingeschaut und da nix gefunden! Vielleicht kennt ja jemand den Befehl. Ich suche weiter.

Ich danke dir aber nochmals für deine Hilfe Scory. :P
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby Scory » 12. January 2008 17:02

>-r_x_ bestimmt man die Auflösung

Und damit geht es doch total einfach - der Standardwert beträgt 72 dpi für die Auflösung, d.h. ein DIN A4 Blatt wird in eine Datei mit 842 x 595 Pixel (Höhe x Breite) umgerechnet.

Wenn (beispielsweise) das Bild nur die halben Seitenlängen davon bekommen soll (also 421 x 298), dann mußt Du einfach "-r36", also 36 dpi als Auflösung angeben.

Spiel doch mal herum mit diesem Parameter, sooooo schwer ist das nicht.
Scory
 

Postby nullfreizeit » 12. January 2008 18:29

Hi Scory,

wusste gar nicht das man es damit beeinflussen kann, ich danke dir vielmals für deine Antworten. Vielen lieben Dank!!! :D
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby nullfreizeit » 12. January 2008 18:54

Hmm, doch zu früh gefreut.
Wollte mich eigentlich morgen dran machen es in die PHP-Datei einzubauen.

Hab es eben mal probiert.
Leider scheint es mit exec nicht zu funktionieren.

Wenn ich den selben Befehl wie ich es mit der Batch Datei gemacht habe in die PHP Datei gebe und mit exec ausführe läd er zwar ein wenig, das JPG Bild wird aber nicht erzeugt.

Code: Select all
$cmd = "C:\Programme\gs\gs8.60\bin\gswin32c.exe -q -dBATCH -dMaxBitmap=300000000 -dJPEGQ=100 -dNOPAUSE -dSAFER -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dFirstPage=1 -dLastPage=1 -r20 -sOutputFile=\"C:\xampp\htdocs\test\test.jpg\" \"C:\xampp\htdocs\hvs2.1\test\test.pdf\" -c quit";
exec ($cmd);


[EDIT] Auch ohne die Anführungsstriche (also hier \") bei den Pfadangaben nicht
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20

Postby Scory » 12. January 2008 21:29

Tja, dann mußt Du jetzt auf Fehlersuche gehen - bei mir funktioniert es tadellos.

Ein Tipp: benutze statt exec() den Befehl system() - dann bekommst Du eine Fehlermeldung angezeigt, falls ein Fehler auftritt.
Scory
 

Postby nullfreizeit » 13. January 2008 11:37

Aha!

Forward slashes benutzen, wie mir dieser Thread hier gezeigt hat und alles klappt! Vielen Dank nochmals für die gute Unterstützung.

http://community.apachefriends.org/f/viewtopi ... light=exec :P
nullfreizeit
 
Posts: 16
Joined: 26. December 2007 17:20


Return to PHP

Who is online

Users browsing this forum: No registered users and 23 guests