Drucken / Picturebox / Ausdruck = Unterschiedliche Ergebnisse

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Drucken / Picturebox / Ausdruck = Unterschiedliche Ergebnisse

    Hallo,
    Versuche mich gerade am "Drucken" eines Beleges ... wollte eigentlich mit Report Designer, aber da dies nicht ganz so gut klappt wg. Kopf- & Fußzeile, möchte ich die Ausgaben selbst per Code schreiben.

    Nun bin ich auf ein Problem gestoßen, wo ich nicht weiß, wie ich ansetzen soll/muss... und bitte euch um Erklärung, warum das so ist.

    Je nach dem wie ich die Ausgabe mache, erhalte ich entweder ein klares Schriftbild oder stark verpixelt.

    So mein Versuch (Verpixelt):

    VB.NET-Quellcode

    1. ​Private Sub Drucken_Drawing(ByVal _void As Integer) ', e As Printing.PrintPageEventArgs)
    2. Try
    3. A4 = New Bitmap(2480, 3508) ' = DIN A4 bei 300dpi ' (CInt((210 / mmpi * dpi)), CInt((297 / mmpi * dpi)))
    4. ' Drawing aktivieren ******************************************************************
    5. Dim g As Graphics = Graphics.FromImage(A4)
    6. 'Dim g As Graphics = e.Graphics
    7. ' Rechtsbündig ausrichten *************************************************************
    8. Dim sf As New StringFormat()
    9. sf.Alignment = StringAlignment.Far
    10. ' Anzahl der Seiten berechnen *********************************************************
    11. 'Dim AnzahlSeiten As Integer
    12. 'AnzahlSeiten = ((Arr_Positionen.Count - 1) / LineSeite)
    13. ' Anzahl der Datensätze / Zeilen berechnen ********************************************
    14. 'Dim AnzahlDatensaetze As Integer
    15. 'AnzahlDatensaetze = (Arr_Positionen.Count - 1)
    16. g.DrawString("Jahresübersicht", FA14b, C01, RL, 50)
    17. g.DrawString("nach Jahr, Rechnung, Artikel - Umsatz u. Provision", FA10n, C01, RL, 70)
    18. g.DrawString("Abrechnungszeitraum: 01.01.2024" & " bis 31.12.20204", FN10b, C01, RL, 110)
    19. PictureBox1.Image = A4
    20. Catch ex As Exception
    21. MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace, "FEHLER Vorgangsverarbeitung", MessageBoxButtons.OK, MessageBoxIcon.Error)
    22. End Try
    23. End Sub
    24. Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    25. Dim gr As Graphics = e.Graphics
    26. ' Rechteck für den Ausdruck festlegen
    27. ' Position + Originalgröße
    28. Dim p As New Point(0, 0)
    29. Dim r As New Rectangle(0, 0, A4.Width, A4.Height)
    30. ' Bild drucken im angegebenen Rechteck drucken
    31. gr.DrawImage(A4, r)
    32. gr.Dispose()
    33. End Sub


    und so bekomme ich ein klares Schriftbld:

    VB.NET-Quellcode

    1. Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    2. Try
    3. ' Drawing aktivieren ******************************************************************
    4. Dim g As Graphics = e.Graphics
    5. ' Rechtsbündig ausrichten *************************************************************
    6. Dim sf As New StringFormat()
    7. sf.Alignment = StringAlignment.Far
    8. ' Anzahl der Seiten berechnen *********************************************************
    9. 'Dim AnzahlSeiten As Integer
    10. 'AnzahlSeiten = ((Arr_Positionen.Count - 1) / LineSeite)
    11. ' Anzahl der Datensätze / Zeilen berechnen ********************************************
    12. 'Dim AnzahlDatensaetze As Integer
    13. 'AnzahlDatensaetze = (Arr_Positionen.Count - 1)
    14. g.DrawString("Jahresübersicht", FA14b, C01, RL, 50)
    15. g.DrawString("nach Jahr, Rechnung, Artikel - Umsatz u. Provision", FA10n, C01, RL, 70)
    16. g.DrawString("Abrechnungszeitraum: 01.01.2024" & " bis 31.12.20204", FN10b, C01, RL, 110)
    17. Catch ex As Exception
    18. MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace, "FEHLER Vorgangsverarbeitung", MessageBoxButtons.OK, MessageBoxIcon.Error)
    19. End Try
    20. End Sub



    Das Ziel ist, dass ich so einen Beleg drucken kann aber auch in einer Picturebox anzeigen lassen kann... So der Gedanke...

    Aber ich verstehe nicht warum das so verpixelt ist.

    Wenn mir das einer erklären könnte, wäre ich echt dankbar !

    Viele Grüß M
    Bilder
    • Verpixelt.JPG

      19,26 kB, 662×157, 22 mal angesehen
    • UNverpiselt und klar.JPG

      11,21 kB, 391×105, 22 mal angesehen
    @michl75 Wenn Du Text druckst, drucke ihn als Text, wie in Deinem zweiten Beispiel.
    Wenn Du Text erst in eine Bitmap schreibst und dann die Bitmap druckst, wird durch die Skalierung der Bitmap dasd Druckbild nur schlechter.
    Gugst Du Drucken mehrseitiger Dokumente
    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!
    OK verstehe, was mir aber noch nicht einleuchtet ist, warum diese Skalierung noch stattfindet, wenn ich doch wie im ersten Beispiel das bmp afu die gleiche Größe "gestellt" habe...

    VB.NET-Quellcode

    1. A4 = New Bitmap(2480, 3508) ' = DIN A4 bei 300dpi ' (CInt((210 / mmpi * dpi)), CInt((297 / mmpi * dpi)))


    Wir da dann trotzdem eine Skalierung gemacht?

    nur damit ich es verstehe, warum wird da noch was skaliert? Oder ist am Ende die tatsächliche Grö0e von der Picturebox das Problem, weil ja von 2480x3508 auf die tatsächlich Größe der Picturebox skaliert wird und dann wieder "groß gezogen" wird?


    Danke für den Link, den hatte ich heute auch schon gesucht... wußte noch das es eine Anleitung gibt für das Drucken :) Danke.....


    EDIT:

    Gibt den eine Möglichkeit, dass man ein PrintPreview direkt in einer Form "einbetten" kann? Also das kein extra Fenster geöffnet wird? (Salopp gesagt nur...)
    Erledigt dafür gibt ja sogar ein Control... was man alles findet :)

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

    @michl75 Erstell mal ein Testprojekt, das Deinen Effekt reproduziert.
    Stell sicher, das es sofort läuft.
    Bereinige es und hänge es als ZIP an.
    Der SolutionExplorer vom @ErfinderDesRades ist dafür allerbestens geeignet.
    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!