CSS Anweisungen wie "@media print" werden meines Wissens nur von Browsern umgesetzt. Ich selbst verwende üblicherweise in meinen Stylesheets irgendwo untendran so Dinge wie:
@media print {
#navi {display:none}
}
Es ist nicht sinnvoll, das Menü mit auszudrucken. Schade um den Platz. Nur können Programme wie
htmldoc oder
pisa oder
html2ps wenig bis gar kein CSS. Das macht eine automatisierte Arichvierung in PDF Files in schöner, sinnvoller und dem Original entsprechender Form schwierig.
Die Browser wiederum brauchen immer einen Xserver und der ist auf Webservern nicht verfügbar. Außerdem ist ein Browser selten so ausgelegt, dass etwas ohne Usereingabe funktioniert.
Ich habe aber tatsächlich eine Lösung gefunden:
Xvfb + Firefox3 + Extension CommandLinePrint
Der Vorteil dieser Lösung ist neben der vollen CSS Unterstützung, dass Firefox (mit Cairo) vollwertige PDF's erzeugt, die zur Langzeitarchivierung geeignet sind (Text als Text, eingebundene Schriften).
Xvfb ersetzt den Xserver für Firefox.
Was wird auf dem Server benötigt:
Xvnc
Xvfb
Firefox 3 samt Abhängigkeiten (xulrunner...)
Ist das alles installiert, konfigurieren wir ein Xvnc Passwort und bauen von zuhause einen SSH Tunnel zum Server.
Xvnc brauchen wir nur am Anfang zum Installieren des Firefox Plugins und für Einstellungen. Auch das Passwortfile wird danach nicht mehr benötigt und gelöscht.
Auf dem Server als root:
vncpasswd /tmp/vncpw
Xvnc -geometry 800x600 -rfbauth /tmp/vncpw -depth 16 :2 &
Schritt eins legt ein Passwortfile an, Schritt zwei startet den Xvnc Server.
Zuhause als Userlein:
ssh -L 5901:127.0.0.1:5902 -N -f -l user 123.123.123.123
^ ^ ^ ^ ^
localport remoteport bg user remotemachine
Zu beachten: 5902 ist der Port des zweiten Displays, als solches ist es ja konfiguriert (:2).
Im Zweifelsfall erfährt man den Port auf dem Server mit "netstat -tap | grep vnc".
Auf dem Server als Userlein:
firefox --display=localhost:2.0 about:blank
Zuhause als Userlein:
vncviewer localhost::5901
Nun das vnc Passwort eingeben und im Idealfall seht ihr Firefox mit einer leeren Seite.
Der nächste Schritt ist das Installieren des
Command Line Print Plugins. Das bekommt ihr auf
torisugari.googlepages.com/commandlineprint2
Das .xpi File im vncviewer-Firefox herunter laden (Firefox legt es auf den Desktop), die Datei öffnen und Installieren. Eventuell gleich noch die Einstellungen des Plugins anpassen.
Zu beachten: es ist nur ein Schmalspur-X und es gibt auch keinen Windowmanager, also keine Fensterrahmen.
Hat das alles geklappt, kann zuhause der Tunnel geschlossen, auf dem Server (als root) der Xvncserver beendet (kill) und das vnc Passwortfile gelöscht werden.
Xvnc wird nicht mehr benötigt. Stattdessen starten wir (als root oder besser Userlein) auf dem Server Xvfb:
Xvfb :2 -screen 0 800x600x24&
Als Userlein auf dem Server erstellen wir das erste PDF mit Firefox:
firefox --display=localhost:2.0 -print http://google.com -printmode pdf -printfile '/home/user/test.pdf'
Die Option "-printfile" kann, falls sie zu viele Fehlermeldungen verursacht, auch weggelassen werden. Firefox legt die PDF's dann auf dem Desktop mit dem konfigurierbaren Namen ab.
Falls viele Fehlermeldungen bezüglich fonts auftauchen - solange es funktioniert einfach ignorieren.
Der Rest ist Skriptarbeit (für einen Cronjob...). Denkbar wäre auch ein CGI Skript als Service auf dem Server - sofern die Mozilla Lizenz so etwas erlaubt.
Eine Idee für einen Cronjob:
1) Xvfb starten (als unprivilegierter User)
2) firefox die gewünschten PDF's erzeugen lassen (als unprivilegierter User)
3) Xvfb stoppen