Thursday, April 28, 2005

Печать информации на принтер в .NET устроена очень просто, но вместе с тем мне непонятно почему не предусмотрен автоматический перенос длинных строк? :(
Если выводить на печать строку превышающую по ширине, ширину области печати, то непоместившаяся часть строки просто отсекается. Мучался долго и упорно, искал в сети, народ тоже сталкивался с этой проблемой. Путем поисков, модификаций и добавлений своего, получился обработчик для события OnPrint:

int CharsCount, LinesCount=0;
int leftMargin = e.MarginBounds.Left;
int topMargin = e.MarginBounds.Top;
Rectangle rectDraw = new Rectangle(leftMargin, topMargin,e.MarginBounds.Width, e.MarginBounds.Height);
SizeF sizeF = new SizeF(e.MarginBounds.Width,e.MarginBounds.Height-printFont.GetHeight());
StringFormat sf = new StringFormat();
sf.Trimming = StringTrimming.Word;
e.Graphics.MeasureString(TextToPrint, printFont, sizeF,sf, out CharsCount, out LinesCount);
string stringForPage = TextToPrint.Substring(0, CharsCount);
e.Graphics.DrawString(stringForPage, printFont, Brushes.Black,rectDraw,sf);
if (CharsCount < texttoprint =" TextToPrint.Substring(CharsCount);" hasmorepages="true;" hasmorepages="false;">

No comments: