fastreport 设置横竖打印的问题,设置为横向,打印确竖向的。急急急急急急急急。。。。。。

jobslew2603765 2008-11-24 03:48:25
fastreport 3.0 设置横竖打印的问题。
我在设计报表的时候,纸张的方向是设置为:poPortrait

然后我在生成报表的时候,我用代码控制纸张的方向,
FX:='';
if trim((FStream.ReadString('Print','P','')))='1' then
begin // ShowMessage('竖向打印');
page1.Orientation:=poPortrait;
FX:='1'; // 记录方向

end else if trim(FStream.ReadString('Print','P',''))='2' then
begin
// ShowMessage('横向打印');
page1.Orientation:=poLandscape;
FX:='2'; // 记录方向
end;

预览的时候是正常的,竖向,预览的结果就是竖向的,横向,预览就是横向的。
但是打印出来的时候,就不是这样,竖向的成为横向,横向的变为竖向

我也郁闷了,我用quickreport的时候,就没有这样的情况,难道在设计的时候就应该区分横向和竖向吗?
请教了
...全文
3471 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xj211 2011-02-18
  • 打赏
  • 举报
回复
不要设置纸张大小试试
去掉这两行
Page1.Paperwidth
Page1.PaperHeight
llh6795 2008-11-27
  • 打赏
  • 举报
回复
路过
寻梦928 2008-11-26
  • 打赏
  • 举报
回复
关注中。。。
jobslew2603765 2008-11-26
  • 打赏
  • 举报
回复
TO 10 楼
你看到我的代码了吗,我的代码好像没有重复把,?
重复了会出现问题的。
火龙岛主 2008-11-26
  • 打赏
  • 举报
回复
page1是对象,表示变量的名字,并不是对象的名字。
你实例化的时候需要这样page1.name := 'page1';只要不重复就可以。
jobslew2603765 2008-11-26
  • 打赏
  • 举报
回复
to 15楼的兄弟,
晕倒了,你看了我贴出来的代码吗?
我是LoadFromFile了 报表,然后设置纸张,才是设置打印的方向啊,?
if ( Trim(strpage)='') and (Trim(strpage1)='') then
begin //如果自定义,系统的都没有定义纸张,就会出错。
ShowMessage('请设置报表的纸张的大小!!!');
exit;
end
else if ( Trim(strpage) <>'') or (Trim(strpage1) <>'') then
begin
//纸张的方向。
if Trim(strstyle)='1' then
begin

MyDataModule.frxReport1.LoadFromFile(WPath + IntToStr(36) + '.fr3');

end else if Trim(strstyle)='2' then
begin
MyDataModule.frxReport1.LoadFromFile(WPath + IntToStr(355) + '.fr3');
end;


end;

page1:= MyDataModule.frxreport1.findobject('page1')as TfrxReportpage ;
memo1:= MyDataModule.frxreport1.findobject('memo1') as TfrxMemoView ;
memo49:= MyDataModule.frxreport1.findobject('memo49') as TfrxMemoView ;

with page1 do
begin
//读取的纸张的大小,保存在ini文件中。

if strpage='A4' THEN page1.PaperSize:=DMPAPER_A4
else if strpage='Letter' THEN PaperSize:=DMPAPER_Letter
else if strpage='LetterSmall' THEN PaperSize:=DMPAPER_LetterSmall
else if strpage='Tabloid' THEN PaperSize:=DMPAPER_Tabloid
else if strpage='Ledger' THEN PaperSize:=DMPAPER_Ledger
else if strpage='Legal' THEN PaperSize:=DMPAPER_Legal
else if strpage='Statement' THEN PaperSize:=DMPAPER_Statement
else if strpage='Executive' THEN PaperSize:=DMPAPER_Executive
else if strpage='A3' THEN PaperSize:=DMPAPER_A3
else if strpage='A4Small' THEN PaperSize:=DMPAPER_A4Small
else if strpage='A5' THEN PaperSize:=DMPAPER_A5
else if strpage='B4' THEN PaperSize:=DMPAPER_B4
else if strpage='B5' THEN PaperSize:=DMPAPER_B5
else if strpage='Folio' THEN PaperSize:=DMPAPER_Folio
else if strpage='Quarto' THEN PaperSize:=DMPAPER_Quarto
else if strpage='qr10X14' THEN PaperSize:=DMPAPER_10X14
else if strpage='qr11X17' THEN PaperSize:=DMPAPER_11X17
else if strpage='Note' THEN PaperSize:=DMPAPER_Note
else if strpage='Env9' THEN PaperSize:=DMPAPER_ENV_9
else if strpage='Env10' THEN PaperSize:=DMPAPER_Env_10
else if strpage='Env11' THEN PaperSize:=DMPAPER_Env_11
else if strpage='Env12' THEN PaperSize:=DMPAPER_Env_12
else if strpage='Env14' THEN PaperSize:=DMPAPER_Env_14
else if strpage='CSheet' THEN PaperSize:=DMPAPER_CSheet
else if strpage='DSheet' THEN PaperSize:=DMPAPER_DSheet
else if strpage='ESheet' THEN PaperSize:=DMPAPER_ESheet
else
begin
filename1:=ExtractFilePath(paramstr(0))+'\data\setting.ini';
FStream1 := TIniFile.Create(filename1);
try
//我这里有必要横竖互换吗
Page1.Paperwidth:=strtoint(trim(FStream1.ReadString('UserPaper','Width','')));
Page1.PaperHeight:=strtoint(trim((FStream1.ReadString('UserPaper','length',''))));
finally
FStream1.Free;
end;
end;
end;
//纸张的方向。

