300分解决打印问题,急!!!(300分)

  • 主题发起人 主题发起人 wwwlaila
  • 开始时间 开始时间
W

wwwlaila

Unregistered / Unconfirmed
GUEST, unregistred user!
在打印报表时,如果字段很多超过一页纸的范围,应该如何解决?
某个字段的内容过长,需要换行,如何解决?
 
你可以看看一些报表的源码例如fastreport/ehlib等,你的问题比较复杂,
看看别人的源码比较好,而且详细
 
横印
如果还不行,用两行,VF里经常这么干。
 
不知道你用的是什么报表控件,qr里面好象没有什么好的办法可以解决这个问题。。
至少我不知道。。[:)],字段太多faster可以自动分两页来打,字段内容好象可以用
QRMEMO来显示,可以自动换行,,不知道我有没记错。。。[:)]
 
你可以使用TPrinter的对象实例Printer,进行操作
首先,要Uses单元使用Printers,因为TPrinter是一个不可见对象;
其次,就可以使用Printer的方法和属性了
PosHeight:=0;//变量需要声明PosHeight,PosWidth,LineNum,LineWidth,LineHeight
PosWidth0;
LineNum:=0;

Printer.begin
Doc;
Height:=Printer.PageHeight;
Width:=Printer.PageWidth;
LineHeight:=Height Div 30;
LineWidth:=Width Div 5;

Printer.Canvas.Font.Size:=14;
Printer.Canvas.TextOut(PosWidth,PosHeight,'Emp_Id');
Printer.Canvas.TextOut(PosWidth+LineWidth,PosHeight,'Emp_Name');

LineNum:=1;
PosHeight:=(PosHeight+LineHeight);

While Not PrtRs.EOFdo
//[red]PrtRs是我自己定义的一个RecordSet变量,用于返回数据集[/red]
begin

Printer.Canvas.Font.Size:=12;
Printer.Canvas.TextOut(PosWidth,PosHeight,PrtRs.Fields['Emp_Id'].Value);
Printer.Canvas.TextOut(PosWidth+LineWidth,PosHeight,PrtRs.Fields['Emp_Name'].Value);
PosHeight:=PosHeight+LineHeight;
LineNum:=LineNum+1;
If LineNum>30 then
//[blue]你在这里就可以控制分页了[/blue]
begin

Printer.NewPage;//这是分页的语法
PosHeight:=0;
PosWidth:=0;
LineNum:=0;
end;


PrtRs.MoveNext;
end;

Printer.EndDoc;
 
用两个或三个或四个报表,分组打印各个字段。
如果报表控件支持合并,那么把它们合并一起打更好。
 
第一个问题,我要先知道你想做成什么样,才能回答。
第二个问题,qr中不好解决,但这里有个小技巧:
QRLabel中想换行只需在其Caption中要换行的地方加个空格即可,
对于动态的字段办法就不多了。:(
 
[blue][/blue]其实很简单,
所有的打印字段过长,我觉得都可以用换行来解决.
QRDBText->Autostretch->True
->AutoSize->False
试试就知道了.可以给分了吧?
 
有8个数据库,最多的数据库有30个字段,如何解决?
 
特殊情况,做特殊处理了。
 
用printer打的时候自己做判断,是否超出边界,似乎没什么捷径,除非有什么倥件能
自己检测的。
 
还没解决!!!!!!!!!
 
请问:riota
  我也是这样设置,但我发现不是次次都行,
我有几个不同的报表,对QRDBTEXT进行同样的
设置,但有的报表可以自动换行,有的不行,
这是为什么??
 
to: dbo,
如果是中文字段,可能不换行,
E文的可以.
 
后退
顶部