哪里有可以对中文字段进行正常折行处理的报表控件?

时间:2023-01-24 19:13:23
各位大虾:
    请你们推荐一种对中文比较适应的报表工具。我的程序报表中需要对一些较长的中文段进行折行处理,可是不管是QuickReport还是ReportBuilder、FastReport等等所谓的先进控件,都无法实现对中文的正常折行处理。特别是ReportBuilder4.XX版,花了我十几个小时下载(我的56K猫迈着0.1K/S的速度),谁知试用一下,还是有问题。我真想狠狠地踩它一脚。

    如果没有现成的控件,也请大家介绍一下如何用标准的报表控件实现。

6 个解决方案

#1


不如自己画吧,用djprint 下面是他的一段折行处理:
你如果需要我可以寄一份。
不过就是程序写起来可能麻烦一些,当然有失就有得,对打印机的控制会更自如。
procedure Thxpreviewform.ExtPrint(x,y:integer;Text:string);//x,y单位:0.1毫米
var
    i,ij,LineNum,iTemp,HanziNum:integer;
    szTemp:string;
begin
    itemp:=0;
    if not wordWrap then PrintText(x,y,Text)
    else
    begin
        if maxlength=0 then begin printText(x,Y,text);exit;end;
        i:=0;LineNum:=0;ij:=1;
        HanziNum:=0;
        repeat
            i:=i+1;
            szTemp:=copy(text,ij,i-ij+1);
            itemp:=itemp+strLength(text[i]);
            if text[i]>#127 then HanziNum:=HanziNum+1
            else HanziNum:=0;
            if ((iTemp+(i-ij)*WordSpace)>maxLength) or (i=length(Text)) then
            begin
                if i=length(text) then
                begin
                    szTemp:=copy(text,ij,i-ij+1);i:=i+1;
                end
                else
                   if odd(HanziNum) then
                        begin szTemp:=copy(text,ij,i-ij-1);i:=i-2;end
                    else
                        begin szTemp:=Copy(Text,ij,i-ij);i:=i-1;end;
                ij:=i;i:=i-1;LineNum:=LineNum+1;
                if LineNum>1 then y:=Y+LineSpace+strHeight(szTemp);
                printText(x,y,szTemp);
                itemp:=0;HanziNum:=0;
            end;
        until i>=length(Text);
    end;
end;

#2


不妨在前面的问题中找一下,有一个推荐ehlib152控件的贴子.我觉得这个控件相当好用,
可以在打印时实现对中文的正常折行处理,
可惜忘了下载的站点,也来不及帮你查了

#3


还有,
在http://www.nease.net/~bozhi里下载一个EReport控件(有源码),
也可以实现对中文的正常折行处理

#4


sky_horse:

我下载了你推荐的EReport控件,并试验了它的DEMO。可惜我在运行DEMO时,我按下打印报表(一),出现以下错误:


EReadError With message '属性不存在'。

EConvertError with message 'No argument for format '%s''
No argument for format '%s'

没有预览画面,倒是在TEMP目录下生成了几个TMP文件,用它的专用编辑器可以打开看到报表的内容。
可惜,一个不错的控件,太多的BUG。
所以,请原谅不能给分。

#5


'属性不存在'的原因:
1.可能是delphi版本的问题,你是用的d5吗? 我也在为d5下用Ereport头痛呢!
2.我以前是在d3下用,记得也曾出现过'属性不存在'的问题,后来好像是把工作目录
定为程序所在的目录才用好的,你出的问题也可能是demo去找不到放着TEP文件的
TEMP目录.

要不然到http://www.nccsoft.com/delphi/vcl_lst/grids1.htm去下载俄ehlib1.52
罢,d3-d5都能用,这可是i/o共用的控件哟! 

#6


Very easy!!!
1、设置autosize=false后将DBEDIT控件拉到折行宽度;
2、autostretch=true即可

#1


不如自己画吧,用djprint 下面是他的一段折行处理:
你如果需要我可以寄一份。
不过就是程序写起来可能麻烦一些,当然有失就有得,对打印机的控制会更自如。
procedure Thxpreviewform.ExtPrint(x,y:integer;Text:string);//x,y单位:0.1毫米
var
    i,ij,LineNum,iTemp,HanziNum:integer;
    szTemp:string;
begin
    itemp:=0;
    if not wordWrap then PrintText(x,y,Text)
    else
    begin
        if maxlength=0 then begin printText(x,Y,text);exit;end;
        i:=0;LineNum:=0;ij:=1;
        HanziNum:=0;
        repeat
            i:=i+1;
            szTemp:=copy(text,ij,i-ij+1);
            itemp:=itemp+strLength(text[i]);
            if text[i]>#127 then HanziNum:=HanziNum+1
            else HanziNum:=0;
            if ((iTemp+(i-ij)*WordSpace)>maxLength) or (i=length(Text)) then
            begin
                if i=length(text) then
                begin
                    szTemp:=copy(text,ij,i-ij+1);i:=i+1;
                end
                else
                   if odd(HanziNum) then
                        begin szTemp:=copy(text,ij,i-ij-1);i:=i-2;end
                    else
                        begin szTemp:=Copy(Text,ij,i-ij);i:=i-1;end;
                ij:=i;i:=i-1;LineNum:=LineNum+1;
                if LineNum>1 then y:=Y+LineSpace+strHeight(szTemp);
                printText(x,y,szTemp);
                itemp:=0;HanziNum:=0;
            end;
        until i>=length(Text);
    end;
end;

#2


不妨在前面的问题中找一下,有一个推荐ehlib152控件的贴子.我觉得这个控件相当好用,
可以在打印时实现对中文的正常折行处理,
可惜忘了下载的站点,也来不及帮你查了

#3


还有,
在http://www.nease.net/~bozhi里下载一个EReport控件(有源码),
也可以实现对中文的正常折行处理

#4


sky_horse:

我下载了你推荐的EReport控件,并试验了它的DEMO。可惜我在运行DEMO时,我按下打印报表(一),出现以下错误:


EReadError With message '属性不存在'。

EConvertError with message 'No argument for format '%s''
No argument for format '%s'

没有预览画面,倒是在TEMP目录下生成了几个TMP文件,用它的专用编辑器可以打开看到报表的内容。
可惜,一个不错的控件,太多的BUG。
所以,请原谅不能给分。

#5


'属性不存在'的原因:
1.可能是delphi版本的问题,你是用的d5吗? 我也在为d5下用Ereport头痛呢!
2.我以前是在d3下用,记得也曾出现过'属性不存在'的问题,后来好像是把工作目录
定为程序所在的目录才用好的,你出的问题也可能是demo去找不到放着TEP文件的
TEMP目录.

要不然到http://www.nccsoft.com/delphi/vcl_lst/grids1.htm去下载俄ehlib1.52
罢,d3-d5都能用,这可是i/o共用的控件哟! 

#6


Very easy!!!
1、设置autosize=false后将DBEDIT控件拉到折行宽度;
2、autostretch=true即可