Ich stand vor dem Problem, das eine Webanwendung ein PDF-Dokument erzeugen muss, und diese anschließend das Dokument auch noch an einen Drucker im Netzwerk senden muss.
Lange Zeit haben ich mit der .exe von Adobe Reader rumgebastelt, kam aber nie zu einer sauberen Ausführung. Alles was ich ausprobiert (und per Google) gefunden habe, war mumpitz. Schlußendlich bin ich zu der Lösung gekommen, dies mit Ghost Script zu machen. (Ich gehe davon aus, das GS so auch unter Linux funktionieren wird.)
Das Problem mit der AcroRd32.exe ist zum einen, das beim ausführen des Druckbefehls der Auftrag zwar gedruckt wird, aber anschließend der Reader offen bleibt und der Task nicht beendet wird. Es gibt zwar den Trick, nach einer gewissen Zeit den Task über die Shell zu beenden. Aber auf meinem Server hat dies nicht immer Funktioniert. Oftmals bliebt das komplette Skript hängen. oder es kam kein Ausdruck am Drucker an, oder der Task ließ sich manchmal nicht mal mehr über den Taskmanager beenden.
Die Lösung bei mir ist schließlich so:
Voraussetzung ist die Installation von Ghost Script auf dem Webserver.
Als erstes erzeuge ich per PHP aus einem HTML-Dokument ein PDF. Hierzu nutze ich html2pdf die Klasse (http://html2pdf.fr/) von Laurent Minguet.
$doc="mein htmlinhalt";
$html2pdf = new HTML2PDF('P','A4','de', false, 'UTF-8');
//$html2pdf->setModeDebug();
$html2pdf->setDefaultFont('Arial');
$html2pdf->writeHTML($doc, false);
$datei="file.pdf";
$html2pdf->Output($datei,"F");
Dieses erzeugte PDF lege ich ein temporäres Verzeichnis auf meinem Server. (Oben im Script ist der Pfad nicht mit angegeben)
Anschließend starte ich im PHP mit shell_exec(); ein kleines Shellscript zum starten von GS mit folgendem Inhalt:
rem %1 druckername rem %2 dateiname inclusive pfad echo printing %2 "C:\Programme\gs\gs8.70\bin\gswin32c.exe" -dBATCH -q -sDEVICE=mswinpr2 -dNOPAUSE -dNoCancel -sPAPERSIZE=a4 -dPDFFitPage -sOutputFile=%%printer%%%1 %2
… Und siehe da, wieder ein glücklicher Anweder mehr!