前一段时间我帮一个朋友开发了一个Web快递单打印程序,程序本身很简单的,就几千行代码,我一个周末就可以搞定,因为太简单了,我都只把它叫程序,而不叫系统,呵呵。但朋友使用后,提出了一个比较中肯的需求,快递单是针式打印机打印,而平时的文档一般是A4纸,通过激光打印机打印,我把他们的默认打印机设为针式打印机,这样虽然可以在打印快递单时方便的直接打印(不需要打印预览)出快递单,但他们在打印文档时,已经习惯了不选择打印机,直接就打印,这样就经常把要打印的文档发到针式打印机上打印,浪费了不少快递单。我通过调查发现,现在一般的公司都会装两种打印机,一种是针式打印机,用来打印各种单据和发票,一种是激光喷墨之类的打印机用来打印文档,正常情况下是把文档的打印机设为默认打印机。

我想我们作为程序员,不管系统的大小,简单和复杂,良好的用户体验是我们追求的设计目标。我们做程序和系统,本身就是去减轻用户的工作,而不是因为使用了我们所开发的程序和系统,而使工作变得更复杂,在程序的操作方面,能让用户少选一下就应该做到少选一下,能让用户少点一次就应该做到少点一次,能让用户少出错就应该做到少出错。

我在这种思想的指导下,对这个小东西也精益求精吧,呵呵。这个Web打印控件是我自己设计的,我就想在原来的基础上增加指定打印机的功能,这样用户就不用再为打印机选来选去。折腾了好几个小时,终于可以指定打印机了,但这个打印机的名称是在程序中写死的,我又觉得不方便,特别是对于网络打印机,得把“\”改为“\\”,挺不方便的,打印机的名称一般又比较长,中间还有空格,很容易输错了,如果输错了,则指定的打印机无效了。我就想好事做到底吧,干脆在控件中把本地的打印机列表抓出来,然后作为一个下拉框,供用户选择,再把选择的结果保存下来,这样既不会出错,又很灵活,如果用户的打印机重装了或者移到另外的电脑上,只要自己选择一下就好了,也不用我再改程序了。

控件中指定打印机的示例代码如下:

控件中指定打印机的示例代码

        protected void BtnDepositPrint_Click(object sender, EventArgs e)        {string FileValue, PrintValue, ParaName, ParaValue;

            FileValue = FileToString(".\\Frp\\DepositAmt.fr3");            ParaName = "ShopName`~PrintDepositAdd`~PrintPaperNo`~Title";  //`~为各参数的分隔符            ParaValue = "测试酒楼"                      + "`~说明:本单据为贵客押金收取凭证,盖章有效。退房时请出示,遗失者自负,请妥善保存。退房时间为12:00时,延时退房18:00时以前按半天房费收取,18:00时以后算全天房价。押金单有效期为一个月,过期作废。       贵重物品请交前台寄存,未寄存丢失自负。      谢谢!"                      + "`~身份证:4325011980639512"                      + "`~押金单";

            SqlConnection ConPrintTest = new SqlConnection(ConfigurationManager.ConnectionStrings["PrintTestConnectionString"].ToString());            ConPrintTest.Open();            DataSet DsCashLog = new DataSet();            SqlDataAdapter DaCashLog = new SqlDataAdapter("Select top 1 CashNo, CashDate, CashAmt, PayName, GuestName, RoomNo, ItemRemark, CashUserName, Remark From CashLog", ConPrintTest);            DaCashLog.FillSchema(DsCashLog, SchemaType.Source, "CashLog");            DaCashLog.Fill(DsCashLog, "CashLog");

            PrintValue = TableToXml(DsCashLog.Tables["CashLog"]);

            DsCashLog.Dispose();            ConPrintTest.Close();

string ScriptStr;

            ScriptStr = "<script language='javascript'>window.onload = function() { try { var ObjPrintMange =  new ActiveXObject('WebPrint.WebPrintUnit'); } catch(e) { if( confirm('打印控件未安装,现在下载吗?') ) { window.location='./PrintActivex.exe'; } return; } var OldVersion=ObjPrintMange.Version; NewVerion='5.0(2011-08-01)'; if(OldVersion < NewVerion) { ObjPrintMange = null; alert('打印控件需升级。请先进行下载,下载后关闭IE,然后安装升级版。'); window.location='./PrintActivex.exe'; return;  } "                     + " ObjPrintMange.CheckReg('公司名称', '3B8E5B998A3125EE89983EA940BB2AEE'); "  //注册码                     + " ObjPrintMange.Printer='\\\\192.168.1.88\\Epson LQ-300K';"                     + " ObjPrintMange.PrintReport('"                     + FileValue + "' , '"                     + ParaName + "', '"                     + ParaValue + "', '"                     + PrintValue + "', '', '', '', '', '');"                     + "ObjPrintMange = null; window.location='./Default.aspx'; } </script>";  //window.location转向新的网页            ScriptStr = ScriptStr.Replace(System.Environment.NewLine, string.Empty);

            Response.Write(ScriptStr);        }

