Printing RichTextBox

Ich mache eine einfache WinForms-App und wollte dem Benutzer erlauben, den Text aus RichTextBox zu drucken.

Ich folgteMSDN link dann .. Und es funktioniert für einen echten Drucker (mit echt meine ich, dass ich einen anfassen kann :))

Aber was ist, wenn ich eine Art PDF-Drucker verwenden möchte? Dann muss ich sagen, dass es funktioniert, wennnur eine Seite wird gedruckt. Jede nächste Seite wird gedrucktauf der gleichen, ersten Seite, was bedeutet, dass der Text überdruckt wird. Dies ist offensichtlich, aber was kann ich tun, um PDF Printer zum Erstellen einer neuen Seite zu zwingen?

Dies ist mein Code:

private PrintDocument docToPrint; 
private string stringToPrint;

public mainForm()
        {
            InitializeComponent();
            CenterToScreen();
            this.docToPrint = new PrintDocument();
            (...)
        }

private void tsBtnPrint_Click(object sender, EventArgs e)
        {
            PrintDialog myPrintDialog = new PrintDialog();
            myPrintDialog.AllowCurrentPage = true;
            myPrintDialog.AllowSelection = true;
            myPrintDialog.AllowSomePages = true;
            myPrintDialog.Document = docToPrint;
            if(myPrintDialog.ShowDialog()==DialogResult.OK)
            {
                StringReader reader = new StringReader(this.richTextBox.Text);
                stringToPrint = reader.ReadToEnd();
                this.docToPrint.PrintPage += new PrintPageEventHandler(this.docToPrintCustom);
                this.docToPrint.Print();
            }
        }

 private void docToPrintCustom(object sender, PrintPageEventArgs e)
        {
            Font PrintFont = this.richTextBox.Font;
            SolidBrush PrintBrush = new SolidBrush(Color.Black); 

            int LinesPerPage = 0;
            int charactersOnPage = 0;

            e.Graphics.MeasureString(stringToPrint, PrintFont, e.MarginBounds.Size, StringFormat.GenericTypographic,
                out charactersOnPage, out LinesPerPage);

            e.Graphics.DrawString(stringToPrint, PrintFont, PrintBrush, e.MarginBounds, StringFormat.GenericTypographic);

            stringToPrint = stringToPrint.Substring(charactersOnPage);

            MessageBox.Show(stringToPrint.Length.ToString());
            e.HasMorePages = (stringToPrint.Length > 0);

            PrintBrush.Dispose();
        }

Was muss ich tun, um jede weitere Seite ordnungsgemäß zu drucken?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage