ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。
谢谢。 ReportBuilder
或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。

解决方案 »

  1.   

    ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。
    谢谢。 ReportBuilder
    或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。
      

  2.   

    在DELPH 里搞的 ReportBuilder 控件。
    ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。
    谢谢。 ReportBuilder
    或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。
      

  3.   

    没有玩过这个玩意 .....我在网上看了下  你去这里http://wenku.baidu.com/view/84b0103231126edb6f1a10bd.html看看  看对你有帮助没有!
      

  4.   

    现在是高度 RBuilder 解决了。但是有个问题。就是打印的时候。每打一张会停两秒才打印下一张。这个怎么处理。谢谢
      

  5.   

    技术原理 
              通过在TppReport的BeforePrint事件中对TPrinterDevice的PageSetting属性和PageList属性进行赋值 
    为何要如此处理? 
    根据分析ReportBuilder,我们得到如下的调用顺序TppViewer   ->   TppProducer   ->   TppPrinterDevice   ->   TppPageRequest   ->   TppPublisher,其中   TppPageRequest   封装了打印页范围信息,而TppPrinterDevice   负责将指定的页发送到PrinterCanvas 实现步骤 
        1、在调用单元声明一个类私有变量,用于保存打印页范围 
        type 
            ... 
        private 
            sPageRange:   string; 
            ... 
        end; 
        2、在调用单元声明一个类私有过程,用于处理TppReport.BeforePrint事件 
    procedure   TfrmMain.ppReportBeforePrint(Sender:   TObject); 
    begin 
        if   Sender   is   TppReport   then 
            if   (Sender   as   TppReport).PrinterDevice   <>   nil   then 
            begin 
                (Sender   as   TppReport).PrinterDevice.PageSetting   :=   psPageList; 
                ppTextToPageList(sPageRange,   (Sender   as   TppReport).PrinterDevice.PageList,   True); 
            end; 
    end; 
        3、在打印之前设置打印页范围,将TppReport.BeforePrint引导到自定义过程 
        sPageRange   :=   '3-5 '; 
        (ppViewer1.Report   as   TppReport).BeforePrint   :=   ppReportBeforePrint; 
        (ppViewer1.Report   as   TppReport).ShowPrintDialog   :=   False; 
        ppViewer1.Print; 注意事项 
        1,如果找不到TppReport类别,在接口引用单元添加ppReport单元 
        2,如果找不到psPageList类别,在接口引用单元添加ppTypes单元 
        3,如果找不到ppTextToPageList函数,在接口引用单元添加ppUtils单元 
        4,sPageRange可以定义三种类型的页范围 
              A:起止页: '3-10 '//连接线分隔 
              B:分隔页: '3,5,7 '//逗号分隔 
              C:单独页: '7 '
      

  6.   

    对   于   每   一   个WINDOWS   应   用   程   序开   发   者   来   说,   打   印   功   能   的   实   现   都   是   极   为   棘   手   的,   因   为   要   涉及到   相   当   多   的   代   码   而   且   常   常   是   相   当   的   复   杂,   但   是   在DELPHI   中   实   现   文   本   和   图   象   的   打   印   功   能   却   是   非   常   容   易   的。                 1、   文   本   的   打   印   功   能。DELPHI   中   文   本   的   打   印   功   能   就   如   同   在DOS   中   实   现   文   本   的   打   印   功   能   一样 
    容   易,   需   要   做   的   一   切   只   是   取   得   打   印   参   数,   打   开   打   印   机,然   后   发   送   文   本   的   每   一   行   内   容。   在DELPHI   中   提 
    供   了   一   个PRINTERS   程   序   单   元,   它   说   明   了   一   个TPRINTER   对   象,   封   装   了WINDOWS   打   印   工作   和   输   出   打   印 
    机   之   间   的   接   口,   并   提   供   常   用   的   属   性   和   方   法,其   中   画   布CANVAS   是   一   个   非   常   有   用   的   属   性,   它   代   表   了   当 
    前   打印   文   件   的   表   面,   是   以   图   形   方   式   来   工   作   的,   整   个   的   打   印   输   出工   作   仅   仅   是   将   你   打   印   的   内   容   输   出 
    到TPRINTER   的   属   性CANVAS   上,当   全   部   的   输   出   工   作   完   成   以   后,   打   印   对   象(TPRINTER)   把CANVAS   的   属   性 
    值   送   到   打   印   机   上   去。 
                  下   面   举   例   来   说   明   如   何   通   过DELPHI   实   现   文   本   内   容   的   打   印。   在DELPHI   中   提   供 
    了PRINTDIALOG、PRINTERSETUPDIALOG   两   个   控   件   允   许   我   们   进   行   打   印   机   以   及   其   他   影   响   打   印   输   出   的选 
    择,   此   外   最   重   要   的   一   点   是   要   想   实   现   打   印   功   能   必   须   在   编译   程   序   以   前   将PRINTERS   加   入   到INTERFACE   或 
    者IMPLEMENTATION   的UESE   语   句   当   中,   因   为PRINTER   单   元   包   括ASSIGNPRN   和   其   他   控   制   打   印   机的   过   程。 
                  首   先   在FORM   当   中   加   入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG   和   两   个BUTTON   控   件,   两   个 
    BUTTON   的CAPTION   分   别   为“   打   印   设   置”   和“   打   印”。   然   后   编   写BUTTON   的   事   件   驱   动   程   序(   代   码   在   下 
    面),这   个   简   单   的   例   子   中   只   要   单   击“   打   印”   按   钮   时   便   可   以   在   打   印机   上   输   出   文   件0S2.TXT,   打   印   事   件   的 
    清   单   如   下: 
    implementation 
    uses   printers; 
    {$R   *.DFM} 
    procedure   TForm1.BitBtn1Click(Sender:   TObject); 
    begin 
    printersetupdialog1.execute;     //选择输出的打印机以及其他打印控制选项 
    end; 
    procedure   TForm1.BitBtn2Click(Sender:   TObject); 
    var 
    lines:integer; 
    prntext:system.text; 
    //将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件 
    begin 
          if   printdialog1.execute   then 
          assignprn(prntext);   //将PRNTEST分配给打印机 
          rewrite(prntext);   //调用REWRITE函数,为输出打开已分配的文件 
          printer.canvas.font:=memo1.font; 
          //把当前MEMO1的字体指定给打印对象的CANVAS的字体属性 
          for   lines:=0   to   memo1.lines.count-1   do 
          writeln(prntext,memo1.lines[lines]); 
          //把MEMO的内容写到打印机对象 
          system.close(prntext);   //关闭打印文件 
    end; 
    procedure   TForm1.FormCreate(Sender:   TObject); 
    begin 
    memo1.lines.loadfromfile( 'c:\dos\os2.txt '); 
    //在FORM建立时读入C:\DOS\OS2.TXT文件 
    end; 
    end. 
                  2、   图   形   的   打   印   功   能,   简   单   的图   形   打   印   功   能   也   如   打   印   文   本   一   样   的   容   易,   只   是   告   诉   打   印机   对 
    象(TPRINTER)   开   始   打   印,   把   图   形   简   单   的   复   制   到   打   印   机上   去,   最   后   告   诉   打   印   机   结   束   打   印   工   作。 
                  举   例   说   明:   将   上   面   的   例   子的MEMO   控   件   换   成IMAGE   控   件,   再   经   过   一   些   简   单   的   修   改,   图   形   打印   的 
    代   码   如   下: 
    procedure   TForm1.BitBtn1Click(Sender:   TObject); 
    begin 
    if   printdialog1.execute   then   begin 
    printer.begindoc; 
    printer.canvas.draw(0,0,image1.picture.graphic); 
    printer.enddoc; 
    end; 
    end; 
                  在   这   种   情   况   下,   使   用   的   是   打印   机   的   分   辨   率,   图   形   在   页   面   的   左   上   角   开   始   打   印   输   出,   打   出的   图 
    形   很   小,   在   很   多   的   情   况   下   不   能   符   合   要   求,   但   是   打   印   机画   布CANVAS   的STRETHDRAW   的   方   法,   可   以   让   我 
    们   对   图   形   进   行   灵   活的   处   理,   画   布(CANVAS)   的STRETCHDRAW   方   法   声   名   为: 
    procedure   StretchDraw(const   Rect:   TRect;   Graphic:   TGraphic); 
    其中的RECT参数代表图形输出区域的大小,TRECT的类型声名为: 
    TRect   =   record 
        case   Integer   of 
            0:   (Left,   Top,   Right,   Bottom:   Integer); 
            1:   (TopLeft,   BottomRight:   TPoint); 
    end; 
                  因   此   我   们   只   要   调   整RECT   的   大小   及   其   在   打   印   页   面   上   的   位   置,   进   而   达   到   自   己   满   意   的   效   果,下   面 
    的   代   码   是   不   断   的   放   大   图   形,   充   满   我   们   定   义   的   矩   形   区域,   并   将   其   定   位   在   打   印   机   画   布(CANVAS)   的   中   央 
    进   行   输   出。代   码   如   下: 
    procedure   TForm1.Button1Click(Sender:   TObject); 
    VAR 
    strect:Trect;         //定义打印输出矩形框的大小 
    temhi,temwd:integer; 
    begin 
    if   printdialog1.execute   then 
          begin 
          temhi:=image1.picture.height; 
          temwd:=image1.picture.width; 
                while   (temhi   printer.pageheight   div   2)and 
    //将图形放大到打印页面的1/2大小 
                      (temwd   printer.pagewidth   div   2)       do 
        begin 
        temhi:=temhi+temhi; 
        temwd:=temwd+temwd; 
        end; 
                      with   strect   do         //定义图形在页面上的中心位置输出 
        begin 
        left:=(printer.pagewidth   -temwd)   div   2; 
        top:=(printer.pageheight-temhi)   div   2; 
        right:=left+temwd; 
        bottom:=top+temhi; 
        end; 
          with   printer   do 
          begin 
          begindoc; 
          canvas.stretchdraw(strect,image1.picture.graphic); 
          //将放大的图形向打印机输出 
          enddoc; 
          end; 
    end; 
    end;