控件中读取客户端本地打印机列表的示例代码如下:

<script language='javascript'>

window.onload = function() {try {var ObjPrintMange = new ActiveXObject('WebPrint.WebPrintUnit');    }catch (e) {if (confirm('打印控件未安装,现在下载吗?')) {            window.location = './PrintActivex.exe';         }return;    }

var OldVersion = ObjPrintMange.Version; NewVerion = '5.0(2011-08-01)';if (OldVersion < NewVerion) {        ObjPrintMange = null;        alert('打印控件需升级。请先进行下载,下载后关闭IE,然后安装升级版。');        window.location = './PrintActivex.exe';return;    }

    ObjPrintMange.CheckReg('公司名称', '3B8E5B998A3125EE89983EA940BB2AEE'); var ObjCmbPrinterList = document.getElementById('CmbPrinterList');var strPrinterList = ObjPrintMange.PrinterList; var arrayPrinterList = strPrinterList.split(';');     ObjCmbPrinterList.innerHTML = '';for (var i = 0; i < arrayPrinterList.length - 1; i++) {        ObjCmbPrinterList[i] = new Option(arrayPrinterList[i], 0);     }

    ObjPrintMange = null;} 

</script>

指定Web打印的打印机,对于打印预览方式,系统则把指定打印机设为首选打印机;对于直接打印,系统则把打印任务直接分配给指定打印机。若为空则为默认打印机。指定的打印机必须是客户端电脑已安装好的,本地打印机和网络打印机都可以,对于网络打印机的名称,注意“\”改为“\\”,比如:ObjPrintMange.Printer='\\\\192.168.1.88\\Epson LQ-300K'; ,若指定的打印机不存在,则还是默认的打印机。

有什么问题请加入QQ群:218392762(一群:135506194、二群:150850837都已满,请加入三群)或者请直接Q我:12988672。

报表预览、编辑和下载的网址:  http://www.lc-simple.com/PirntTest/

转载于:https://www.cnblogs.com/dong0738/archive/2011/10/07/2200539.html

