Activex制作web打印报表问题?(50分)

  • 主题发起人 主题发起人 自我教育
  • 开始时间 开始时间

自我教育

Unregistered / Unconfirmed
GUEST, unregistred user!
两种选择:
1、插件,网上有很多ASP的打印组件。后面的文章也是介绍如何制作组件的。
2、组件本身存在运行注册的问题,发布的时候老是逼着用户改安全属性,总是不爽。
用IE本身的打印功能,虽然功能太简单,但用脚本就能搞定,并非不可取,你可以用
新开页面来显示报表,不就把其他无关的东西给去掉了吗?


用Delphi开发报表打印的ASP组件
--------------------------------------------------------------------------------
作者:zdygis 来源:CSDN 类别:Delphi 日期:2001.08.31 今日/总浏览: 5/505


   ASP在对数据库操作方面提供了很好的内嵌对象。但是,其他方面的功能有所欠缺,如:报表打印。特别是国内的复杂的报表,用ASP很难实现。

不过,ASP支持插件,这就可以根据需要开发ASP插件,笔者用Delphi5.0开发了ASP打印组件。下面笔者将分步来开发一个通用的报表打印的ASP组件。

第一步:新建一个Activex Library,命名为PrintT,然后再新建一个Active Server Object Class,命名为Print,即建立了一个名为Print的ASP组件,文件命名为Unit1.pas。

第二步:打开Type Library,新建一个方法Print1,用于传递报表打印。

第三步:新建一个DataModule,放入Adoconnection组件和AdoTable组件,文件名为Unit2.pas。

第四步:新建一个TQuickRep,设计你要打印的报表,文件名为文件名为Unit23.pas。以下是个文件的详细代码:
{=============Unit1.pas===============}

unit Unit1


interface

uses
ComObj, ActiveX, AspTlb, PrintT_TLB, StdVcl


type
TPrint = class(TASPObject, IPrint)
protected
procedure OnEndPage
safecall

procedure OnStartPage(const AScriptingContext: IUnknown)
safecall

procedure Print1
safecall

end


implementation

uses ComServ,unit2,unit23


procedure TPrint.OnEndPage

begin
inherited OnEndPage

end


procedure TPrint.OnStartPage(const AScriptingContext: IUnknown)

begin
inherited OnStartPage(AScriptingContext)

end


procedure TPrint.Print1

begin
IdearRpt.Print

end


initialization
TAutoObjectFactory.Create(ComServer, TPrint, Class_Print,
ciMultiInstance, tmApartment)

end.

{===============Unit2.pas===============}

unit Unit2


interface

uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms,
Dialogs, DBTables, DB, ADODB


type
TCustomerData = class(TDataModule)
ADOConnection1: TADOConnection

ADOTable1: TADOTable

DataSource1: TDataSource

ADOTable1NIANH: TStringField

ADOTable1XUH: TStringField

ADOTable1SHENQDW: TStringField

ADOTable1SHENQRQ: TDateTimeField

ADOTable1FARDB: TStringField

ADOTable1FARDH: TStringField

ADOTable1LIANXR: TStringField

ADOTable1LIANXRDH: TStringField

ADOTable1DANWZCDZ: TStringField

ADOTable1JIANSXZDM: TStringField

ADOTable1JIANSGM: TBCDField

ADOTable1ZHIGRS: TBCDField

ADOTable1YONGDFH: TBCDField

ADOTable1RIYSL: TBCDField

ADOTable1RIPSL: TBCDField

ADOTable1JIANZSJGD: TBCDField

ADOTable1RANQYL: TBCDField

ADOTable1YONGDYQ: TStringField

ADOTable1RELYL: TBCDField

ADOTable1JIANSXM: TStringField

ADOTable1PIZWH: TStringField

ADOTable1JIANSGM2: TBCDField

ADOTable1YONGDXZDM: TStringField

ADOTable1YONGDWZ: TStringField

ADOTable1DONGL: TStringField

ADOTable1XIL: TStringField

ADOTable1NANL: TStringField

ADOTable1BEIL: TStringField

ADOTable1CHANG: TBCDField

ADOTable1KUAN: TBCDField

ADOTable1ZONGMJ1: TBCDField

ADOTable1ZONGMJ2: TBCDField

ADOTable1YOUXRQ1: TDateTimeField

ADOTable1YOUXRQ2: TDateTimeField

ADOTable1BEIZ: TStringField

ADOTable1JINGB: TStringField

ADOTable1SHENH: TStringField

ADOTable1SHEND: TStringField

ADOTable1SHENDRQ: TDateTimeField

ADOTable1PICTURE: TBlobField


private
{ Private declarations }
public
{ Public declarations }
end


var
CustomerData: TCustomerData


implementation

{$R *.DFM}



end.

{===========Unit23.pas===============}

unit Unit23


interface

uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, Quickrpt, QRCtrls


type
TIdearRpt = class(TQuickRep)
PageFooterBand1: TQRBand

PageHeaderBand1: TQRBand

QRLabel1: TQRLabel

QRLabel2: TQRLabel

QRLabel3: TQRLabel

QRDBText15: TQRDBText

QRDBText17: TQRDBText

QRDBText19: TQRDBText

QRDBText13: TQRDBText

QRLabel46: TQRLabel

QRLabel47: TQRLabel

TitleBand1: TQRBand

QRShape1: TQRShape

QRShape2: TQRShape

QRShape3: TQRShape

QRShape4: TQRShape

QRShape5: TQRShape

QRShape6: TQRShape

QRLabel4: TQRLabel

QRLabel5: TQRLabel

QRLabel6: TQRLabel

QRShape7: TQRShape

QRShape8: TQRShape

