[gelöst] PrinterSettings



  • Ich erstelle eine Textdatei, die mit einem Buttonklick ausgedruckt werden kann.
    Hier der dafür verwendete Code:

    using System.Diagnostics;
    
            public void Drucken(string Datei)
            {
             // Dateinahme und Seitennummer unterdrücken?
             //
             // MessageBox.Show("Drucken / Datei   " + Datei);
                PrinterSettings ps = new PrinterSettings();
                ps.DefaultPageSettings.Landscape = false;
                var printProcess = new Process();
                printProcess.StartInfo.FileName = Datei;
                printProcess.StartInfo.UseShellExecute = true;
                printProcess.StartInfo.Verb = "print";
                printProcess.Start();
            }
    

    Ich möchte im Ausdruck die Angaben des Dateinamens (oben) und der Seitennummer (unten)
    unterdrücken bzw. im Text selbst platzieren.



  • berniebutt schrieb:

    Ich möchte im Ausdruck die Angaben des Dateinamens (oben) und der Seitennummer (unten)
    unterdrücken bzw. im Text selbst platzieren.

    Dann druck die Datei selbst aus und lass es nicht notepad.exe tun.



  • Danke!
    Habe folgende Lösung mit printDocument gefunden:

    private System.IO.StreamReader fileToPrint;
            private System.Drawing.Font    printFont;
    
            private void button1_Click(object sender, EventArgs e)
            {
                string path = Directory.GetCurrentDirectory() + "\\" + textBox1.Text;
                textBox2.Text = path;
                fileToPrint = new System.IO.StreamReader(path);
                printFont   = new System.Drawing.Font("Courier New", 10); 
                printDocument1.DocumentName = path;
                printDocument1.Print();
                fileToPrint.Close();
            }
    
            private void pd_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
            {
                float  yPos  = 0;
                int    count = 0;
                float  leftMargin = e.MarginBounds.Left;
                float  topMargin  = e.MarginBounds.Top;
                string line = null;
                float  linesPerPage = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
                while (count < linesPerPage)
                {
                    line = fileToPrint.ReadLine();
                    if (line == null) break;
                    yPos = topMargin + count * printFont.GetHeight(e.Graphics);
                    e.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
                    count++;
                }
                if (line != null) e.HasMorePages = true;
            }
    

    Läuft wie gewünscht.



  • Hallo,

    folgende Anmerkung:

    string path = Directory.GetCurrentDirectory() + "\\" + textBox1.Text;
    

    Verwende stattdessen besser:

    string path = Path.Combine(Directory.GetCurrentDirectory(), textBox1.Text);
    

    Damit spars du dir das unschöne String zusammen gehacke. Intern passiert da zwar vermutlich auch nix anderes, aber's sieht einfach schöner aus.


Anmelden zum Antworten