Guten Morgen zusammen,
ich klinke mich mal in dieses Thema ein, ich habe zwar ein etwas anderes Problem, aber ich denke, dass ich hier richtig bin. Falls nicht, bitte bescheidsagen, dass ich ein neues Thema eröffnen kann.
Zum Problem:
Ich lese aus einer Text-Datei zeilenweise Daten aus, welche dann auf Etiketten gedruckt werden sollen.
Über den Punkt, dass nicht mehr als eine Seite grdruckt wird, bin ich bereits hinaus, es werden tatsächlich alle Seiten gedruckt. Allerdings, und das ist das Problem, wird nach jeder Seite eine Leerzeile gedruckt, heißt, der Drucker schiebt am Ende jeder Zeile um eine Zeile vor.
Jetzt gibt es 2 Möglichkeiten:
Entweder stimmt etwas am Code nicht, oder an den Settings des Druckers (hierbei handelt es sich übrigens um einen Lexmark Form Printer 2500).
Ich poste mal meinen Code in der Hoffnung, dass vielleicht jemand einen Fehler findet.
Falls nicht, gibt es eine Möglcihkeit in Form eines Befehls, den Zeilenvorschub am Seitenende zu verhindern?
Ich habe den Code stark vereinfacht, damit weniger gelesen werden muss.
Imports System.Drawing.Printing
Public Class Form1
Dim abstand_x As Integer, abstand_y As Integer, seitenzahlen As Integer, _
seitenzahl As Integer = 1, zähler As Integer = 0
Dim arr As New List(Of String)
Private WithEvents doc As New PrintDocument()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
abstand_x = 838
abstand_y = 602
For a As Integer = 0 To 300
arr.Add(CStr(a))
Next
seitenzahlen = CInt(Math.Ceiling(arr.Count / 72))
End Sub
Private Sub Draw(ByVal g As Graphics, ByVal x As Integer, ByVal y As _
Integer)
Dim c As Color = Color.Black
Dim f As Font = New Font(schriftart, schriftgröße)
For i As Integer = zähler To arr.Count - 1
If (i + 1) Mod 6 = 0 Then
g.TextRenderingHint = _
Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
g.DrawString(arr(i), f, New SolidBrush(c), New Point(x, y))
x = 0 : y = CInt(y + abstand_y)
Else
g.TextRenderingHint = _
Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
g.DrawString(arr(i), f, New SolidBrush(c), New Point(x, y))
x = CInt(x + abstand_x)
End If
zähler += 1
If (zähler Mod 72) = 0 Then Exit For
Next
End Sub
Private Sub Drucker(ByVal sender As Object, ByVal e As PrintPageEventArgs) _
Handles doc.PrintPage
Dim g As Graphics = e.Graphics
g.PageUnit = GraphicsUnit.Pixel
g.TextRenderingHint = _
Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
Me.Draw(g, 0, 0)
e.HasMorePages = seitenzahl < seitenzahlen
seitenzahl += 1
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
doc.Print()
End Sub
End Class
[/VB] Folgende Daten einer Seite Etiketten: 12 Reihen a 6 Etiketten.
Ich hatte anfangs mit
g.PageUnit = GraphicsUnit.Millimeter gearbeitet, leider konnte ich da die Abstände zwischen den Etiketten nicht mit Komma-Stellen setzen.
Es wurde immer auf die nächste ganze Zahl gerundet.
Danke für die Hilfe!
Gruß Outi |