早上好。我必须打印一些长的字符串,这些字符串落在页面的空白处。我无法自动拆分为多行字符串。
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
...
string line ="Condimentum a a ac aenean parturient risus suscipit et orci scelerisque convallis porttitor enim venenatis viverra.Egestas nibh natoque mus etiam a parturient feugiat hendrerit a sagittis viverra dui ante varius lectus arcu."
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
ev.Graphics.DrawString(line, printFont, Brushes.Black, new RectangleF(leftMargin, yPos, 400.0f, 200.0f));
...
}
如您所见,我尝试将重载与边界框规格一起使用,但结果是页面上出现了字符阻塞,因为长字符串中的行被打印在其自身上。
是否有解决此问题的快速方法?
谢谢
已解决我终于解决了我的问题。解释起来不是那么容易,所以我在这里发布了一段代码,显示了我的所作所为:
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
float printAreaHeight = ev.MarginBounds.Height;
float printAreaWidth = ev.MarginBounds.Width;
string line = null;
float yPos = topMargin;
int charactersFitted = 0;
int linesFilled = 0;
SizeF theSize = new SizeF();
Font printFont = new Font("Arial", 12, FontStyle.Regular);
SizeF layoutSize = new SizeF(printAreaWidth, printAreaHeight);
// Calculate the number of lines per page.
linesPerPage = printAreaHeight / printFont.GetHeight(ev.Graphics);
// Print each line of the array.
while (count < linesPerPage && lineIdx < linesArray.Count())
{
line = linesArray[lineIdx++];
theSize = ev.Graphics.MeasureString(line, printFont, layoutSize, new StringFormat(), out charactersFitted, out linesFilled);
ev.Graphics.DrawString(line, printFont, Brushes.Black, new RectangleF(50.0F, yPos, theSize.Width, theSize.Height));
yPos += (1 + linesFilled) * printFont.GetHeight(ev.Graphics);
count += linesFilled + 1;
}
// If more lines exist, print another page.
if (count > linesPerPage)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}