.NET 2.0 - Drucken

Paebbels

Grünschnabel
Hallo,

ich suche eine Möglichkeit in .NET Seitenorientiert zu drucken.
Die Druckmöglichkeiten die .NET 2.0 derzeit über Drawing.Printing bietet sind mehr als hinderlich.

Ich brauche eine möglichkeit das man noch folgendem Modell drucken kann:

Dim pdoc as new Document
dim ppage1 as new page(width, height)
pdoc.add(ppage1)

ppage1.graphics.drawstring(.....)
'weitere zeichenbefehle)

dim ppage2 as new page(width, height)
ppage2.graphics.drawstring(.....)
'weitere zeichenbefehle)

pdoc.printersettings = ... wie üblich in .NET ein printersettingsobjekt

pdoc.print()

denn nur über ein solches modell ist es möglich eine darstellung der form "Seite x von yyy" zu drucken, der bisherige Printing-ansatz von Microsoft sieht ein stream-basiertes drucken vor, bei dem man wenn eine seite nicht reicht, eine weitere seite anfordern kann (PrintingEventsArgs.HasMorePages = true) jedoch kann man so nicht sagen wenn man mit der seite yyy fertig ist, das er auf seite eins druckt "seite 1 von yyy", denn diese ist durch die stream-behandlung schon längst ins papier "geprägt" wurden....

ich hatte mich jetzt schon mit den neuen klassen des .NET 2.0 befasst, die ein doppelt gepuffertes graphics objekt bereitstellen, soweit ok...