指定Web打印的打印机相关推荐

  1. web页面调用打印机不预览直接执行打印

    web页面调用打印机不预览直接执行打印 <%@ page language="java" import="java.util.*" contentType ...

  2. java web 打印控件_web打印,web打印控件,dotnet web打印控件,java web打印控件,webprint...

    webprint打印参数设置小插件,主要实现打印纸张,边距,打印机等的设置. 主要功能: 设置页眉页脚属性 设置打印页面左右上下边距 设置打印方向,打印份数,打印指定页 打印模版和指定纸型绑定 设置自 ...

  3. 2013第39周一Web打印

    2013第39周一Web打印 项目中遇到了Java Web打印问题,简单调用IE浏览器的打印不能完全满足要求,于是就搜集了Web打印相关的主题,简单汇总一下.web打印难点在分页.页面纸张设置,页眉页 ...

  4. 基于IE内核的一个WEB打印实现方案

    工作需要实现一个基于IE内核的打印方案.本文将对于此方案的进行一个整体解析.由于此方案涉及自己以前未涉及的很多方面,在研究过程中学习了很多,因此在此也是做一次总结. 本文主要分为以下几个部分: (一) ...

  5. 兼容所有浏览器的Web打印控件的设计方案

    兼容所有浏览器的Web打印控件的设计方案 设计方案的简单实现网址:http://www.lc-simple.com/PrintTest/ 第一章:Web打印控件的原理 Web打印控件的工作的原理如下: ...

  6. HTML生成PDF、web打印动态分页、预览。内容满了,自动换页、移动端兼容 bookjs-eazy

    WEB打印,HTML转PDF工具.bookjs-eazy 仓库地址: GITEE | GITHUB 主要解决,HTML生成PDF,分页可控的问题 依赖js库:polyfill.jquery.lodas ...

  7. PAZU -- 4Fang WEB 打印控件

    PAZU -- 4Fang WEB 打印控件 无限制免费版,完美您的WEB应用 一.概述 PAZU 是4Fang为配合"四方在线"软件于2004年开发的WEB打印控件,适用于各种W ...

  8. PAZU WEB打印控件

    PAZU WEB打印控件 PAZU 组件在国内我们提供授权给包括中国电信.移动和银行在内的超过300家大中型企业和IT企业应用于基于WEB的开发 PAZU 支持包括Java, Dot Net, JSP ...

  9. Web打印--Lodop使用手册install_lodop.exe

    ~_~一个程序员的淘宝店:点击打开链接 http://www.hbsszx.com/lodop/PrintSample27.html Lodop是一款专业的WEB打印控件,其设计目标是简单易用.功能足 ...

  10. 锐浪html5打印,WEB打印

    WEB打印方式概述 WEB浏览器本身具备打印当前网页的功能,当网页内容超过一页时就需要分页处理,浏览器对这样的分页处理都不完善,直接利用浏览器的打印功能很难实现多页数据的完美打印.各种浏览器的打印行为 ...

最新文章

  1. python使用matplotlib可视化3D直方图(3D histogram、三维直方图、包含三个坐标轴x、y、z)、3D直方图可视化多个维度数据的区别和联系
  2. 干货丨一文看懂生成对抗网络:从架构到训练技巧
  3. [C#]从URL中获取路径的最简单方法-new Uri(url).AbsolutePath
  4. MFC之进度条CProgressCtrl
  5. java删除第一个节点_访问单个节点的删除(Java)
  6. python代码编码成jni_python 设置文件编码格式的实现方法
  7. 大东电报与雷格斯在全球部署宝利通高清系统
  8. 大数据阶段划分及案例单词统计
  9. scala 学习笔记--集合
  10. Spring安全权限管理(Spring Security的配置使用)
  11. 用JavaScript+HTML实现双色球随机摇号效果
  12. 离线安装docker
  13. linux vga 驱动,Linux VGA驱动移植实验【转】
  14. tibco linux安装手册,TIBCO Admin 5.11.1 安装及Domain建立 (Linux)
  15. 苹果新一代iPad发布,库克表示后PC时代已经来临
  16. 普通话测试第四题评分标准_普通话等级考试内容及评分标准
  17. Matplotlib画动态散点图:
  18. 我为什么选择Go语言(Golang)
  19. QC、QA未来的发展前景和“钱”景在哪?
  20. 黑阔主流攻防之不合理的cookie验证方式

热门文章

  1. uniapp微信登陆
  2. 计算机国际会议口头报告范例,国际会议报告开场白(共4篇).docx
  3. 计算机笔记检讨,上课没做笔记的反省检讨书
  4. Vast.ai GPU服务器连接
  5. 用计算机算出女儿身高,孩子身高预测计算器准吗
  6. C++ emplace_back
  7. 笔记丨利用gitee创建个人博客网站
  8. 大数据学习——Hadoop本地模式搭建
  9. python中seek是什么意思_python中seek怎么用
  10. electron 自定义右键菜单