Web Seite als (mehrseitigen) Brief drucken

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
hallo zusammen,

ich habe einige Fragen zu CSS und 'media="print" '.

Es geht darum, dass ich ein Stylesheet entwickeln möchte, mit dessen Hilfe ich Texte antändig formatiert ausdrucken kann.
Das Egebnis soll ein Geschäftsbrief sein, bei dem ich folgende Eigenschaften steuern kann.
  1. Seitenränder
  2. Kopfbereich (rechts oben) - jeweils unterschiedlich für erste Seite und Folgeseiten
  3. Addresse (für Fensterumschlag)
  4. zweizeiliger Betreff - nur auf der ersten Seite
  5. Position der Anrede - nur auf der ersten Seite
  6. Fußzeile mit Angabe der Seitenzahl
  7. Faltmarken

Hat jemand von Euch schon mal so etwas (oder was ähnliches) gemacht und kann mir ein paar Tips oder einen Link auf eine gute Webseite geben.
Ich hatte vor, dass ganze mit absolut positionierten div Containern umzusetzen, aber vielleicht gibt es ja einen einfacheren Ansatz.
Mit 'media="print" ' habe ich bisher noch keine Erfahrungen und auch im Web nichts gefunden, was wirklich zur Aufgabe passt.

Was mir bisher völlig unklar ist, wie ich die unterschiedlichen Seitenlayouts für die erste und die Folgeseiten definiere und wie ich die Seitennummerierung erreichen kann.

Hintergrund:
Das Ganze steht in Zusammenhang mit einem Projekt, das - kurz gesagt - folgendes ermöglichen soll:
  1. Schriftverkehr (Geschäftsbriefe) als relationale Datenbank mit MySQL - alle Briefe sollen mit der Adressdatenbank und der Projektdatenbank verknüpft sein.
  2. Anlegen und Schreiben neuer Briefe mit dem Webbrowser
  3. Auswahl der Adressen aus MySQl Datenbank
  4. Zordnung zu einem Projekt
  5. Drucken der Briefe mit dem Webbrowser
 
Ich würde den Brief von vornherein als PDF ausgeben. CSS ist zu abhängig vom Browser für Geschäftsbriefe, die ja im Prinzip perfekt formatiert sein müssen. Außerdem kann man ein PDF besser herunterladen und aufheben.

Wenn Du PDF nicht selbst schreiben willst oder keine Bibliothek hast die das macht, kannst Du mit etwas Einlesen in PostScript genauso weit kommen (PS ist relativ menschenverständlich, PDF leider nicht so), aus dem PostScript kannst Du serverseitig z.B. mit ghostscript ein PDF machen.
 
hi
kennst du diesen artikel?:

http://www.alistapart.com/articles/goingtoprint/

ich seh im momment keinen hinderungsgrund für dein projekt (ein script + das stylesheet ...)

mit dem *media="print"* funktioniert übrigens prima - du druckst und er druckt im drucklayout, während du auf dem bildschirm das screenlayout siehst :D

... Was mir bisher völlig unklar ist, wie ich die unterschiedlichen Seitenlayouts für die erste und die Folgeseiten definiere ...

eventuell musst du den text in verschiedene divcontainer legen (ungefähr so: text bis zu einer bestimmten menge {kommt auch auf deine fontwahl an ...} in container eins, danach in container zwei)
 
Zuletzt bearbeitet:
CSS bietet da einige Mittel, z.B. auch für die Seitennummer.

@page :left {
@bottom-left {
content: counter(page);
}
}

Es gibt auch Specs vom W3C zu CSS-Profilen zum Drucken. http://www.w3.org/TR/2003/WD-css-print-20030813/

Beides dürfte jedoch an der nötigen Browserunterstützung scheitern.

Ich würde Dir auch zu PDF raten. HTML/CSS ist (derzeit) nicht wirklich zum Druck zu gebrauchen.
 
dannycool schrieb:
Ich würde den Brief von vornherein als PDF ausgeben. CSS ist zu abhängig vom Browser für Geschäftsbriefe, die ja im Prinzip perfekt formatiert sein müssen. Außerdem kann man ein PDF besser herunterladen und aufheben.
...
Danke für den Vorschlag;
ich möchte das aber nicht so machen.
Der gesamte Schriftverkehr soll ja in der Datenbank stecken.
Es soll auch möglich sein, Listenansichten nach bestimmten Kriterien (Datum von bis, Addressat, Projekt etc.) zu erzeugen.
Die Browserabhängigkeit ist kein Problem, da wir (ich :D) entscheide/n, welche Browser eingesetzt werden.
Was ich auf keinen Fall möchte, ist ein Wust von PDF (oder anderen)-Dateien.
Dann kann ich gleich mit Word (äächz) arbeiten.
---
xlqr schrieb:
...
eventuell musst du den text in verschiedene divcontainer legen (ungefähr so: text bis zu einer bestimmten menge {kommt auch auf deine fontwahl an ...} in container eins, danach in container zwei)
Danke für den Tip.
An so etwas hatte ich auch schon gedacht; ich hoffe aber, dass es auch einfacher geht.
Den Font kann ich vorgeben.
Was ich bisher noch nicht erwähnt hatte, ist, dass ich auch faxen möchte ;)
Den Artikel kannte ich noch nicht; danke! - werd ich mir mal durchlesen.
---
dms schrieb:
...
Ich würde Dir auch zu PDF raten. HTML/CSS ist (derzeit) nicht wirklich zum Druck zu gebrauchen.
Was wäre denn der Vorteil von pdf?
Eigentlich möchte ich nicht mit pdf arbeiten.
---
Bisher läuft das alles über Filemaker; ich suche aber eine open Source Lösung, zumal die Pflege der Datenbank dann einfacher wäre.
 