man kann damit im ram ein graphics objekt erzeigen, auf dem man zeichnungen und texte vorrendern kann und diese später auf ein "echtes" graphics objekt übertragen kann, doch die allocate-methode erfordert die angabe einen bezuges, da jedes graphics-objekt einen bezug zu einem control oder der gleichen benötigt :(

also ich sehe jetzt 2 möglichkeiten
1.
wo finde ich eine fertige umsetzung dieses druckermodelles

oder
2.
wie kann ich ein graphics-objet im RAM erzeugen, das keinen bezug hat, da ja später Printing.BufferedGraphics.Render auf PriningEventsArgs.Graphics angewendet werden soll !!

denn der "Bezug" wird ja erstmals bei der ereignisbehandlung von PrintDocument.PrintPage "sichtbar/nutzbar"

falls fragen sind einfach schreiben....

ICQ# 111614198
 
Fragen hab ich keine, aber beispielsweise eine Anregung.

Halte dich bitte an unsere Netiquette hier auf tutorials.de und beachte die Groß- und Kleinschreibung. Diese ist Pflicht!


Zu deinem Problem:
Entweder du machst dies über einen Report-Generator und nutzt dessen Fähigkeiten oder du druckst beispielsweise über Word, oder du erstellst dir ein entsprechendes Framework selbst.

Was du noch machen kannst: Schreib deine Daten in ein XML und generier dir per XSL ein HTML File, welches du über das Browser-Control anzeigen und auch drucken kannst.
 
Hallo,

danke die Antwort.
Nach dem nochmaligem Lesen und Durchsuchen der Netiquette konnte ich keine Pflicht zur Groß-/Kleinschreibung finden, aber lassen wir das es geht hier um wichtigeres....

Ich habe verschiedenste Reportgernatoren getestet die alle nach dem gleichen Prinzip funktionieren oder deren Funktionen mit mit meinen Forderungen übereinstimmen, z.B. die meisten nutzen als Datenquelle eine ADO .NET Datenquelle oder eine dazu kompatieble Datasource Schnittstelle.

Crystalreports bietet zwar eine Serienbrief-Funktion, doch blicke ich beim Benutzen des Erstellerassistenten nicht durch was er von mir möchte.

XML / HTML wäre ein guter Ansatz, doch kann man XML nicht so einfach auf DIN A4 rendern, woher soll das XML-Dokument wissen die zeile passt nicht mehr aufs Blatt, es ist so schon schwer genug mit dem gegebenen Mitteln eine Seite zu drucken, die sich massiv von Druckvorschau zum Original verändert durch Seitenränder etc.
Das Programm soll außerdem nicht durch "Umleitungen" glänzen, sodass der Benutzer ständig Buttons klicken muss => BrowserControlVorschau => Drucken => OK
sondern Vertrag drucken => pdf | papier

Einmal abgesehen davon das ich XSLT noch nie benutzt habe, aber weiß was es ist, würde es ein riesiger Aufwand sein einen XSLT Transformer zu schreiben.

Word kommt auch nicht in Frage, da das Programm unabhängig sein soll von 3. Software und ich auch aus Überzeugung nie solche Dreckigen Lösungen nutzen würde!

Das passende Framework selbst schreiben, hmmm, das war glaub ich meine Frage, oder?
Wie man das realisieren könnte....

Es ist ja bloß eine Collection von Page-Objekten, die eine Graphics Objekt enthalten, doch dieses Graphics-Objekt kann man leider in .NET nicht instanzieren.

MfG
Patrick Lehmann
 
Transformieren ist mit Bordmitteln zu machen. Du müsstest dir nur ein XSL für dein zu druckendes Dokument schreiben. Eine Sache für ein paar Minuten (je nach Aufwand), da benötigst du wesentlich mehr eine eigene Lösung zu entwerfen.
 
Ok,

nehmen wir mal an ich würde XSLT nutzen, dann könnte ich die Daten in XML abspeichern, dann müsste ich im gleichen Zuge darin CSS 2.0 einbasteln für die Formatierung, das müsste man dann wiederum über einen XSLT Prozessor transformieren und würde was erhalten ?
Ich brauche als Ausgabe ein PDF-Dokument nach dem 6.0er oder 7.0 Standard also intern PDF 1.6, ist das glaub ich.
Und wie bekomme ich das Transformierte nun in Papierform?
Natürlich ohne den Umweg es Acrobat öffnen zu müssen?

Außerdem wie realisiert man dann solch ein kompliziertes XML und XSLT Dokument
- Firmenlogo zentriert oben
- Anschrift links oben
- rechts oben Datum, Kundennummer, Rechnungsnummer, Seitenzahl
- Überschrift
- Teilüberschift für jeden Vertrag der in Rechnung gestellt wird
- eine tabellarische Auflistung der wichtigsten Vertragspunkte und dahinter der Preis
- Trennung
- das ganze wiederholt sich für jeden Vertrag, beim Seitenende muss eine neue Seite angefangen werden
- Rechnungssumme
- Zahlungshinweise + Hinweis auf Kleinunternehmerregelung
- Rechteckiger Footer mit Anschrift, Bankverbindung und Steuernummer

Es war schon schwer genug ein ansprechendes Desin in Word zu entwerfen, ich glaube kaum das es leicht wird einen XML, einen XSLT und einen Tranbsformer zu schreiben....

Könnten Sie mir denn ein solches XSLT Beispiel zeigen ?
Bitte danna ber komplett vom XML Dokument, über den Umsetzer bis zum fertigen Resultat.
 
Ähm, also worum gehts jetzt eigentlich? Soll das Endergebnis ein Ausdruck sein, oder soll es ein PDF sein?

Wie ich bereits gesagt habe, das XSL würde das XML nach HTML transformieren. Alles was mit HTML möglich ist, kann damit verwendet werden. CSS ins XML einzubauen - ok, ich denke es war spät wie du dein Posting verfasst hast.

Die Seite einfach mal im HTML baun und dann in ein XSL umwandeln. Das ist wirklich nicht schwer und da gibt es auch genügend Ressourcen.

Und nochmal: Einen Transformer musst du nicht schreiben. Das ist im Framework alles schon dabei. Es ist ja völlig egal was wohin transformiert wird. Das Teil arbeitet immer gleich, ergo fällt dieser Punkt weg.

Zum Thema XSL: http://www.w3.org/Style/XSL/

Und ein Beispiel gibt es hier: http://www.brics.dk/~amoeller/XML/xslt-4.1.html

PS:
Zum Thema Netiquette hattest du nichts gefunden: Punkt 15 durchlesen ;-)
 
Ok es war anscheinend wirklich schon spät *g*

Also es müssen im Normalfall 2 Exemplare erstellt werden, einen in Papierform und eines als PDF, welches auf einem Datenträger gespeichert wird und dann dem Kunden per E-Mail zugesagt wird.

Die PDF-Datei muss den Standard der Versionen 6.0 oder 7.0 erfüllen, inkl. Passwortschutz, vieleicht kommt noch die Signierung hinzu.

Das mit dem CSS, ich hab das mal irgendwo gelesen, dass man XML eine Menge einbauen kann....aber egal.

Ich werd mir mal diesen Link von Ihnen zu Gemüte ziehen.
 
Mit XML und XLST kenne ich mich aus aber wie kann ich die beiden unter c# oder .NET zusammen bringen und drucken?

Wäre super wenn mir jemand ein Sampel posten könnte.

THX
 

Neue Beiträge

Zurück