0

このドキュメントを印刷しようとしていますが、空白のページしか表示されません。Password.txt ファイルが空ではないことを確認したので、空白ページが出力される理由がわかりません。これはC#コーディングです

private void button6_Click(object sender, EventArgs e)
{
    StreamReader Printfile = new StreamReader("c:\\testDir1\\Password.txt);
    try
    {
        PrintDocument docToPrint = new PrintDocument();
        docToPrint.DocumentName = "Password";
        printDialog1.AllowSomePages = true;
        printDialog1.ShowHelp = true;
        printDialog1.Document = docToPrint;
        DialogResult result = printDialog1.ShowDialog();
        printPreviewDialog1.Document = docToPrint;
        printPreviewDialog1.ShowDialog();
        Printfile.Close();
        if (result == DialogResult.OK)
        {
            docToPrint.Print();
            MessageBox.Show("Printing file");
        }
    }
    catch (System.Exception f)
    {
        MessageBox.Show(f.Message);
    }
    finally
    {
        Printfile.Close();
    }
}
4

1 に答える 1

2

PritnDocument は、印刷が必要なページごとに PrintPage イベントを発生させます。そのイベントにフックして、ページを「描画」できます。あなたの場合、テキスト ファイルのすべての行に文字列を描画します。

Font printFont = new Font("Arial", 10);
StreamReader Printfile;

private void button6_Click(object sender, EventArgs e)
{
    using(StreamReader Printfile = new StreamReader("c:\\testDir1\\Password.txt")) //file path 
    {
        try
        {
            PrintDocument docToPrint = new PrintDocument();
            docToPrint.DocumentName = "Password"; //Name that appears in the printer queue
            docToPrint.PrintPage += (s, ev) =>
            {
                float linesPerPage = 0;
                float yPos = 0;
                int count = 0;
                float leftMargin = ev.MarginBounds.Left;
                float topMargin = ev.MarginBounds.Top;
                string line = null;

                // Calculate the number of lines per page.
                linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics);

                // Print each line of the file. 
                while (count < linesPerPage && ((line = Printfile.ReadLine()) != null))
                {
                    yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
                    ev.Graphics.DrawString(line, printFont, Brushes.Black,  leftMargin, yPos, new StringFormat());
                    count++;
                }

                // If more lines exist, print another page. 
                if (line != null)
                    ev.HasMorePages = true;
                else
                    ev.HasMorePages = false;
            };
            docToPrint.Print();
        }
        catch (System.Exception f)
        {
            MessageBox.Show(f.Message);
        }
    }
}
于 2013-08-17T09:43:16.397 に答える