有打印大量文本的好办法吗?(100分)

  • 主题发起人 主题发起人 少爷的拐杖
  • 开始时间 开始时间

少爷的拐杖

Unregistered / Unconfirmed
GUEST, unregistred user!
现在有很多类似合同、协议的文档需要打印,因为内容都相差不大,只有个别地方不同。
所以打算只在数据库中用几个字段存储不同的地方,需要打印的时候取出内容来打印。
我现在的方法是这样:
数据库中二进制字段里存储了一个word文档,其中用特殊的符号标记了N个的地方。
需要打印时,1取出数据,2从数据库取出文档,存成临时文件,
3调用word打开文档,查找替换特殊符号,4打印。5退出word
但是打印速度实在不敢恭维。
有没有比较合适的方法或者报表控件能解决这个问题?
 
什么时候请我打球丫?
 
你回来再说。没事帮我把问题解决了。别光占着位子不说话噻。
 
1.打开Word
2.从数据库取出文档,存成临时文件
3。装载临时文档,查找替换特殊符号
4。打印,close文档
5。继续2。
3。中的查找替换特殊符号,不清楚是什么意思
我写过一个类似的,转化大量的Excel报表,不过是向File打印机(端口:File)
生成PrintFile(120张/分钟), 发送到Unix服务器(网点下载到终端打印)。
如果需要,可以给你原码。


 
3估计是使用FIND/REPLACE方法 替换特殊字符 比如,文件中有“:签发人”等我们一般不用这个方法,而用BOOKMARK,不过效率不会太高。
如果格式相对固定,那好办,如果经常要改就麻烦了,你用了WORD,估计RTF格式就不能满足要求,否则,推荐用TRICHEDIT(网上有很多增强版本)
你也可以在TQUICKREPORT(其它报表控件也可),中安排好固定格式(爆麻烦),特殊部位放上QRLABEL,空好位置,到时候往里放东西就成。
起WORD必定慢,没办法的。
 
我用的方法基本如CJ所说。不过放qrlabel的方法不太可行,要替换的文本长度不定,
不好安排位置
那么,有什么地方可以下载增强richedit?好多地方都上不去了么。
 
to sunrace2000:
方便的话,能否说说您的思路?
是往excel里导入数据吗?
 
有很多rptxxxx.xxxx.xxxxxx.xls 文档,x可能是日期,中文的银行机构名称,数值的
报表编码,需要把每个xls转化为Printfile。生成的printFile要某规则命名。
即: rptxxxx.xxxxxxxx.xxx.xls -----> rpt20020725.100650.0032
我的方法就如上面说的,不对文档进行修改(可能在程序中也可以,不过我不需要)
 
你看!人家CJ大侠都赞同我的观点,用TQUICKREPORT~~我跟你说能搞定的~下次我回去帮你弄~~
 
我有个想法,如果可行我会吧思路和代码写在这贴后面。谢谢大家。
 
最终我采取了这种办法,对付一页以内的还可以。
没什么别的好处,就是可以很好的控制行距.
....
Str:='??受用户委托,经分公司供方会研究决定,将<工程名称>工程委托给你方施工,请在....';//很长的字符串
Str:=StringReplace(Str,'<管理员>', Edit2.Text , [rfReplaceAll]);
Str:=StringReplace(Str,'<工程名称>', Lb_Name.Caption , [rfReplaceAll]);
Str:=StringReplace(Str,'<天数>', Edit1.Text , [rfReplaceAll]);//替换文本
QRep_Project_Consignment:= TQRep_Project_Consignment.Create(Self);
QRep_Project_Consignment.QRLabel10.Caption:=FormatDateTime('DDDDDD',DateTimePicker1.DateTime);
QRep_Project_Consignment.QRLabel2.Caption:=Combobox1.Text+'施工队';//某些特殊格式文本
//生成正文
for i:=1 to 5do
begin
QRLabel:=TQRLabel.Create(Self);
QRLabel.Parent:=QRep_Project_Consignment.TitleBand1;
QRLabel.Visible:=True;
QRLabel.Left:=32;
QRLabel.Top:=148+(i-1)*44;
QRLabel.Font:=Label8.Font;
QRLabel.Caption:=Copy(Str,(i-1)*32,32);
end;
try
QRep_Project_Consignment.Print;
finally
QRep_Project_Consignment.Free;
end;
 
后退
顶部