zoukankan      html  css  js  c++  java
  • C# Lodop实现打印

    项目的Debug文件夹下有个template文件夹,里面有用到的js、自己建的要打印的网页和用到的背景图

    1、打印方法:

    class print
    {
        public void printzb(string bh){
    
            //要打印的变量
            string zwjyzsbh = "123456";
            string zsfwdp = "";
            string zsfwdc = "";
            string zsfwdxian = "";
            //获取打印背景图的地址
            string pash="";
            string pashimg="";
            
            //这里用到了VelocityHelper模板
            VelocityHelper vh = new VelocityHelper();
            
            vh.Init(@"template");//初始化,指定模板文件的相对路径,就是工程里Debug文件里的路径
            
            //put后,在网页就可以调用这些变量,就和spring的那一套流程类似,jsp通过jstl调用
            vh.Put("title", "员工信息");
            vh.Put("zwjyzsbh", zwjyzsbh);
            vh.Put("zsfwdp", zsfwdp);
            vh.Put("zsfwdc", zsfwdc);
            vh.Put("zsfwdxian", zsfwdxian);
            
            pash = Directory.GetCurrentDirectory();//工程的Debug所在目录
            pash = pash.Replace("\", "/");
            pashimg = pash + "\template\JY_DYJY_SJZWJYZS.jpg";
            pashimg=pashimg.Replace("\", "/");
            vh.Put("pash", pash);
            vh.Put("pashimg", pashimg);
            
            //新建窗体FrmWebBrowser,拉一个控件webBrowser,在该控件显示所要打印的页面page.htm
            String htm = vh.Display("page.htm");
            FrmWebBrowser frmView = new FrmWebBrowser();
            frmView.webBrowser1.DocumentText = htm;
        }  
    }  

    2、要显示的页面:page.htm,(自己新建一个)

    <!DOCTYPE html>
    <HTML>
    <HEAD>
    <TITLE>$title</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=UTF-8">
    <META content="$title" name=description>
    <META content="$title" name=keywords>
    <script type="text/javascript" src="http://127.0.0.1:8000/CLodopfuncs.js"></script> 
    <script type="text/javascript" src="$pash/template/jquery-1.11.0.min.js"></script>
    <script type="text/javascript" src="$pash/template/bootstrap.min.js"></script>
    <script type="text/javascript" src="$pash/template/jquery.bootstrap.js"></script>
    <script type="text/javascript" src="$pash/template/jquery.form.js"></script>
    <script type="text/javascript" src="$pash/template/jquery.validate.min.js"></script>
    <script type="text/javascript" src="$pash/template/messages_bs_zh.js"></script>
    <script type="text/javascript" src="$pash/template/LodopFuncs.js"></script>
    <script>
        $(function () {
            LODOP = getLodop();
            LODOP.NewPage();
            LODOP.ADD_PRINT_TEXT(200, 150, 375, 22, "$zwjyzsbh");//(要打印的文本,前四个是坐标,最后是获取前面put的变量)
            LODOP.ADD_PRINT_TEXT(170, 270, 75, 22, "$zsfwdp");
            LODOP.ADD_PRINT_TEXT(170, 400, 75, 22, "$zsfwdc");
            LODOP.ADD_PRINT_TEXT(170, 400, 75, 22, "$zsfwdxian");
            
            LODOP.ADD_PRINT_SETUP_BKIMG("<img width='760' height='1122' border='0' src='$pashimg'>");//增加背景图
            LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW", 1);//打印预览是否显示背景图,1:显示
            LODOP.PREVIEW();//预览
            });
    </script>
    
    </HEAD>
    
    <body>
    
    </body>
    </HTML>

    顺便看下这个: http://blog.csdn.net/lovelylord/article/details/43405927

    3、FrmWebBrowser窗体,用来显示要打印的页面

    3、VelocityHelper模板类,用来生成html,需要引入NVelocity。不用改

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Web;
    using NVelocity;
    using NVelocity.App;
    using NVelocity.Exception;
    using NVelocity.Runtime;
    using System.IO;
    using Commons.Collections;
    using NVelocity.Context;
    
    namespace gjjy
    {
        class NVelocityHelper
        {   /// 
            /// NVelocity模板工具类 VelocityHelper
            /// 
            public class VelocityHelper
            {
            private VelocityEngine velocity = null;
            private IContext context = null;
            /// 
            /// 构造函数
            /// 
            ///模板文件夹路径
            public VelocityHelper(string templatDir)
            {
            Init(templatDir);
            }
            /// 
            /// 无参数构造函数
            /// 
            public VelocityHelper() { ;}
            /// 
            /// 初始话NVelocity模块
            /// 
            ///模板文件夹路径
            public void Init(string templatDir)
            {
            //创建VelocityEngine实例对象
            velocity = new VelocityEngine();
     
            //使用设置初始化VelocityEngine
            ExtendedProperties props = new ExtendedProperties();
            props.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatDir);
            props.AddProperty(RuntimeConstants.INPUT_ENCODING, "utf-8");
            props.AddProperty(RuntimeConstants.OUTPUT_ENCODING, "utf-8");
            velocity.Init(props);
     
            //为模板变量赋值
            context = new VelocityContext();
            }
            /// 
            /// 给模板变量赋值
            /// 
            ///模板变量
            ///模板变量值
            public void Put(string key, object value)
            {
                if (context == null)
                context = new VelocityContext();
                context.Put(key, value);
            }
            /// 
            /// 显示模板
            /// 
            ///模板文件名
            public String Display(string templatFileName)
                {
                    //从文件中读取模板
                    Template template = velocity.GetTemplate(templatFileName);
                    //合并模板
                    StringWriter writer = new StringWriter();
                    template.Merge(context, writer);
                    return writer.ToString();
                }
            }
        }
    }

     4、检查电脑是否已安装Lodop

    public bool checkLodop()
    {
        Microsoft.Win32.RegistryKey uninstallNode = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionUninstall");
        foreach (string subKeyName in uninstallNode.GetSubKeyNames())
        {
            Microsoft.Win32.RegistryKey subKey = uninstallNode.OpenSubKey(subKeyName);
            object displayName = subKey.GetValue("DisplayName");
            if (displayName != null)
            {
                //MessageBox.Show(displayName.ToString());
                if (displayName.ToString().Contains("C-Lodop(32-bit)"))
                {
                    return true;
                     //MessageBox.Show(displayName.ToString());   
                }
            }
        }
        return false;
    }

     自动弹出安装界面

    System.Diagnostics.Process.Start(Application.StartupPath + "\" + "CLodopPrint_Setup_for_Win32NT_2.047.exe");
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/6145500.html
Copyright © 2011-2022 走看看