65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.38/5 (12投票s)

2003年10月16日

CPOL

2分钟阅读

viewsIcon

54239

downloadIcon

1122

将格式化文本打印到打印机。当您需要从数据库中的文本字段生成一个小的报告时,比如 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)

 

© . All rights reserved.