c#打印问题

本文关键字:问题 打印 | 更新日期: 2023-09-27 18:15:27

    private void printReceipt()
    {
        printDialog.Document = printDocument;
        DialogResult result = printDialog.ShowDialog();
        if (result != DialogResult.OK) return;
        try
        {
            sPrint = new StreamReader(
                     new MemoryStream(
                         Encoding.ASCII.GetBytes(richTextBoxResult.Text)));
            printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
            printDocument.Print();
        }
        catch (Exception e)
        {
            MessageBox.Show("Failed to print 'n" + e.Message);
        }
        finally
        {
            if (sPrint != null)
                sPrint.Close();
        }
    }
    void printDocument_PrintPage(object sender, PrintPageEventArgs e)
    {
        // No of lines that fit on to the page
        float linesPerPage = e.MarginBounds.Height / richTextBoxResult.Font.GetHeight(e.Graphics);
        float fontHeight = richTextBoxResult.Font.GetHeight(e.Graphics);
        for (int count = 0; count < linesPerPage && !sPrint.EndOfStream; count++)
        {
            e.Graphics.DrawString(sPrint.ReadLine(),
                richTextBoxResult.Font,
                Brushes.Black,
                e.MarginBounds.Left,
                e.MarginBounds.Top + (count * fontHeight),
                new StringFormat());
        }
        e.HasMorePages = !sPrint.EndOfStream;          
    }

我的问题:-

  1. 我需要适合所有的文本框内容正确,当我打印。(长单行没有打印,而是跳到页面外)
  2. 是否有可能在打印菜单下启用打印范围选项?(在输出GUI,让我们说我有文本内容,可以适合一个以上的页面)

请帮助。谢谢你。

c#打印问题

至于你的字符串在打印时越界,使用图形。DrawString和你现在做的一样,但是有不同的参数。图形。DrawString有一组不同的参数,可以让你定义一个你的字符串必须适合的矩形的高度和宽度。如果你设置了合适的宽度,当同一行的最后一个单词不合适并开始换行时,字符串将被' break off'。

:

e.Graphics.DrawString(sPrint.ReadLine(),
            richTextBoxResult.Font,
            Brushes.Black,
            new RectangleF(x, y, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));

注意上面的代码,硬编码页面的限制可能不是一个好主意,但是你明白了。

至于你的第二个问题,如果我理解正确的话:你想测量在哪个点你的字符串将不适合你的页面(垂直)?你可以使用图形。对应的MeasureString。我一直在为同样的事情而挣扎,我发现这是一个性能更好的选择。