FX:='';
if trim((FStream.ReadString('Print','P','')))='1' then
begin // ShowMessage('竖向打印');
page1.Orientation:=poPortrait;

FX:='1'; // 记录方向

end else if trim(FStream.ReadString('Print','P',''))='2' then
begin
// ShowMessage('横向打印');
page1.Orientation:=poLandscape;
FX:='2'; // 记录方向
end;
火龙岛主 2008-11-26
  • 打赏
  • 举报
回复
兄弟,都跟你说了:
page1是对象,表示变量的名字,并不是对象的名字。
你没看啊。

=============

还有,你应该先LoadFromFile,然后再设置报表的打印方向吧,否则,
你先设置打印方向了,然后在LoadFromFile不就等于没设?
jobslew2603765 2008-11-26
  • 打赏
  • 举报
回复
to 13楼

不好意思,我实验了,实验了n次, 都是反。
ajiwuweibin 2008-11-26
  • 打赏
  • 举报
回复
不是跟你说了答案吗?
你连试都没有就在这边瞎叫?
jobslew2603765 2008-11-25
  • 打赏
  • 举报
回复
to 2楼

呵呵,你这问题没事,你设置时候需要竖向就选横向,反之依然。
其实这个问题,可能是打印机设置问题吧,你查看打印机属性

假如这样的话,那我还用在程序里面控制码,我就是要在程序里面可以设置,就可以了。不用那么麻烦
jobslew2603765 2008-11-25
  • 打赏
  • 举报
回复
procedure setfrxreport_zy(sid,lx:string);
var
id_temp,s,strtile:String;
FStream,FStream1: TIniFile;
filename,filename1:string;
strrow:string;
memo1,memo2,memo3,memo4,memo5,memo6,memo7,memo8,memo9,memo10,memo49,memo50,memo51:TfrxMemoView ;
memo11,memo12,memo13,memo14,memo15,memo16,memo17,memo18,memo19,memo20:TfrxMemoView ;
memo21,memo22,memo23,memo24,memo25,memo26,memo27,memo28,memo29,memo30,memo31,memo32:tfrxMemoView ;
memo33,memo34,memo35,memo36,memo37,memo38,memo39,memo41,memo40,memo42,memo43,memo44,memo45,memo46,memo47:TfrxMemoView ;

page1:TfrxReportpage ;
reporttitle1:tfrxreporttitle ;
//masterdata1:tfrxmasterdata;
//footer1:tfrxfooter;
//header1:tfrxheader;
/////////////////////////

str,sqlStr,sqlStr1,headerstr:string;
i,n:integer;
header_array:array[0..20,0..1] of String; //顶部打印顺序数组
buttom_array:array[0..3,0..1] of String; //检验项目打印顺序数组
sqljingjian,sqlupdate:string;
WPath:string;
qry1,qry2,qry3:TADOQUERY;
frxDBDataset1jianyan_mincheng:TfrxMemoView ;
frxDBDataset1jianyan_changyongzhi:TfrxMemoView ;
frxDBDataset1jianyan_cankaozhi:TfrxMemoView ;
frxDBDataset1jingjian_mincheng:TfrxMemoView ;
frxDBDataset1jingjian_zhi:TfrxMemoView ;
reporttile1:TfrxReportTitle ;
idstr:string;
bottommargin,leftmargin,rightmargin,topmargin:real;
strpage,strpage1:string;
introw:integer;
paperwidth,PAPERHEIGTH:Extended ;
strstyle:string;
FX:STRING;// 记录方向
label outer;

begin

id:=Trim(sid) ;

if id<>''then
begin

MyDataModule.frxReport1.Clear ;
try
filename:=ExtractFilePath(paramstr(0))+'\data\setting.ini';
FStream := TIniFile.Create(filename);
//左右格式1.上下格式--2
strstyle:=trim((FStream.ReadString('Style','Style','')));
strpage:=trim((FStream.ReadString('Paper','PaperName','')));
strpage1:=trim((FStream.ReadString('UserPaper','PaperName','')));


if ( Trim(strpage)='') and (Trim(strpage1)='') then
begin //如果自定义,系统的都没有定义纸张,就会出错。
ShowMessage('请设置报表的纸张的大小!!!');
exit;
end
else if ( Trim(strpage)<>'') or (Trim(strpage1)<>'') then
begin
//纸张的方向。
if Trim(strstyle)='1' then
begin
//35 原来的,//36对35上面做了修改,可以横竖,自定义的纸张。
//351 是对纸张做横向打印的。//35是按照b5的大小设计的。
//34是按照A4的大小设计的。
MyDataModule.frxReport1.LoadFromFile(WPath + IntToStr(36) + '.fr3');

