利用ASP.NET实现web套打

 

    最近,要把一个C/S结构的程序改成B/S结构。其中就遇到了打印的问题。研究了一下,web下打印方法大概有这么几种:

1、利用IE直接打印,这种方式最方便,但是控制能力较差。

2、利用ACTIVE控件,可以自己做一个IE的控件来控制打印。

3、水晶报表等第三方工具,购买价格昂贵。

    根据我的需求情况,用IE直接打印的方式可以满足。我们的目的就是在一张申请表格上对应位置打印上相应的项目,表格也只有一页,不涉及分页的问题。

   先来看一下表格,目的就是在一个WEBFORM里面对应的TEXTBOX内容放到对应的位置打印出来。

    先来说一下我的思路:程序自动生成一个要打印的网页,将对应的字段值传递给这个网页,每个字段的位置事先量好,利用<div style="   ">来控制对应字段在页面中的位置。具体要到了下面技术:

1、自定义一个打印类,用来自动生成要打印的网页。

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.IO;
using System.Collections;

///


/// MyPrint 的摘要说明
///

public class MyPrint : System.Web.UI.Page
{
    public static string pageUrlBase;//Page基本的URL
    public string name;
    public string sex;
    public string brithday;
    public string country;
    public string CardName;
    public string CardNum;
    public string address;
    public string touchAddress;
    public string tel;
    public string postCode;
    public string type;
    public string reg;
    public string oldReg;
    ///
    /// 恢复打印模板
    ///

    ///
    ///

  public void ClearView()
    {
        StringBuilder htmltext = new StringBuilder();
        try
        {
            if (!File.Exists(Server.MapPath(Context.Request.ApplicationPath) + "//printwindow.htm"))
            {
                FileStream fs = File.Create(Server.MapPath(Context.Request.ApplicationPath) + "//printwindow.htm");
                fs.Close();
            }
            using (StreamWriter sw = new StreamWriter(Server.MapPath(Context.Request.ApplicationPath) + "//printwindow.htm",false,Encoding.Default))
            {
                string sTableTitle = "";
                sTableTitle = sTableTitle + "<html>/n";
                sTableTitle = sTableTitle + "<head>/n";
                sTableTitle = sTableTitle + "<Title></Title>/n";
                sTableTitle = sTableTitle + "<meta http-equiv=/"Content-Type/" content=/"text/html; charset=GB2312/">/n";
                sTableTitle = sTableTitle + "<script lanage=/"javascript/">";
                sTableTitle = sTableTitle + "function preview()";
                sTableTitle = sTableTitle + "{";
                sTableTitle = sTableTitle + "window.print();window.close()}</script>";
                sTableTitle = sTableTitle + "</head>";

                sTableTitle = sTableTitle + "<body style=/"background-position: left top; background-image: url(Images/申请表.jpg); left: 0px; width: 735px; position: absolute; top: 0px; height: 1050px;/" ms_positioning=/"GridLayout/"    topmargin=/"0/" bottommargin=/"0/"  οnlοad=/"preview();/">/n";
                //sTableTitle = sTableTitle + "Model/n";
                //正式页面内容部分
                sTableTitle = sTableTitle + "<font face=/"宋体/">";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 100; left: 138px; position: absolute; top: 176px/">" + name + "</div>";
                //sTableTitle = sTableTitle + "<img src=/"Images/1234.jpg/" Style=/"z-index: 116; left: 119px; position: absolute; top: 439px/"  Width=/"8px/" Height=/"8px/" />";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 101; left: 395px; position: absolute; top: 176px/">" + sex + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 102; left: 488px; position: absolute; top: 176px/">" + brithday + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 103; left: 640px; position: absolute; top: 176px/">" + country + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 104; left: 138px; position: absolute; top: 200px/">" + CardName + "</div>";
                //sTableTitle = sTableTitle + "<div  Style=/"z-index: 105; left: 272px; position: absolute; top: 200px/">" + CardNum + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 106; left: 136px; position: absolute; top: 256px/">" + address + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 107; left: 136px; position: absolute; top: 288px/">" + touchAddress + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 108; left: 136px; position: absolute; top: 320px/">" + tel + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 109; left: 472px; position: absolute; top: 320px/">" + postCode + "</div>";
                sTableTitle = sTableTitle + "<div  Style=/"z-index: 110; left: 352px; position: absolute; top: 352px/">" + reg + "</div>";
                //sTableTitle = sTableTitle + "<div  Style=/"z-index: 112; left: 119px; position: absolute; top: 358px/">姓名</div>";
                //判断是否是初次申领还是什么地
                if(type=="初次申领")
                    sTableTitle = sTableTitle + "<img src=/"Images/1234.jpg/" Style=/"z-index: 112; left: 128px; position: absolute; top: 358px/"  Width=/"8px/" Height=/"8px/" />";
                else if (type == "增加准驾车型")
                {
                    sTableTitle = sTableTitle + "<img src=/"Images/1234.jpg/" Style=/"z-index: 115; left: 118px; position: absolute; top: 384px/"  Width=/"8px/" Height=/"8px/" />";
                    sTableTitle = sTableTitle + "<div  Style=/"z-index: 111; left: 600px; position: absolute; top: 352px/">" + oldReg + "</div>";
                }
                else if (type == "持军警驾驶证")
                {
                    sTableTitle = sTableTitle + "<img src=/"Images/1234.jpg/" Style=/"z-index: 114; left: 118px; position: absolute; top: 409px/"  Width=/"8px/" Height=/"8px/" />";
                    sTableTitle = sTableTitle + "<div  Style=/"z-index: 111; left: 600px; position: absolute; top: 352px/">" + oldReg + "</div>";

                }
                else
                {
                    sTableTitle = sTableTitle + "<img src=/"Images/1234.jpg/" Style=/"z-index: 116; left: 119px; position: absolute; top: 439px/"  Width=/"8px/" Height=/"8px/" />";
                    sTableTitle = sTableTitle + "<div  Style=/"z-index: 111; left: 600px; position: absolute; top: 352px/">" + oldReg + "</div>";

                }
                //输出身份证
                int length = CardNum.Length;
                int start = 272;
                for (int i = 0; i < length; i++)
                {
                    sTableTitle = sTableTitle + "<div  Style=/"z-index: 105; left: " + start.ToString() +  "px; position: absolute; top: 200px/">" + CardNum.Substring(i,1) + "</div>";
                    start = start + 18;
                }
                sTableTitle = sTableTitle + "</body>/n";
                sTableTitle = sTableTitle + "</html>/n";
                sw.WriteLine(sTableTitle);
                sw.Flush();
                sw.Close();
            }
        }
        catch
        {
            Response.Write("<script>alert(&apos;读取文件出错!&apos;)</script>");
        }
    }
public MyPrint()
{
//
// TODO: 在此处添加构造函数逻辑
//
        try
        {
            string urlSuffix = Context.Request.Url.Host;
            urlSuffix = urlSuffix + (Context.Request.Url.Port.ToString() == "" ? "" : ":" + Context.Request.Url.Port);
            urlSuffix = urlSuffix + (Context.Request.ApplicationPath.ToString() == "/" ? "" : Context.Request.ApplicationPath);
            pageUrlBase = @"http://" + urlSuffix;
        }
        catch
        {

        }
}
}

     ClearView函数是用来自动生成网页。里面输出身份证的时候,为了和表格对应精确采用了按位输出。
