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;
}
我的问题: -
请帮忙。 谢谢。
答案 0 :(得分:0)
对于打印时字符串超出范围的字符串,请使用当前正在执行的Graphics.DrawString,但使用不同的参数。 Graphics.DrawString有一组不同的参数,可用于定义字符串必须适合的矩形的高度和宽度。如果你给它适当的宽度,当相同行上的最后一个单词不适合并开始换行时,该字符串将被“断开”。
像这样:
e.Graphics.DrawString(sPrint.ReadLine(),
richTextBoxResult.Font,
Brushes.Black,
new RectangleF(x, y, p.DefaultPageSettings.PrintableArea.Width, p.DefaultPageSettings.PrintableArea.Height));
备注上述代码,硬编码页面的限制可能不是一个好主意,但你明白了。
关于你的第二个问题,如果我理解正确:你想测量你的字符串不适合你的页面(垂直)?您可以使用Graphics.MeasureString。我一直在与同样的事情挣扎,我发现这是一个更高效的选择。