Well you need to set e.HasMorePages to true until all pages are printed:
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
if (e.PageSettings.PrinterSettings.PrintRange
== PrintRange.SomePages)
{
this.firstPage= e.PageSettings.PrinterSettings.FromPage;
this.lastPage= e.PageSettings.PrinterSettings.ToPage;
// simulate non printed pages
while (printEngine.CurrentPageNumber < this.firstPage)
{
e.HasMorePages= printEngine.PrintPage(this.document,
printEngine,
e.Graphics,
e.MarginBounds,
true);
}
// print a page
e.HasMorePages= printEngine.PrintPage(this.document,
printEngine,
e.Graphics,
e.MarginBounds,
false);
// exit print cycle
if (printEngine.CurrentPageNumber > this.lastPage)
{
e.HasMorePages= false;
printEngine.Reset();
}
}
else
{
e.HasMorePages= printEngine.PrintPage(document,
printEngine,
e.Graphics,
e.MarginBounds,
false);
}
}
You can get the array of lines from a textbox and then try to fit the
lines to a page:
// break out lines that overflow
foreach (string line in arrayUnfittedLines)
{
if (g.MeasureString(line,font,Int32.MaxValue,stringFo rmat).Width
<= pageWidth)
{
arrayLines.Add(line);
}
else
// line does not fit on page
// need to break up line into word tokens
// and then place tokens into lines that fit in page margin
{
string[] arrayTokens= line.Split(space); // tokenize line
int index=0;
while (index < arrayTokens.Length)
{
StringBuilder buffer= new StringBuilder();
// at least one token on line, ? may be clipped
buffer.Append(arrayTokens[index]+space);
index++;
while(index< arrayTokens.Length &&
g.MeasureString(buffer.ToString()+arrayTokens[index],
font,
Int32.MaxValue,
stringFormat).Width <= pageWidth)
{
buffer.Append(arrayTokens[index]+space);
index++;
}
// end of tokens or end of line
arrayLines.Add(buffer.ToString());
}
}
Regards,
Jeff
*** Sent via Developersdex
http://www.developersdex.com ***