2.调用的方法
   print.name = this.TextBox2.Text;
        if (RadioButton1.Checked)
            print.sex = "男";
        else
            print.sex = "女";
        print.brithday = this.TextBox4.Text;
        print.tel = this.TextBox5.Text;
        print.country = this.DropDownList2.Text;
        print.type = this.DropDownList3.Text;
        print.oldReg = this.DropDownList4.Text;
        print.reg = this.DropDownList6.Text;
        print.address = this.TextBox13.Text;
        print.touchAddress = this.TextBox14.Text;
        print.CardName = "身份证";
        print.CardNum = this.TextBox3.Text;
        print.ClearView();
        string showOpen = "<script lanage=&apos;javascript&apos;>window.open(&apos;printwindow.htm&apos;,&apos;_blank&apos;);</script>";
        ScriptManager.RegisterClientScriptBlock(this.Button4, this.GetType(), "verygood", showOpen, false);
      这是提交页面上的一个“打印”按钮的响应事件。首先把页面上对应的字段传给打印类,然后调用ClearView来生成网页。最后,通过注册脚本的方式在新窗口中打开网页。我这里了AJAX所以用到了
    ScriptManager.RegisterClientScriptBlock(this.Button4, this.GetType(), "verygood", showOpen, false);这句,如果没用AJAX用这个就可以了
    RegisterClientScriptBlock("clientScript", showOpen);
3、用到的JAVASCRIPT
    <script language="Javascript">
    function preview()
    {
        window.print();
       self.close();
    }
    </script>
    打印之后能够自动关闭窗口。
    
    这样就基本实现了web套打。程序参考了 http://www.cnblogs.com/HelloSnoopy/articles/105475.html这篇文章。
 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
ASP.NET Core Web 项目中使用 Vue.js,您可以按照以下步骤进行操作: 1. 首先,确保您的开发环境中已安装 Node.js。您可以从 Node.js 官方网站(https://nodejs.org)下载并安装适合您操作系统的版本。 2. 创建 ASP.NET Core Web 项目:使用您选择的方法创建一个新的 ASP.NET Core Web 项目或打开现有项目。 3. 在项目根目录中初始化 Vue CLI:打开命令行界面,导航到您的项目根目录,并运行以下命令来初始化 Vue CLI: ``` vue create clientApp ``` 此命令将在项目根目录下创建一个名为 `clientApp` 的文件夹,并初始化 Vue CLI 项目。 4. 配置 Vue CLI:运行上述命令后,Vue CLI 会引导您进行一些配置选项的选择。您可以根据需求选择不同的配置,例如选择需要的特性和插件。 5. 开发 Vue 组件:在 `clientApp` 文件夹中,您可以开始编写 Vue 组件。您可以使用单文件组件 (SFC) 的方式编写组件,或者使用其他适合您的方式。 6. 集成 Vue.js 到 ASP.NET Core Web 项目:在 ASP.NET Core Web 项目中的 Razor 页面或视图中,引入 Vue.js 和您编写的 Vue 组件。您可以使用 `<script>` 标签引入 Vue.js 运行时或开发版本,使用 `<link>` 或 `<style>` 标签引入样式文件。 7. 配置 ASP.NET Core Web 项目以处理 Vue CLI 生成的文件:在 ASP.NET Core Web 项目中的 `Startup.cs` 文件中,确保在 `Configure` 方法中添加以下配置: ```csharp app.UseStaticFiles(new StaticFileOptions { RequestPath = "/clientApp", FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "clientApp/dist") ) }); ``` 这将配置 ASP.NET Core Web 项目以提供 Vue CLI 生成的文件。 8. 运行项目:运行 ASP.NET Core Web 项目,并访问包含 Vue 组件的页面。您应该能够看到 Vue 组件在浏览器中正常运行。 通过上述步骤,您就可以在 ASP.NET Core Web 项目中使用 Vue.js,并开发和管理您的 Vue 组件。这样做可以让您更方便地利用 Vue.js 的功能和特性,与 ASP.NET Core Web 项目进行集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值