Introduction
I have run across a need to print reports from my Sql Server 2000 database tables. In other words, print a report to show what is in your database table at a functional print level, no graphics, just database fields.
I ran across some great examples for printing objects, but didn't really find one for a specific field that holds text data, say 2000 characters max. So I wrote a quick program that splits out each word based on a string of text and a variable max number of characters per line.
I placed the split out lines into an System.Collections.ArrayList and then looped it in the printing routine.
I don't have a need per se to print reports with fancy graphics, just functional printouts with a printer friendly font so don't expect the greatest print routine, just an example to point you in the right direction.
Assumptions made:
Print Line Limit: 72 based on Courier New, 12 Pt font, HP Deskjet 3650 printer. The code allows you to change this :)
10/17/2003 code update - you'll have to copy the last if statement in the following code snippet to handle lines of text in SplitUpText that have a length < nMaxCount.
public ArrayList SplitUpText(string strText,int nMaxCount)
{
int nLength = 0;
int nWhereAt = 0;
ArrayList al =
new ArrayList();
char nChar;
char[] characters = strText.ToCharArray();
string strCurrentLine = "";
string strTrimmedText = "";
string strCurrentWord = "";
int nWordLength = 0;
nLength = characters.Length;
while (nWhereAt < nLength)
{
nChar = characters[nWhereAt];
if ((nChar == 32) || (nChar == '\r'))
{
strTrimmedText = strCurrentWord.Trim();
nWordLength = strTrimmedText.Length;
// add to string here
if ((strCurrentLine.Length + nWordLength + 1) > nMaxCount)
{
al.Add(strCurrentLine);
strCurrentLine = strTrimmedText + " ";
}
// if ((strCurrentLine.Length + nWordLength + 1) > nMaxCount)
else
{
strCurrentLine = strCurrentLine + strTrimmedText + " ";
}
// else (strCurrentLine.Length + nWordLength + 1) < nMaxCount
strCurrentWord = "";
}
// if ((nChar == 32) || (nChar == '\r'))
else
{
if ((nChar != 10) && (nChar != 13))
{
strCurrentWord = strCurrentWord + nChar;
}
// if ((nChar != 10) && (nChar != 13))
}
// else nChar != 32 && nChar == '\r'
nWhereAt++;
}
// while (nWhereAt < nLength)
if (strCurrentLine.Length > 0)
{
strTrimmedText = strCurrentLine.Trim();
al.Add(strTrimmedText);
}
// if (strCurrentLine.Length > 0)
if (strCurrentWord.Length > 0)
{
strTrimmedText = strCurrentWord.Trim();
al.Add(strTrimmedText);
}
// if (strCurrentWord.Length > 0)
return al;
}
// public ArrayList SplitUpText(string strText,int nMaxCount)