Mehrere Seiten Drucken

Hallo zusammen,

ich versuche nun schon seit geraumer Zeit, eine Druck- Funktion für mein Programm zu erstellen.

Die Daten, die ich drucken möchte, sind in einer Tabelle gespeichert.
Ich möchte nun jeden Datensatz auf eine Frische Seite drucken. Nur weiß ich nicht, wie ich dem Programm klar mache, dass ich nun einen neue Seite haben möchte.
Ich programmiere mit Visual Basic 2005 und finde einfach keine Eigenschaft oder Methode für dieses Problem.

Mir ist auch wichtig, dass eine Seitenansicht möglich ist.

Vielen Dank für eure Mithilfe!

Weiß vielleicht jemand, ob es eine Funktion gibt, die mir die Datei druckt, wenn ich ihr den entsprechenden Pfad übergebe?

Über Anregungen und Tipps würde ich mich freuen.

Hallo!

Ich möchte nun jeden Datensatz auf eine Frische Seite drucken.

Such mal in der Online-Hilfe nach „HasMorePages“. Da findet sich dann unter anderem ein Artikel „Gewusst wie: Drucken einer mehrseitigen Textdatei in Windows Forms“.

Jan

Hallo Walter!

Hast du dir auch schon einmal den System.Drawing.Printing Namespace angeschaut?

mfg
christoph

Dankschön für die Antwort. Ich habe den Tipp berücksichtigt und mir den Artikel durchgelesen. Allerdings bin ich der Meinung, dass ich ihn vor einiger Zeit schon einmal gelesen habe. Den Seitenumbruch bekomme ich ja hin, wenn der Text über die Seite hinaus geht. Ich möchte aber für jeden Datensatz eine extra Seite anfangen und das bekomme ich nicht hin.

Ob das nun Fließtext ist oder nur einzelne Datensätze, spielt keine Rolle. Wichtig ist, dass Du weißt, ob noch eine Seite folgt.
Angenommen Du hast 10 Datensätze in einem Array und die sollen auf 10 Seiten gedruckt werden. Dann druckst Du in printDocument1_PrintPage() (um bei den Bezeichnern aus dem MSDN-Beispiel zu bleiben) eben einen Datensatz und setzt danach e.HasMorePages auf true, außer wenn der 10. Datensatz gedruckt wurde, dann eben auf false.

Simpelstbeispiel, bei dem die Buchstaben A,B und C für 3 Datensätze stehen:

namespace WindowsApplication1
{
 public partial class Form1 : Form
 {
 private PrintDocument printDocument1 = new PrintDocument();

 private String str = "ABC";
 private int curPage;

 public Form1()
 {
 InitializeComponent();
 printDocument1.PrintPage +=
 new PrintPageEventHandler(printDocument1\_PrintPage);
 }


