Darstellungsproblem PictureBox / PrintDialog

  • C#
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von MiniKahn.

    Darstellungsproblem PictureBox / PrintDialog

    Guten Abend,

    ich versuche mich kurz zu halten.

    Ich möchte eine "Quittung" erstellen. Und habe euch jetzt aus den verschiedenen Funktionen mal das Wichtigste zusammenkopiert:

    C#-Quellcode

    1. Bitmap bmpA6 = new Bitmap(583, 413);
    2. bmpA6.SetResolution(360,360); // Sonst unscharf?!?!?
    3. Graphics g = Graphics.FromImage(bmpA6);
    4. g.DrawImage(bmpA6, 0, 0);
    5. g.Clear(Color.White);
    6. // ...
    7. StringFormat stringFormat = new StringFormat();
    8. stringFormat.Alignment = StringAlignment.Center;
    9. stringFormat.LineAlignment = StringAlignment.Center;
    10. // ...
    11. e.Graphics.DrawString(
    12. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
    13. new Font("Verdana", 12, GraphicsUnit.Pixel),
    14. Brushes.Black,
    15. 425,
    16. 62,
    17. stringFormat);
    18. mainWindow.pictureBox2.Image = bmpA6;


    Nun sieht das ganze in Ausgedruckte Form super aus! Also es erfüllt absolut seinen Zweck und passt perfekt!
    Allerdings möchte ich dazu eine Vorschau machen.

    Die funktioniert ebenfalls perfekt!

    Mein Problem:
    PrintDialog Zoom = 100% - Die AAAAAAA sind über das "IN" geschrieben.


    Mit Zoomfaktor 500% passt aber alles perfekt! Und in Ausgedruckter Form ebenfalls!
    Es liegt also rein an der Vorschau bei einem Zoom von 100%!
    Habt ihr eine Idee wie ich das hinbekomme? Dass auch die Vorschau auf 100% (Ohne ein Riesen gezoomtes Bild anzuzeigen) funktioniert?

    Vergleichsbild: NUR Zoom geändert!!! Sonst nichts! Die AAAA passen perfekt in den Rahmen?!



    LG
    MiniKahn
    @MiniKahn Wie berechnest Du denn die Koordinaten der Printposition?
    Kannst Du das komplette bereinigte Projekt als ZIP anhängen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    im Anhang findet sich das Projekt.

    Habe nun ausschließlich einen Button sowie die Funktion zum Drucken und Anzeigen eingefügt.

    Nocheinmal zur Schilderung:

    Gedruckt wird exakt das was ich möchte. Sieht perfekt aus! (Sieht genau so aus, wie PrintPreviewDialog Zoom 500%!)
    In der normalen Ansicht bei 100% sieht das ganze allerdings verschoben aus. Sodass man im ersten Moment in der Vorschau meinen könnte, das ist totaler Bullshit!
    So sieht es ebenfalls mit der PictureBox aus. Dort wird es so angezeigt, wie im PrintPreviewDialog auf 100%. Alles etwas verschoben...

    Hoffe man kann das beides Irgendwie auf einen nenner bringen!

    Ich habe schon versucht die Picturebox zu Drucken, also, dass in der PictureBox vernünftig aussieht. Allerdings ist dann mein Druck total verschwommen und undeutlich. Die Schrift ist einfach verwaschen... Habe dafür ebenfalls keine Problemlösung gefunden!

    LG
    MiniKahn
    Dateien
    @MiniKahn Jou, ich habs gesehen.
    2 Anhaltspunkte:
    • Mach mal alle Operationen explizit mit derselben GraphicsUnit.
    • Stell mal fie FontSize auf den exakten Float-Wert ein, der im Designer aufgelistet ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die schnelle Antwort.

    Ich habe dir komplett geschickt was ich bisher gemacht habe.
    Leider weiß ich gerade nicht, wo ich denn noch GraphicsUnit.Pixel hinzufügen soll. Ich habe doch bei allen Strings welche ich Zeichnen lasse GraphicsUnit.Pixel stehen?
    Ich habe nun in der Funktion die Font immer auf GraphicsUnit.Pixel gesetzt. Auch wenn vorher die Font anders initialisiert werden würde, wird nun immer .Pixel als GraphicsUnit benutzt.. (falls du das meinst?)

    Auch weiß ich gerade nicht, wo du denn meinst, dass ich die FontSize auf dem im Designer aufgelisteten Wert setzen soll?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MiniKahn“ ()

    MiniKahn schrieb:

    FontSize auf dem im Designer aufgelisteten Wert setzen
    So was:

    Das System macht da unrunde Schritte. Erzeuge testweise einen Font und lies den Fontsize wieder aus. Nimm den ausgelesenen.
    Du malst Rechtecke, sieh mal, ob die auch eien Überladung mit GraphicsUnit haben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    ich habe nun folgendes versucht:
    • Alle Texte enthalten nun immer und standardmäßig GraphicsUnit.Pixel.
      • Andere GraphicsUnits habe ich ebenfalls getestet. Es kommt immer ein anderes Ergebnis.
    • Die "DrawString Font" habe ich nun so geändert, dass sie von der Größe her die selbe ist, wie die von "Form1" (Form1.DefaultFont.Size) - Übereinstimmend mit der im Designer angezeigten 8.25
      • Je kleiner die Font, desto weniger fällt das verschieben auf. Bei einer Größe von 12.0 ist es aber in den Unterschiedlichen ZoomStufen deutlich zu sehen....
    • Wenn ich eine Font erstelle mit Schriftgröße 12.0, dann ist die auch Schriftgröße 12.0
    • Die Rechtecke können nicht mit GraphicsUnit versehen werden. (Spielen auch eigentlich absolut keine Rolle. Es geht hier rein um den Text.