maceis schrieb:
Was wäre denn der Vorteil von pdf?

- Jeder kennt es
- Jeder kann es öffnen
- Es sieht überall gleich aus
- Du hast im Gegensatz zu HTML volle Kontrolle über das Layout
- Bei Bildern, Logos usw. kannst Du das ganze als ein einzelnes Dokument ausliefern
- Du kannst das PDF dynamisch aus der Datenbank generieren, das ist nicht mehr Aufwand, als HTML dynamisch aus der Datenbank zu generieren
 
Danke dannycool.

die meisten Punkte sind für mich nicht relevant. Es soll immer gleich aussehen, aber da das System nur intern angewendet wird, genügt eine Lösung die hier funktioniert.

Wie würde die Generierung als PDF vom Prinzip her funktionieren, z.B bei einem mehrseitigen Brieflayout mit nummerierten Seiten?
Ich stell mir das so vor, dass die Datensätze (ein Brief = ein Datensatz) mit dem Webbrowser und Perl cgis erstellt werden.

Zum Drucken bräuchte ich dann ein weiteres cgi Skript (bevorzugt in Perl), das die PDF Datei erzeugt und öffnet (kommt mir insofern schon wieder umständlich vor, als immmer eine zusätzliche Anwendung geöffnet werden muss).

Schaut Euch mal bitte das hier an, das entspricht schon vielmehr meinen Vorstellungen.
Ist, glaube ich, mit Javascript gemacht.
 
Zuletzt bearbeitet von einem Moderator:
dannycool hat die Vorteile von PDF schon ausreichend aufgezählt. Wenn es allerdings nur eine private/firmeninterne Anwendung werden soll und Du die benutzbaren Browser vorgeben kanst, hast Du sicher auch Chancen mit HTML/CSS.

Dein Beispiel im letzten Post verstehe ich nicht. Vielleicht liegts dran dass ich keinen Drucker habe. :) Bei mir kam nur die Meldung das die Seite sich selbst drucken möchte. Ja, das ist per JavaScript gelöst, ist für das eigentliche Problem aber irrelevant. JavaScript kann übrigens auch in PDF-Dokumente eingefügt werden.

Zum Erzeugen eines PDF-Dokumentes benötigst Du natürlich ein Programm/Script/Server, der diese Funktionalität bereitstellt. Ich verwende da immer gerne fpdf (fpdf.org/fpdf.de). Ist kostenlos, für alle Zwecke verwendbar und sehr leicht in der Anwendung.
Das Erzeugen der PDF-Dokumente sollte damit recht schnell umzusetzen sein.

Wenn es Dir unbedingt um eine browserbasierte Anwendung geht: Mit einem PDF-Browser-Plugin kannst Du die PDF-Dokumente ggf. auch in einem Frame/Iframe darstellen.

Im Aufwand würde ich ehrlich eine PDF-Lösung vorziehen. Bevor man sich stundenlang mit irgendwelchen Browsern rumschlägt...
 
Zuletzt bearbeitet von einem Moderator:
Hey, FPDF macht das ja richtig einfach mit php. :) Ich kannte entsprechend umfangreiche und kostenlose Lösungen bisher nur für Java. Nach Googeln hab ich aber auch Hinweise auf ein PDF.pm (Perl-Modul für PDF-Ausgabe) gefunden.

Die Alternative ist mit Perl PostScript erzeugen, was relativ einfach zu lernen ist, und das dann durch ghostscript zu jagen mit pdfwrite als device. Das ist auf jeden Fall kostenlos und funktioniert auch recht gut. Es ist auch das was ich verwende, allerdings hatte ich immer andere Anforderungen. Z.B. dass die Ausgabe nicht nur als PDF sondern auch in anderen Formaten wie PNG bereitgestellt werden können soll, das geht mit ghostscript eben auch, ohne dass ich mein PostScript ändern müsste.
 
Sorry, ich hatte meine letzte Frage unpräzise gestellt.

Wie kommen z.B. Absender, Adresse, Betreffzeilen und Text an die richtige Stelle in der PDF Datei?
Wie unterscheide ich das Layout für die erste und zweite Seite?

