用RaveReport作报表,怎样才能在程序内设置自定义的纸张的大小?用设计器已经设计了报表,只是要求根据记录的多少更改纸张的大小。

解决方案 »

  1.   

    这个是我用过的一个实例,我没有改过,稍理解一下!
               rquery1.close;
               rquery1.sql.Clear ;
               rquery1.sql.add('select * from vs_pos where (c_code='+quotedstr(master.fieldbyname('c_code').value)+')');
               rquery1.open;
               frReport1.LoadFromFile(posmainform.exepath + 'report\pos.frf');
              //小票设纸张长度************************************
    filename:=ExtractFilePath(paramstr(0))+'setup.ini';
    myinifile:=TInifile.Create(filename);
    frreport1.Pages.pages[0].pgHeight:=frreport1.Pages.pages[0].pgHeight+myinifile.readinteger('printsetup','height',0)*rquery2.RecordCount;
    myinifile.Destroy;
                   frReport1.ShowReport;
                   frPreview1.Clear;
                   frPreview1.Visible:=true;
                   frReport1.ShowReport;
                   frPreview1.Print;
      

  2.   

    最后我自己试出来了,与大家共享。代码如下:procedure TFrm_ReportPrint.AutoSuitablePageSize(RecordCount: Integer;
      PageHeight,PageWidth: Double; PageType,ReportName: string);
    var
      CurrPage: TRavePage;
      CurrRegion: TRaveRegion;
      TextTitle,TextXJ,TextXJSL,TextXJJE,TextHJ,TextHJSL,TextHJJE,TextSHR1,
      TextSHR2,TextYWY,TextBMJL,TextCW,TextXJJE2,TextHJJE2: TRaveText;
      DataXJSL,DataXJJE,DataHJSL,DataHJJE,DataXJJE2,DataHJJE2: TRaveCalcText;
      DataDYSJ :TRaveDataText;
      RegionTop,RegionHeight,Band1Height,DataBand1Height,TextXJBottom,TextHJBottom,
      TextSHR1Bottom,DataTextDYSJBottom,XJOffSet: Double;
    begin
      CurrPage := nil; CurrRegion := nil;
      with RvProject1.ProjMan do
      begin
        CurrPage := FindRaveComponent(ReportName+'.Page1',nil) as TRavePage;
        CurrRegion := FindRaveComponent('Region1',CurrPage) as TRaveRegion;
        TextTitle := FindRaveComponent('TextTitle',CurrPage) as TRaveText;
        TextTitle.Text := FTitleName;
        RegionTop := CurrRegion.Top * 25.4;
        //RegionHeight := CurrRegion.Height * 25.4;
        Band1Height := (FindRaveComponent('Band1',CurrPage) as TRaveBand).Height * 25.4;
        DataBand1Height := (FindRaveComponent('DataBand1',CurrPage) as TRaveDataBand).Height * 25.4;
        TextXJ := FindRaveComponent('TextXJ',CurrPage) as TRaveText;
        if TextXJ <> nil then begin
          TextXJBottom := (CurrPage.PageHeight-TextXJ.Top) * 25.4;
          XJOffset := (TextXJ.Top - CurrRegion.Height-CurrRegion.Top) * 25.4;
        end;
        TextXJSL := FindRaveComponent('TextXJSL',CurrPage) as TRaveText;
        TextXJJE := FindRaveComponent('TextXJJE',CurrPage) as TRaveText;
        TextXJJE2 := FindRaveComponent('TextXJJE2',CurrPage) as TRaveText;
        TextHJ := FindRaveComponent('TextHJ',CurrPage) as TRaveText;
        if TextHJ <> nil then TextHJBottom := (CurrPage.PageHeight-TextHJ.Top) * 25.4;
        TextHJSL := FindRaveComponent('TextHJSL',CurrPage) as TRaveText;
        TextHJJE := FindRaveComponent('TextHJJE',CurrPage) as TRaveText;
        TextHJJE2 := FindRaveComponent('TextHJJE2',CurrPage) as TRaveText;
        TextSHR1 := FindRaveComponent('TextSHR1',CurrPage) as TRaveText;
        if TextSHR1 <> nil then TextSHR1Bottom := (CurrPage.PageHeight-TextSHR1.Top) * 25.4;
        TextSHR2 := FindRaveComponent('TextSHR2',CurrPage) as TRaveText;
        TextYWY := FindRaveComponent('TextYWY',CurrPage) as TRaveText;
        TextBMJL := FindRaveComponent('TextBMJL',CurrPage) as TRaveText;
        TextCW := FindRaveComponent('TextCW',CurrPage) as TRaveText;
        DataXJSL := FindRaveComponent('CalcTextXJSL',CurrPage) as TRaveCalcText;
        DataXJJE := FindRaveComponent('CalcTextXJJE',CurrPage) as TRaveCalcText;
        DataXJJE2 := FindRaveComponent('CalcTextXJJE2',CurrPage) as TRaveCalcText;
        DataHJJE2 := FindRaveComponent('CalcTextHJJE2',CurrPage) as TRaveCalcText;
        DataHJSL := FindRaveComponent('CalcTextHJSL',CurrPage) as TRaveCalcText;
        DataHJJE := FindRaveComponent('CalcTextHJJE',CurrPage) as TRaveCalcText;
        DataDYSJ := FindRaveComponent('DataTextDYSJ',CurrPage) as TRaveDataText;
        if DataDYSJ <> nil then DataTextDYSJBottom := (CurrPage.PageHeight-DataDYSJ.Top) * 25.4;    if UpperCase(PageType)='CUSTOM' then
          CurrPage.PageHeight := (RegionTop+Band1Height+TextXJBottom+
            (RecordCount * DataBand1Height)+XJOffSet)/25.4
        else CurrPage.PageHeight := PageHeight/25.4;
        CurrPage.PageWidth := PageWidth/25.4;
        CurrRegion.Height := CurrPage.PageHeight - (RegionTop + XJOffSet + TextXJBottom)/25.4;
        //CurrRegion.Height := (Band1Height+RecordCount*DataBand1Height)/25.4;
        if TextXJ <> nil then TextXJ.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if TextXJSL <> nil then TextXJSL.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if TextXJJE <> nil then TextXJJE.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if TextXJJE2 <> nil then TextXJJE2.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if DataXJSL <> nil then DataXJSL.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if DataXJJE <> nil then DataXJJE.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if DataXJJE2 <> nil then DataXJJE2.Top := CurrPage.PageHeight - TextXJBottom/25.4;
        if TextHJ <> nil then TextHJ.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if TextHJSL <> nil then TextHJSL.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if TextHJJE <> nil then TextHJJE.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if TextHJJE2 <> nil then TextHJJE2.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if DataHJSL <> nil then DataHJSL.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if DataHJJE <> nil then DataHJJE.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if DataHJJE2 <> nil then DataHJJE2.Top := CurrPage.PageHeight - TextHJBottom/25.4;
        if TextSHR1 <> nil then TextSHR1.Top := CurrPage.PageHeight - TextSHR1Bottom/25.4;
        if TextSHR2 <> nil then TextSHR2.Top := CurrPage.PageHeight - TextSHR1Bottom/25.4;
        if TextYWY <> nil then TextYWY.Top := CurrPage.PageHeight - TextSHR1Bottom/25.4;
        if TextBMJL <> nil then TextBMJL.Top := CurrPage.PageHeight - TextSHR1Bottom/25.4;
        if TextCW <> nil then TextCW.Top := CurrPage.PageHeight - TextSHR1Bottom/25.4;
        if DataDYSJ <> nil then DataDYSJ.Top := CurrPage.PageHeight - DataTextDYSJBottom/25.4;
      end;
    end;