 private void printDocument1\_PrintPage(object sender, PrintPageEventArgs e)
 {
 e.Graphics.DrawString(str.Substring(curPage,1), this.Font, 
 Brushes.Black, new PointF(150.0F, 150.0F));
 ++curPage;
 e.HasMorePages = (curPage 
HTH
Jan


> <small>[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]</small>

Nun lichtet sich das Bild langsam. Ich verstehe nur nachstehenden Code nicht. Wo muss ich das denn hinschreiben und was bedeutet er?

public Form1()
{
InitializeComponent();
printDocument1.PrintPage +=
new
PrintPageEventHandler(printDocument1_PrintPage);
}

Mein Code für die Seitenansicht sieht wie folgt aus. Wenn da mal jemand mal trüber schauen könnte, wäre nett.

Public Class Main
Dim MyDoc As New PrintDocument
Private idx As Integer

Private Sub SeitenansichtToolStripMenuItem_Click()
Ordnen()
idx = 0
AddHandler MyDoc.PrintPage, AddressOf MyDoc_PrintPage
Dim dlgSettings As New PrintPreviewDialog
dlgSettings.Document = MyDoc
Dim Result As DialogResult = dlgSettings.ShowDialog()
If Result = Windows.Forms.DialogResult.OK Then
MyDoc.Print()
End If
End Sub

Private Sub MyDoc_PrintPage()
On Error Resume Next
Dim ueberz As String()
Dim Zeilen As Integer
Dim Abstand_top As Integer
ueberz = ueber.ToString.Split("")
e.HasMorePages = True
Abstand_top = 60
Static intCurrentChar As Int32
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
With MyDoc.DefaultPageSettings
intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
marginLeft = .Margins.Left ’ X-Koordinate
marginTop = .Margins.Top ’ Y-Koordinate
End With
If MyDoc.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If
Dim intLineCount As Int32 = CInt(intPrintAreaHeight / Font.Height)
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop + Abstand_top, intPrintAreaWidth, intPrintAreaHeight - Abstand_top)
Dim fmt As New StringFormat(StringFormatFlags.LineLimit)

Dim intLinesFilled, intCharsFitted As Int32
Dim new_font_ueber As Font = New Font(„Verdana“, 14, FontStyle.Bold)
Dim Uebera As StringFormat = New StringFormat()
Uebera.Alignment = StringAlignment.Center
Uebera.LineAlignment = StringAlignment.Center
Dim Ueberschrift As String = Tabelle.Rows(ueberz(idx)).Item(2).ToString
e.Graphics.DrawString(Ueberschrift, new_font_ueber, Brushes.Black, Me.PrintPreviewDialog.Width, e.PageSettings.Margins.Top + idx * e.PageSettings.PaperSize.Height, :Uebera)
e.Graphics.DrawLine(Pens.BlanchedAlmond, e.PageSettings.Margins.Left, e.PageSettings.Margins.Top + 15, Me.PrintPreviewDialog.Width * 2 - e.PageSettings.Margins.Right, e.PageSettings.Margins.Top + 15)

Dim Datu As StringFormat = New StringFormat()
Dim new_font_datu As Font = New Font(„Verdana“, 10)
Datu.Alignment = StringAlignment.Center
Datu.LineAlignment = StringAlignment.Center
Dim Datur As String
If Tabelle.Rows(ueberz(idx)).Item(1).ToString „“ And Tabelle.Rows(ueberz(idx)).Item(6).ToString „“ Then
Datur = Tabelle.Rows(ueberz(idx)).Item(1).ToString & " - " & Tabelle.Rows(ueberz(idx)).Item(6).ToString
Else
Datur = Tabelle.Rows(ueberz(idx)).Item(1).ToString & Tabelle.Rows(ueberz(idx)).Item(6).ToString
End If
e.Graphics.DrawString(Datur, new_font_datu, Brushes.Black, Me.PrintPreviewDialog.Width, e.PageSettings.Margins.Top + 40, Datu)

Dim Text As String
Dim rtf As New RichTextBox
rtf.Rtf = Tabelle.Rows(ueberz(idx)).Item(5).ToString
Text = rtf.Text 'Kommentar

e.Graphics.MeasureString(Mid(Text, intCurrentChar + 1), new_font_datu, New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, intCharsFitted, intLinesFilled)
e.Graphics.DrawString(Mid(Text, intCurrentChar + 1), new_font_datu, Brushes.Black, rectPrintingArea, fmt)
intCurrentChar += intCharsFitted
If intCurrentChar

Hallo!

Nun lichtet sich das Bild langsam. Ich verstehe nur
nachstehenden Code nicht. Wo muss ich das denn hinschreiben
und was bedeutet er?

Stimmt. Das sollte für Basic sein. Das hatte ich erfolgreich verdrängt.

printDocument1.PrintPage +=
new
PrintPageEventHandler(printDocument1_PrintPage);

Da wird wohl bei Basic das Pferd andersrum aufgezäumt. Bei dem Artikel in der Onlinehilfe fehlt da aber wohl irgendwas. Von Basic habe ich keinen Schimmer.

Jan

Hast du dir auch schon einmal den
System.Drawing.Printing Namespace angeschaut?

Ja, ich habe mir die ganzen Eigenschaften und Methoden angeschaut, doch ich habe das Richtige für mich nicht gefunden. Ich sitze immer noch am selben Problem.

Es wäre nett, wenn du mir helfen könntest.