将格式化文本打印到打印机






2.38/5 (12投票s)
将格式化文本打印到打印机。当您需要从数据库中的文本字段生成一个小的报告时,比如 2000 个字符...您如何打印它?
引言
我需要从我的 Sql Server 2000 数据库表中打印报表。换句话说,打印一个报告,以显示您的数据库表中的内容,并且在一个功能级别上打印,没有图形,只有数据库字段。
我找到了一些用于打印对象的很好的示例,但没有真正找到一个用于保存文本数据的特定字段(比如最多 2000 个字符)的示例。所以我编写了一个快速程序,根据一段文本和一个变量的最大字符数来拆分每个单词。
我将拆分的行放入 System.Collections.ArrayList 中,然后在打印例程中循环它。
我本身不需要打印带有花哨图形的报表,只需要带有打印机友好字体的功能性打印输出,所以不要期望最好的打印例程,只是一个指导您朝着正确方向前进的示例。
所做假设
打印行限制:72 基于 Courier New,12 Pt 字体,HP Deskjet 3650 打印机。 代码允许您更改此设置:)
2003 年 10 月 17 日代码更新 - 您必须复制以下代码片段中的最后一个 if 语句来处理 SplitUpText 中长度 < nMaxCount 的文本行。
publicArrayList SplitUpText(字符串strText,intnMaxCount)
{
intnLength = 0;
intnWhereAt = 0;
ArrayList al =newArrayList();
charnChar;
char[] characters = strText.ToCharArray();
stringstrCurrentLine = "";
stringstrTrimmedText = "";
stringstrCurrentWord = "";
intnWordLength = 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)
returnal;
} // public ArrayList SplitUpText(string strText,int nMaxCount)