QRLabel7: TQRLabel

QRLabel8: TQRLabel

QRLabel11: TQRLabel

QRLabel12: TQRLabel

QRDBText1: TQRDBText

QRDBText2: TQRDBText

QRDBText4: TQRDBText

QRDBText6: TQRDBText

QRDBText3: TQRDBText

QRShape9: TQRShape

QRLabel9: TQRLabel

QRDBText5: TQRDBText

QRShape17: TQRShape

QRShape22: TQRShape

QRShape23: TQRShape

QRShape24: TQRShape

QRShape25: TQRShape

QRShape26: TQRShape

QRShape27: TQRShape

QRShape10: TQRShape

QRShape11: TQRShape

QRShape12: TQRShape

QRShape13: TQRShape

QRShape18: TQRShape

QRShape19: TQRShape

QRLabel10: TQRLabel

QRLabel13: TQRLabel

QRLabel14: TQRLabel

QRLabel15: TQRLabel

QRLabel16: TQRLabel

QRLabel17: TQRLabel

QRLabel18: TQRLabel

QRLabel19: TQRLabel

QRLabel20: TQRLabel

QRLabel21: TQRLabel

QRLabel22: TQRLabel

QRLabel23: TQRLabel

QRLabel24: TQRLabel

QRLabel32: TQRLabel

QRLabel33: TQRLabel

QRLabel34: TQRLabel

QRLabel35: TQRLabel

QRLabel36: TQRLabel

QRShape20: TQRShape

QRLabel37: TQRLabel

QRLabel38: TQRLabel

QRLabel41: TQRLabel

QRLabel42: TQRLabel

QRLabel43: TQRLabel

QRLabel44: TQRLabel

QRLabel45: TQRLabel

QRLabel48: TQRLabel

QRLabel49: TQRLabel

QRLabel50: TQRLabel

QRLabel51: TQRLabel

QRLabel52: TQRLabel

QRLabel53: TQRLabel

QRLabel54: TQRLabel

QRLabel55: TQRLabel

QRLabel56: TQRLabel

QRLabel57: TQRLabel

QRLabel58: TQRLabel

QRLabel59: TQRLabel

QRLabel60: TQRLabel

QRLabel61: TQRLabel

QRShape28: TQRShape

QRLabel62: TQRLabel

QRLabel63: TQRLabel

QRDBText7: TQRDBText

QRDBText8: TQRDBText

QRDBText9: TQRDBText

QRDBText10: TQRDBText

QRDBText11: TQRDBText

QRDBText12: TQRDBText

QRDBText14: TQRDBText

QRDBText16: TQRDBText

QRDBText18: TQRDBText

QRDBText20: TQRDBText

QRDBText21: TQRDBText

QRDBText22: TQRDBText

QRDBText23: TQRDBText

QRDBText24: TQRDBText

QRDBText25: TQRDBText

QRDBText26: TQRDBText

QRDBText27: TQRDBText

QRDBText28: TQRDBText

QRDBText29: TQRDBText

QRDBText30: TQRDBText

QRDBText31: TQRDBText

QRDBText32: TQRDBText

QRDBText33: TQRDBText

QRDBText34: TQRDBText

QRDBText35: TQRDBText

QRMemo4: TQRMemo

QRDBText36: TQRDBText

QRDBText37: TQRDBText

QRDBText38: TQRDBText

private

public

end


var
IdearRpt: TIdearRpt


implementation
uses unit2

{$R *.DFM}

end.

{=========PrintT.dpr============}

library PrintT


{%File 'Print.asp'}

uses
ComServ,
PrintT_TLB in 'PrintT_TLB.pas',
Unit1 in 'Unit1.pas' {Print: CoClass},
Unit2 in 'Unit2.pas' {CustomerData: TDataModule},
Unit23 in 'Unit23.pas' {IdearRpt: TQuickRep}


exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer


{$R *.TLB}

{$R *.RES}

begin
IdearRpt := TIdearRPt.Create(NiL);{必不可少}
end.

第五步:编译并注册PrintT组件,即可在ASP代码中调用,调用示例如下:


<% Set DelphiASPObj = Server.CreateObject("PrintT.Print")
DelphiASPObj.Print1

%>

------------------------
以上是别人的教程,我按他做了!
能够显示打印预览窗口,但是无法关闭,关闭时报无法定位预览窗口的父窗体
呵呵,我想跟那个
IdearRpt := TIdearRPt.Create(NiL);{必不可少}
有关系,于是把它放到onstartpage中然后在onendpage中释放
可还是报错!
试着改成IdearRpt := TIdearRPt.Create(self);
呵呵,报错列!看来在acitvex中没有父窗体,呵呵瞎猜的!
还请各位指点哦!
 
大家帮忙啊!!!!
 
真晕了。你直接用DELPHI写个ACTIVEX FORM,然后里面采用FR或者QR产生报表,比这个方便多了。而且好维护。至于说强迫用户更改安全属性的问题,这个好解决啊。以前我在ACTIVEX栏目里发了很多解决这个问题的帖子,你可以去找找。我就不给你找了。其实就是加个数字签名罢了。你去找有关数字签名的帖子,N多。自己一看就会了。我给电业局的项目,全是采用这个方案。
 
呵呵,楼上的兄弟,我也推荐老板用activexform可他认为那不是b/s,非要用做成asp的,我也是没办法啊!
 
procedure TPrint.Print1

begin
IdearRpt.Print

end

--这明明是在服务器上打印嘛,怎么可能在客户端显示出来?
 
IdearRpt := TIdearRPt.Create(NiL);{必不可少}

呵呵,这句就是在创建时候建立的吧
 
后退
顶部