end else if Trim(strstyle)='2' then
begin
MyDataModule.frxReport1.LoadFromFile(WPath + IntToStr(355) + '.fr3');
end
else if Trim(strstyle)='' then
begin
ShowMessage('请设置报表的格式!!!');
exit;
end;


end;

page1:= MyDataModule.frxreport1.findobject('page1')as TfrxReportpage ;
memo1:= MyDataModule.frxreport1.findobject('memo1') as TfrxMemoView ;
memo49:= MyDataModule.frxreport1.findobject('memo49') as TfrxMemoView ;

with page1 do
begin
//读取的纸张的大小,保存在ini文件中。

if strpage='A4' THEN page1.PaperSize:=DMPAPER_A4
else if strpage='Letter' THEN PaperSize:=DMPAPER_Letter
else if strpage='LetterSmall' THEN PaperSize:=DMPAPER_LetterSmall
else if strpage='Tabloid' THEN PaperSize:=DMPAPER_Tabloid
else if strpage='Ledger' THEN PaperSize:=DMPAPER_Ledger
else if strpage='Legal' THEN PaperSize:=DMPAPER_Legal
else if strpage='Statement' THEN PaperSize:=DMPAPER_Statement
else if strpage='Executive' THEN PaperSize:=DMPAPER_Executive
else if strpage='A3' THEN PaperSize:=DMPAPER_A3
else if strpage='A4Small' THEN PaperSize:=DMPAPER_A4Small
else if strpage='A5' THEN PaperSize:=DMPAPER_A5
else if strpage='B4' THEN PaperSize:=DMPAPER_B4
else if strpage='B5' THEN PaperSize:=DMPAPER_B5
else if strpage='Folio' THEN PaperSize:=DMPAPER_Folio
else if strpage='Quarto' THEN PaperSize:=DMPAPER_Quarto
else if strpage='qr10X14' THEN PaperSize:=DMPAPER_10X14
else if strpage='qr11X17' THEN PaperSize:=DMPAPER_11X17
else if strpage='Note' THEN PaperSize:=DMPAPER_Note
else if strpage='Env9' THEN PaperSize:=DMPAPER_ENV_9
else if strpage='Env10' THEN PaperSize:=DMPAPER_Env_10
else if strpage='Env11' THEN PaperSize:=DMPAPER_Env_11
else if strpage='Env12' THEN PaperSize:=DMPAPER_Env_12
else if strpage='Env14' THEN PaperSize:=DMPAPER_Env_14
else if strpage='CSheet' THEN PaperSize:=DMPAPER_CSheet
else if strpage='DSheet' THEN PaperSize:=DMPAPER_DSheet
else if strpage='ESheet' THEN PaperSize:=DMPAPER_ESheet
else
begin
filename1:=ExtractFilePath(paramstr(0))+'\data\setting.ini';
FStream1 := TIniFile.Create(filename1);
try
//我这里有必要横竖互换吗
Page1.Paperwidth:=strtoint(trim(FStream1.ReadString('UserPaper','Width','')));
Page1.PaperHeight:=strtoint(trim((FStream1.ReadString('UserPaper','length',''))));
finally
FStream1.Free;
end;
end;
end;
//纸张的方向。

FX:='';
if trim((FStream.ReadString('Print','P','')))='1' then
begin // ShowMessage('竖向打印');
page1.Orientation:=poPortrait;
FX:='1'; // 记录方向

end else if trim(FStream.ReadString('Print','P',''))='2' then
begin
// ShowMessage('横向打印');
page1.Orientation:=poLandscape; FX:='2'; // 记录方向
end;
jobslew2603765 2008-11-25
  • 打赏
  • 举报
回复
to 8楼
如果想完全由程序控制打印方向的话,你的还要控制打印机才行。

能否给个代码,我觉得用控件,老是受控制
火龙岛主 2008-11-25
  • 打赏
  • 举报
回复
你的page1是动态生成的吗?
如果是的话,为他取个名字。
fs动态生成的组件要有名字,否则他不会正常工作。
Blakhawk 2008-11-25
  • 打赏
  • 举报
回复
如果想完全由程序控制打印方向的话,你的还要控制打印机才行。
ajiwuweibin 2008-11-25
  • 打赏
  • 举报
回复
不需要这么麻烦啊
只要把纸张Orientation设置成poLandscape就OK了
yeah920 2008-11-25
  • 打赏
  • 举报
回复
没搞过,帮忙顶起来
panrongzeng 2008-11-25
  • 打赏
  • 举报
回复
呵呵,你这问题没事,你设置时候需要竖向就选横向,反之依然。
其实这个问题,可能是打印机设置问题吧,你查看打印机属性
ZKM_ZHANG 2008-11-25
  • 打赏
  • 举报
回复
接分

2,506

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