mehrseitiger Textausdruck

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von tobiminka.

    mehrseitiger Textausdruck

    Hallo,

    ich stelle gerade unsere unter VB6.0 geschriebenen Programme um auf VB2015.
    Dabei hänge ich seit Tagen beim Rechnunsgdruck fest.

    Unter VB6.0 habe ich mir die Daten für die Rechnungen(Adresse, Rechnungspositionen, Texte etc) aus der Datenbank geholt und dann ausgedruckt,
    war eine Seite voll, ging es mit Printer.NewPage auf die nächste.

    Dies will mir nun nicht gelingen.

    Frage: wie kann ich wahlfrei Texte auf der Seite ausdrucken?

    Verschoben. ~Thunderbolt

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

    Ich habe mir den Beitrag angesehen und meine 1. Seite ausgedruckt.
    Mein Problem ist, dass ich nicht weiß, wieviel Seiten ich ausdrucken muss und dies auch nicht während der Laufzeit festellen kann. Ich kann nur feststellen,
    ob meine Zeilenzahl größer als ein bestimmter Wert wird. Dann muss die aktuelle Seite beendet und eine neue Seite aufgerufen werden. Leider passiert genau dies nicht
    Ich verstehe einfach nicht, was ich auslösen muss, damit die nächste Seite bedruckt wird, so landet alles auf einer.


    Mein einfacher Quellcode:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. PrintDocument.Print()
    3. End Sub
    4. Private Sub PrintDocument_PrintPage(ByVal sender As System.Object,
    5. ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
    6. Dim Schrift As String = "Arial"
    7. Dim Schriftgröße As Integer
    8. Dim Abstand As Integer = 30
    9. Dim Spalte As Integer
    10. Dim Zeile As Integer = 220
    11. Dim g = e.Graphics
    12. Dim x As Integer
    13. Dim Seite As Integer = 1
    14. For x = 1 To 50
    15. Text = "Seite " & Seite.ToString & " Zeile: " & Zeile.ToString & " links"
    16. Schriftgröße = 10
    17. Spalte = 40
    18. g.DrawString(String.Format(Text, Me.Seite + 1), New Font(Schrift, Schriftgröße), Brushes.Black, New Point(Spalte, Zeile))
    19. Text = "Mitte"
    20. Schriftgröße = 12
    21. Spalte = 350
    22. g.DrawString(String.Format(Text, Me.Seite + 1), New Font(Schrift, Schriftgröße), Brushes.Black, New Point(Spalte, Zeile))
    23. Text = "rechts"
    24. Schriftgröße = 14
    25. Spalte = 700
    26. g.DrawString(String.Format(Text, Me.Seite + 1), New Font(Schrift, Schriftgröße), Brushes.Black, New Point(Spalte, Zeile))
    27. Zeile = Zeile + Abstand
    28. 'hier kommt nun die Abfrage , ob die gewünschte Zeilenzahl pro Seite erreicht ist, und dann sollte nächste Seite aufgerufen werden
    29. If Zeile > 800 Then
    30. Seite = Seite + 1
    31. Zeile = 220
    32. End If
    33. Next
    34. End Sub


    Codetag eingefügt. ~Thunderbolt

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

    tobiminka schrieb:

    was ich auslösen muss
    Für jede gedruckte Seite wird die Prozedur PrintPage genau ein Mal aufgerufen :!:
    Du brauchst einen Zähler, der die Position in Deinem Text darstellt, der muss in der Klasse liegen.
    Du brauchst einen Zähler, der die aktuelle Seitennummer hält, der muss ebenfalls in der Klasse liegen.
    Du brauchst einen Zähler, der die Position auf Deiner Seite beschreibt, der liegt in der Prozedur PrintPage.
    Wenn Du am Ende der Seite bist und noch nicht fertig bist, musst Du

    Thunderbolt schrieb:

    e.HasMorePages auf true setzen
    , Dir in der Klasse die nächste zu druckende Zeile merken und die Prozedur verlassen.
    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!