Windows Forms und WPF

05/10/2009 - 11:28 von Christian Mählig | Report spam
Hallo!

In einem Windows Forms-Datenbank-Projekt soll der fröhliche User seine Daten
auch drucken können. Bisher habe ich dies über XML/XSLT gelöst. Ich habe die
Rohdaten für den Report in eine XML geschrieben und darauf eine
Transformation angewendet und das ganze in ein verstecktes WebBrowser-Control
geladen. Somit konnte das dann über die Druckfunktion vom guten Internet
Explorer auch gedruckt werden (schade, dass immer die Kopfzeile/Fußzeile
standardmàßig dabei ist).

Nun möchte ich aber gerne die Vorteile von WPF-Dokumenten (FlowDocument)
nutzen. Dazu habe ich die Daten in eine XAML-Datei geschrieben (über
XmlTextWriter - ja ich weiß, es geht auch anders ;) ) und diese dann dem
Browser übergeben. Hier habe ich den Report gleich im Querformat. Dann wollte
ich das Drucken testen...
"Drucke" ich mit dem XPS Document Writer habe ich eine schöne .xps, nehme
ich den Adobe PDF-Writer um das Drucken zu testen, habe ich eine schlechte
.pdf.
Hier ist die Seite im Hochformat und der Inhalt teilweise abgeschnitten und
verloren.
Danach habe ich die XPS-Datei einfach als pdf gedruckt, mit dem Erfolg, dass
der Adobe Acrobat mir das ganze im Querformat druckt, aber im Hochformat
anzeigt.

Lange Rede kurze Frage: Wie kann ich ein XAML-Flussdokument (im Querformat
definiert - Width und Height einer A4-Seite vertauscht) aus einer Windows
Forms-Anwendung heraus vernünftig drucken?

Gruß,
Christian
 

Lesen sie die antworten

#1 Frank Dzaebel
05/10/2009 - 21:04 | Warnen spam
Hallo Christian,

Lange Rede kurze Frage: Wie kann ich ein XAML-Flussdokument (im
Querformat definiert - Width und Height einer A4-Seite vertauscht)
aus einer Windows Forms-Anwendung heraus vernünftig drucken?



Du kannst die Überladung mit dem PrintTicket nehmen.
Früher gab es AFAIK Unterschiede über den IE-Viewer und den
des XPS EssentialPacks.

Rudimentàr skizziert:

private void XpsDokumentSchreiben()
{
File.Delete("test.xps");
XpsDocument doc = new XpsDocument("test.xps", FileAccess.ReadWrite);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(doc);
IDocumentPaginatorSource docSource = flowViewer.Document as
IDocumentPaginatorSource;

PrintTicket pt = new PrintTicket();
pt.PageMediaSize = new PageMediaSize(width, height);
pt.PageOrientation = (width > height) ?
PageOrientation.Landscape : PageOrientation.Portrait;

writer.Write(docSource.DocumentPaginator, pt);
doc.Close();
}

_________________
Andere Hintergründe:

[Drucken eines XPS-Dokuments]
http://msdn.microsoft.com/de-de/lib...71525.aspx
(->suche nach Landscape)

[CodeProject: FlowDocument pagination with repeating page headers]
http://www.codeproject.com/KB/WPF/P...nator.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen