Hallo zusamen,
mit unten stehendem Code Drucke ich eine Liste mit Namen und zugehörigen Daten aus. Wenn das Limit von den eingestellten 35 Zeilen erreicht ist, wird auf Seite 2 gewechselt.
Mit meinen 40 Testeinträgen habe ich mir Haltepunkte gesetzt und mal alle werte Überprüft. Die benötigte Seitenzahl wird auf 2 berechnet. So soll es sein.
Allerdings wird beim Drucken (PDFCreator, FoxitReader PDFPrinter, PDF Architect etc.) am Ende immer eine Leere Seite erzeugt, obwohl nur 2 benötigt werden und auch nur 2 berechnet wurden.
Sieht jemand im Code den Fehler oder kann mir einen Tipp geben woran es liegen könnte?
Spoiler anzeigen
mit unten stehendem Code Drucke ich eine Liste mit Namen und zugehörigen Daten aus. Wenn das Limit von den eingestellten 35 Zeilen erreicht ist, wird auf Seite 2 gewechselt.
Mit meinen 40 Testeinträgen habe ich mir Haltepunkte gesetzt und mal alle werte Überprüft. Die benötigte Seitenzahl wird auf 2 berechnet. So soll es sein.
Allerdings wird beim Drucken (PDFCreator, FoxitReader PDFPrinter, PDF Architect etc.) am Ende immer eine Leere Seite erzeugt, obwohl nur 2 benötigt werden und auch nur 2 berechnet wurden.
Sieht jemand im Code den Fehler oder kann mir einen Tipp geben woran es liegen könnte?
VB.NET-Quellcode
- Imports System.Drawing.Printing
- Imports Statistik.Dts
- Public Class dlgDruckenVertrieblerStatistik
- Private seitenZaehler As Integer
- Private benoetigteSeitenzahl As Integer
- Private actLine As Integer
- Private zeilenProSeite As Integer = 35
- Private _font As New Font("Segoe UI", 10)
- Private _fontBold As New Font("Segoe UI", 10, FontStyle.Bold)
- Private _fontHead As New Font("Segoe UI", 12)
- Private _fontSmall As New Font("Segoe UI", 8)
- Private _Brush As Brush = Brushes.Black
- Private LineHeight As Single = Me._font.GetHeight
- Private Sub seitenzahlberechnen()
- Dim VertrieblerCount As Integer = VertriebmitarbeiterBindingSource.Count - 1
- benoetigteSeitenzahl = CInt(Math.Ceiling(VertrieblerCount / zeilenProSeite))
- If benoetigteSeitenzahl = 0 Then
- ppc.Rows = 1
- Else
- ppc.Rows = benoetigteSeitenzahl
- End If
- End Sub
- Private Sub PrintDocument1_BeginPrint(sender As Object, e As PrintEventArgs) Handles PrintDocument1.BeginPrint
- actLine = 0
- seitenZaehler = 1
- End Sub
- Public Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
- Dim g = e.Graphics
- Dim x As Single = e.MarginBounds.Left
- Dim y As Single = e.MarginBounds.Top
- PrintDocument1.DocumentName = "Test Dokument"
- Dim printedLines = 0
- For i = actLine To actLine + zeilenProSeite - 1
- If i >= VertriebmitarbeiterBindingSource.Count Then ' bei -1 fehlt die letzte zu druckende Zeile
- Exit For
- End If
- printedLines += 1
- Dim rwVertriebler = VertriebmitarbeiterBindingSource.At(Of VertriebmitarbeiterRow)(i)
- Dim rwPlanCount = rwVertriebler.GetPlanRows.Where(Function(f) f.Uploaddatum >= dtpDruckenVon.Value AndAlso f.Uploaddatum <= dtpDruckenBis.Value AndAlso f.erledigt = True AndAlso f.berechnen = True).Count
- g.DrawString(rwVertriebler.Name.ToString, _font, _Brush, x - 70, y + 40)
- g.DrawString(rwPlanCount.ToString, _font, _Brush, x + 200, y + 40)
- y += LineHeight + 10
- Next
- actLine += printedLines
- g.DrawString(String.Format("Seite {0} von {1}", seitenZaehler, benoetigteSeitenzahl), _fontSmall, _Brush, New Point(20, 1140))
- If seitenZaehler <= benoetigteSeitenzahl Then
- e.HasMorePages = True
- seitenZaehler += 1
- ElseIf actLine >= VertriebmitarbeiterBindingSource.Count - 1 Then
- e.HasMorePages = False
- End If
- End Sub
- Private Sub btnDrucken_Click(sender As Object, e As EventArgs) Handles btnDrucken.Click
- PrintDocument1.Print()
- End Sub
- Private Sub dlgDruckenVertrieblerStatistik_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- ppc.Document = PrintDocument1
- ppc.Zoom = 1.0
- For Each drucker As String In PrinterSettings.InstalledPrinters
- cboDrucker.Items.Add(drucker.ToString)
- Next
- cboDrucker.Text = PrintDocument1.PrinterSettings.PrinterName
- seitenzahlberechnen()
- 'ppc.InvalidatePreview()
- End Sub
- Private Sub dtpDrucken_CloseUp(sender As Object, e As EventArgs) Handles dtpDruckenVon.CloseUp, dtpDruckenBis.CloseUp
- ppc.InvalidatePreview()
- seitenzahlberechnen()
- End Sub
- Private Sub pnlDrucken_Paint(sender As Object, e As PaintEventArgs) Handles pnlDrucken.Paint
- e.Graphics.DrawLine(Pens.Black, pnlDrucken.Width - 1, 0, pnlDrucken.Width - 1, pnlDrucken.Height)
- End Sub
- Private Sub nudExemplare_ValueChanged(sender As Object, e As EventArgs) Handles nudExemplare.ValueChanged
- PrintDocument1.PrinterSettings.Copies = CShort(nudExemplare.Value)
- End Sub
- Private Sub cb_Drucken_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboDrucker.SelectedIndexChanged
- PrintDocument1.PrinterSettings.PrinterName = cboDrucker.SelectedItem.ToString
- ppc.Invalidate()
- End Sub
- End Class
Rechtschreibfehler betonen den künstlerischen Charakter des Autors.