fpdf.org/de scheinen da auf den ersten Blick schon Antworten drauf zu geben.
Danke für den Hinweis.
Das setzt ja voll auf php auf - nun gut, von mir aus ;).

Scheint also eine echte Alternative zu sein - ich werd mich wohl mal damit beschäftigen.

Der Ansatz mit css interessiert mich trotzdem noch; falls jemand da noch interessante Infos hat -> immer her damit ;).

Danke schon mal bis hierher, an alle, die geholfen haben.
 
Hallo maceis!

Ich wollte vor kurzem auch ein Projekt CSS-Print-Projekt umsetzen. Habe mir die CSS-Angaben näher angeschaut und angefangen es umzusetzen. Dann kamen allerdings die Probleme. Die Angaben werden so gut wie von keinem Browser umgesetzt.
Kopfzeilen, Fußzeilen, eigentlich so gut wie alles klappt nicht. Anfänglich dachte ich, ich mache was verkehrt, habe dann allerdings im Web gelesen und mir wurde bestätigt, dass so gut wie kein Browser davon was beherrscht. Tolles Ding!
Ich werde meine Sache nun wahrscheinlich auch mit FPDF umsetzen, wobei ich es auch lieber in CSS gehabt hätte.
Falls Du aber mit CSS eine Lösung finden solltest oder ich mich tatsächlich nur zu dumm angestellt habe, würde mich dies natürlich interessieren.

Schöne Grüße, hoschy07
 
maceis schrieb:
Wie kommen z.B. Absender, Adresse, Betreffzeilen und Text an die richtige Stelle in der PDF Datei?
Wie unterscheide ich das Layout für die erste und zweite Seite?
Ist recht einfach. Die komplette Ausgabe musst Du ja in einer Schleife erzeugen, da Du bei jeder neuen Zeile auf Seitenende prüfen und ggf. eine neue Seite erzeugen musst. In dieser Schleife kannst Du die Seitenzahl einfach hochzählen. Je nach Seite kannst Du ganz einfach verschiedene Inahlte (Logo, Briefkopf, etc.) ausgeben.

Die Einzelnen Elemente wie Absender etc. kannst Du (wie auch bei CSS) entweder absolut oder, mehr oder weniger, relativ positionieren.

Zum Positionieren: SetXY()
Zum ausgeben von Text: z.B. MultiCell()
 
Zuletzt bearbeitet von einem Moderator:
Ich hab ein wenig damit experimentiert und bin soweit ganz gut reigekommen.
Warum man nach jeder neuen Zeile auf Seitenende prüfen muss, habe ich jetzt nicht verstanden, da es ja sowas wie "SetAutoPageBreak()" gibt.
"PageNo()" gibt die aktuelle Zeilennummer aus.
Ob das dann mit verschiedenen Seitenlayouts für die erste und Folgeseiten klappt, hab ich noch nicht herausgefunden.

Insgesamt echt ne interessante Sache.

Wenn man ohnehin über pdf arbeitet, wäre allerdings alternativ zu prüfen, ob man nicht Latex einsetzt. Da gibts ja die Klasse dinbrief, die einem auch so manches abnimmt.
Zudem hat man die üblichen Gestaltungsmöglichkeiten von Latex (Listen, Tabellen, Formeln, low-level Zeichnen etc.).

Kann ich jetzt noch nicht sagen, was ich besser finde; das muss ich erst noch besser ausprobieren.
 
wenn du dich in die serverseitige erzeugung von pdf einarbeiten möchtest, solltest du dir mal "XSL formatting objects (XSL-FO)" ansehen...

http://xmlgraphics.apache.org/fop/

der einstieg ist nicht wirklich einfach - aber die möglichkeiten dafür recht beeindruckend und das ganze ist zudem nicht lizenzpflichtig und daher kostenfrei in diesem punkt. man sollte vorab prüfen, ob die anforderungen an die dokumente von der aktuellen version der komponenten abgedeckt werden

die inhalte kannst du - wie du möchtest - auch in deiner DB speichern. der worklflow ist - grob gesagt so:

MySQL-Daten => Mit PHP => per XML + XSL nach => FO transformieren und mit FOP ein => PDF rendern.

wenn dir das jetzt nicht zu kompliziert erscheint .... es ist in der praxis einfacher, als es klingt
 
catvarlog schrieb:
das ganze ist zudem nicht lizenzpflichtig und daher kostenfrei in diesem punkt.

ich meinte eigentlich "lizenzgebührenpflichtig" - also für umme.
 
maceis schrieb:
Wenn man ohnehin über pdf arbeitet, wäre allerdings alternativ zu prüfen, ob man nicht Latex einsetzt.

Das halte ich nicht für die blödeste Idee, solang Du alles ordentlich quotest, allerdings ist pdflatex noch um eine Größenordnung langsamer als ghostscript. Wenn es vorhanden ist, warum nicht?
 
Zurück
Oben Unten