zoukankan      html  css  js  c++  java
  • [原创]ASP.NET MVC调用Delphi开发的Web报表打印activex组件

    作者:mikel

    原文地址:http://www.mikel.cn

    最近需要做打印发货单的功能,以前用delphi的reportmachine控件做报表,功能很强大,可以设计报表并且报表文件和程序分离,优点就不多说了,这次需要连纸打印,于是想到用activex组件开发打印组件。

    这样这个教程就分为两部分,一部分说Delphi的activex组件开发,另一部说ASP.NET MVC如何调用activex组件进行打印。

    1.Delphi开发Activex组件

    • 创建一个ActiveXform项目,如图所示:
      创建activexform

      创建activexform

    • 设置项目发布选项,需要提醒的是由于Delphi7的bug,只在第一次创建项目后能够设置Web Deploy选择,等关闭项目再打开就不能设置了,这个需要注意!
      设置activexform项目

      设置activexform项目

    • 设置Web delpyment  option
    • 拖拽RMRport控件到窗体中,拖拽RMUserDataset组件到窗体,这个适用于传递数据给RMReport报表打印用的,
      添加RMReport打印组件到窗体添加RMUserDataset

      添加RMReport打印组件到窗体

    • 设置RMReport1的DataSet属性为RMUserDataset1设置Dataset
    • 声明对外方法和属性:选择 View ->Type Library

    创建接口方法

    声明print方法

    声明print方法参数

     

    实现print方法打印

    实现print方法打印

    注册Activex组件

    注册Activex组件

    编译生成Activex组件

    编译生成Activex组件

    到此已经成功创建了一个带打印功能的ActiveX组件,具体如何使用ReportMachine 报表组件的教程,稍后我会写个详细的教程

    下面就是.Net如何调用Activex组件了。

    2.ASP.NET MVC 调用Activex组件打印

    添加Activex组件的引用

    1.添加Activex组件的引用

    选择Delphi的报表Activex组件

    2.选择Delphi的报表Activex组件

    引用报表文件到Content文件夹

    3.引用报表文件到Content文件夹

    4.在About.aspx.cs的onload时间中调用Delphi的Activex组件声明的print方法进行打印,需要赋予服务器上report.rmf也就是报表文件的绝对地址给print方法,这样报表组件才能正确加载报表文件,具体代码如下:

     

    01 using System;
    02 using System.Collections.Generic;
    03 using System.Linq;
    04 using System.Web;
    05 using System.Web.Mvc;
    06 using ActiveFormProj1;
    07  
    08 namespace TangCMS.Views.Home
    09 {
    10  public partial class About : ViewPage
    11  {
    12  protected override void OnLoad(EventArgs e)
    13  {
    14  //声明Activex组件的ActivexForm对象
    15  ActiveFormX report = new ActiveFormX();
    16  //调用Activex组件声明的print方法
    17  string file = Server.MapPath("~/content/report.rmf");
    18  report.Print(file);
    19  
    20  }
    21  }
    22 }

    5.发布站点,点击About Us链接会弹出报表预览打印窗口,最终效果如下:

    打印效果最终效果

    有困难找八戒

  • 相关阅读:
    游戏类型
    cocos2d-x lua 一些语法
    lua中ipairs和pairs
    lua的一些语法
    误删jre怎么办
    右键android工程的包名选择Build Path后怎么还原
    播放Armature动画
    接入第三方sdk出现了一些问题总结
    gettimeofday() 获取系统时间,精确到微秒 这个似乎只能在linux 下用,不能在windows 下用
    windows timeGetTime() 函数 获取系统从开机到现在的毫秒时间值
  • 原文地址:https://www.cnblogs.com/mikel/p/1733677.html
Copyright © 2011-2022 走看看