none
Drucken kursiver Schriften RRS feed

  • Frage

  • Hallo, ich habe ein Problem dem ich nicht so recht auf die Spur komme:

    Ich programmiere eine Anwendung, in der der Benutzer u. a. Text in RichTextBoxen editieren kann. Das Editieren umfasst auch die Anwendung aller gestalterischen Mittel (Schriftarten, -größen, ...). Später kann der Benutzer 'sein Werk' zu Papier bringen. Dies setze ich durch die Methode PrintDialog.PrintVisual um.

    Das Problem, das dabei entsteht, ist, dass manche Schriften (solche, die von Haus aus kursiv sind wie zB Lucida Calligraphic aus Win7) beim Drucken noch einmal 'kursiviert' werden. Am Bildschirm betrachtet ist alles o. k., wenn ich das Dokument in eine XPS-Datei serialisiere ist alles o. k., nur wenn ich drucke sehen diese Schriften Sch... aus. Dieser Effekt bleibt bestehen, wenn ich mir eine RTB aus dem Dokument heraussuche (via VisualTreeHelper), diese über XamlWriter.Save und XamlReader.Parse 'clone' und nur diese geclonte RTB drucke.

    Ich habe zur Kontrolle ein Minimal-Programm erstellt, in dem nur eine RTB enthalten ist. Wenn diese gedruckt wird, sieht alles - auch mit den genannten Schriften - ordentlich aus. Ich habe im Moment keine Ahnung, an welcher Stelle ich nach der Ursache suchen soll. Weiß jemand Rat?

    Zur Veranschaulichung ... so sieht es am Bildschirm aus:

    und so auf dem Drucker:

    Die unterschiedlichen Breiten der ScreenShots und die Unterschiede in den Schriftgrößen liegen daran, dass beide aus der Echt- bzw. der Minimal-Anwendung stammen. Es geht ausschließlich um die zusätzliche Neigung der Buchstaben. Wodurch kann so etwas begründet sein?

    Danke für Eure Hilfe.

    Jürgen

    Nachtrag: Drucken via MS XPS-Printer liefert auch ein ordentliches Ergebnis
    Nachtrag: Ich habe gerade festgestellt, dass das Minimalprogramm nicht mit derselben Framework-Version arbeitet ... der Fehler bleibt (natürlich): V3.5 funktioniert (Minimalprogramm), .Net4 funktioniert nicht

    Dienstag, 4. Juni 2013 14:25

Alle Antworten

  • Ein Nachtrag dazu:

    Ich habe mittlerweile das Drucken in meinem 'echten' Programm wie folgt reduziert:

    RichTextBox rtb = getRTB(printPage) as RichTextBox;
    Size elementSize = rtb.RenderSize;
    string xamlSource = XamlWriter.Save(rtb);
    Clipboard.SetText(xamlSource);
    UIElement uiElement = XamlReader.Parse(xamlSource) as UIElement;
    uiElement.Measure(elementSize);
    uiElement.Arrange(new Rect(elementSize));
    uiElement.UpdateLayout();
    
    dialog.PrintVisual(uiElement, string.Empty);

    Die Funktion getRTB sucht in dem zu druckenden Dokument die einzige RichTextBox heraus. In meinem 'Minimalprogramm' arbeite ich dann wie folgt:

    Size elementSize = new Size(312d, 162d);
    string xamlSource = Clipboard.GetText();
    
    UIElement uiElement = XamlReader.Parse(xamlSource) as UIElement;
    uiElement.Measure(elementSize);
    uiElement.Arrange(new Rect(elementSize));
    uiElement.UpdateLayout();
    
    dialog.PrintVisual(uiElement, string.Empty);

    Diesen Codeblock rufe ich nach dem Durchlaufen des oberen Codeblocks auf (damit ich den Text des Clipboards verwenden kann). Beide Ausdrucke werden auf denselben Drucker (hier: pdfCreator; es verhält sich jedoch auch mit anderen Druckern so) geschickt und die Ergebnisse unterscheiden sich wie in den Screenshots oben.

    Bin wirklich für jeden Hinweis dankbar.

    Gruß
    Jürgen

    Donnerstag, 6. Juni 2013 10:13
  • Hallo Jürgen,

    Wenn ich richtig verstand habe mit XPS ist alles ok aber druecken zu PDF oder Papier ist es mehr Italic. Es scheint eine Driver Issue zu sein und nicht mit Deiner Code. Kannst Du auch diese Beispiel ausprobieren um zu sehen ob dasselbe passiert http://support.microsoft.com/kb/812425?wa=wsignin1.0

    Gruss,

    Ionut

    Donnerstag, 6. Juni 2013 14:06
    Moderator
  • Hallo Ionut,

    ja, drucken auf den XPS-Drucker scheint der einzige Fall zu sein, in dem es funktioniert - aus der 'echten Anwendung'. Da es aber mit dem Minimalprogramm auf allen Druckern funktioniert, scheint mir die Vermutung, es handele sich (ausschließlich) um ein Druckertreiberproblem, nicht gerechtfertigt.

    Zu dem verwiesenen Beispiel hab ich noch zwei Fragen:

    1. Dabei geht es um das Drucken einer WinForms-RichTextBox. Ist - was immer dabei herauszufinden ist - anwendbar auf das WPF Control?

    2. Ich kann - in meinem Minimalprogramm - den Inhalt einer RTB drucken. Daher verstehe ich noch nicht, was aus einem Erfolg - oder Misserfolg - beim Nachvollziehen des Beispiels abzuleiten wäre. Kannst Du das bitte erklären.

    Danke
    Jürgen

    Nachtrag: Ich habe gerade festgestellt, dass das Minimalprogramm nicht mit derselben Framework-Version arbeitet ... der Fehler bleibt (natürlich): V3.5 funktioniert (Minimalprogramm), .Net4 funktioniert nicht

    Freitag, 7. Juni 2013 06:37