winform打印的方案比较多,实现也比较容易,而且效果也非常炫;但现在越来越多的系统是web系统,甚至是移动端。网上也有非常的web打印方案,但各式各样的问题非常多,比如js兼容性,稳定性等一直缠绕着众多的程序员,或者就是web 打印需要浏览器安装 ActiveX 组件,ActiveX安装不容易成功等等问题。

  下面我们来看一种web在线阅览,在线编辑,在线打印的解决方案,Lodop这一款在线打印工具在各版本浏览器的兼容性表现不错,功能方面,我们常用的打印阅览,打印设计,打印机设置等他都提供了,而且额外的功能也是很多的,足够我们开发使用了。他对浏览器安装 ActiveX 组件提供了另外一种方法,首先检测有没有安装插件,未检测到插件时,自动提示,并给出下载插件的地址,这里的插件使用的是exe 格式的,这样就避免了浏览器安全设置的问题,至于怎么安装这里就不在赘述。

  1.准备工作:

  下载lodop:http://www.lodop.net/uploads/file/Lodop6.198.zip解压后放到工程中,在页面引入如下代码:

<script src="~/Scripts/Lodop组件包/LodopFuncs.js"></script>

<script type="text/javascript" language="javascript" src="../Lodop/LodopFuncs.js"></script>
<object id="LODOP" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0" height="0"> 
    <embed id="LODOP_EM" type="application/x-print-lodop" width="0" height="0" pluginspage="../Lodop/install_lodop.exe"></embed>
</object>

  其中: <embed id="LODOP_EM" type="application/x-print-lodop" width="0" height="0" pluginspage="../Lodop/install_lodop.exe"></embed>

是专为 FireFox 浏览器设计的代码,如果你这个打印控件只在 IE 上应用,那么上面这名话完全可以不用的。

只这样加就行了:

<script type="text/javascript" language="javascript" src="../Lodop/LodopFuncs.js"></script>
<object id="LODOP" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0" height="0"> 
</object>

  把这些引入页面以后,剩下的就是一些基本的lodop API调用了。

  2.加几个按钮调用

  1. <div class="toolbar">
  2. @x.Button("打印预览").Icon("icon-printView").Click("print_preview()").ToolTip("打印预览")
  3. @x.Button("直接打印").Icon("icon-print").Click("print()").ToolTip("直接打印")
  4. @x.Button("选择打印机").Icon("icon-selectPrinter").Click("print_printA()").ToolTip("选择打印机")
  5. @x.Button("打印维护").Icon("icon-printSetup").Click("printSetup()").ToolTip("打印维护")
  6. @x.Button("打印设计").Icon("icon-printDesign").Click("printDesign()").ToolTip("打印设计")
  7. </div>

  3.这些按钮对应的方法  

  1. var LODOP; //声明为全局变量
  2. // 打印预览
  3. function print_preview() {
  4. CreatePrintPage();
  5. LODOP.PREVIEW();
  6. };
  7. // 直接打印
  8. function print() {
  9. CreatePrintPage();
  10. LODOP.PRINT();
  11. };
  12. // 选择打印机
  13. function print_printA() {
  14. CreatePrintPage();
  15. LODOP.PRINTA();
  16. };
  17. //打印维护
  18. function printSetup() {
  19. CreatePrintPage();
  20. LODOP.PRINT_SETUP();
  21. };
  22. //打印设计
  23. function printDesign() {
  24. CreatePrintPage();
  25. LODOP.PRINT_DESIGN();
  26. };
  27. // 创建打印页面
  28. function CreatePrintPage() {
  29. LODOP = getLodop();
  30. LODOP.PRINT_INIT("web在线打印");
  31. LODOP.SET_PRINT_PAGESIZE(, , , "A4");
  32. //设置打印页面属性:2:表示横向打印,0:定义纸张宽度,为0表示无效设置,A4:设置纸张为A4
  33. //LODOP.ADD_PRINT_TEXT(50, 231, 260, 39, "打印页面部分内容");
  34. LODOP.SET_PRINT_STYLE();
  35. LODOP.SET_PRINT_STYLE();
  36. LODOP.ADD_PRINT_HTM(, , , , $(].contentWindow.document.body.innerHTML);
  37. }

  具体API不用详细介绍,这里只说一下ADD_PRINT_HTM(intTop,intLeft,intWidth,intHeight,strHtml)增加超文本项,

  1. $('#CurrentDocumentPage')[0].contentWindow.document.body.innerHTML,就是Iframe页面的内容,需要仔细研究的可以到lodop官网查阅。
  1. <div id="DocumentViewerSummary" style="margin: 5px;height:auto; width: auto; text-align: center">
  2. <iframe id="CurrentDocumentPage" style="width: 98.5%; height: 97%; min-height: 480px; text-align: center;
  3. position: relative;margin: 5px;padding-top: 5px;padding-left: 5px;"></iframe>
  4.  
  5. </div>

$("#CurrentDocumentPage").attr("src", viewUrl);

  4.最终效果

  页面内容

  打印阅览

   打印维护的目标用户是页面操作者,开发者在根据业务需要将该界面提供给操作者时,有时会发现其默认功能权限不符合业务要求(亦多亦少),如下是默认的功能权限范围,试着改变勾选,看看演示程序是如何通过SET_SHOW_MODE函数解决这一问题的。

1:位置移动和宽高调整
2:颜色选择
3:字体名选择
4:字大小选择
5:旋角调整
6:粗斜体功能条
7:线型功能条

8:对齐功能条
 9:删除功能
10:页眉设置
11:页脚设置
12:位置锁定功能
13:属性设置
14:显示关闭钮(界面内嵌时)

  打印机设置 

  5.总结:

  最后,简单说下Lodop的优势吧:

    (1)、操作简单,API通俗易懂,兼容性好,主流的浏览器都支持了;

    (2)、插件能实现自动安装提醒,并且不需要其他额外的设置;

    (3)、打印维护能够实现权限控制,比如在不修改内容的前提下修改打印的样式,比如调整字体,比如调整位置等等

    (4)、用户设计的打印页面,可以作为个性化的个人设置,系统维护的同一个模板可以适应不同的打印机。

web在线打印,打印阅览,打印维护,打印设计的更多相关文章

  1. 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享

    很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...

  2. 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?

    用foxit reader 打印pdf 直接设置为双面打印并且一张2页打印,发现正反面刚好倒着来的,其实说的正反面倒着是从左右翻的角度来讲的,如果上下翻会发现刚好是这个顺序的,这个是要在双面打印设置里 ...

  3. JS 打印功能代码可实现打印预览、打印设置等

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...

  4. kernel中,dump_stack打印调用栈,print_hex_dump打印一片内存,记录一下

    kernel中,dump_stack打印调用栈,print_hex_dump打印一片内存,记录一下

  5. 优雅的重载toString方法,打印对象内容而不是打印内存地址的方法

    如果直接在日志或者System.out.println中打印java对象,会打印这个对象的内存地址,而不是具体内容. 为了便于调试,一般的做法有2种: 1.重写toStrong方法 2.将对象传入JS ...

  6. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  7. C# 使用printDocument1.Print打印时不显示 正在打印对话框

    C#使用printDocument1.Print打印时不显示正在打印对话框有两种方法 第一种,使用PrintController       PrintController printControll ...

  8. 62. 用流程自带的打印功能,IE浏览器打印出来是空白

    用流程自带的打印功能,IE浏览器打印出来是空白的这个问题确认是由于IE启用了兼容模式导致的了把IE的兼容模式关掉就行了

  9. C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)

    C#使用printDocument1.Print打印时不显示正在打印对话框有两种方法 第一种,使用PrintController PrintController printController = n ...

随机推荐

  1. android html.fromHtml 用例

    private String content = "<b>标题</b><br>" + "内容<br>": mCo ...

  2. 深入理解java内存模型系列文章

    转载关于java内存模型的系列文章,写的非常好. 深入理解java内存模型(一)--基础 深入理解java内存模型(二)--重排序 深入理解java内存模型(三)--顺序一致性 深入理解java内存模 ...

  3. 深度理解Jquery 中 offset() 方法

    参考原文:深度理解Jquery 中 offset() 方法

  4. 【转】能否用讲个故事的方式,由浅入深,通俗易懂地解释一下什么是天使投资,VC,PE.

    能否用讲个故事的方式,由浅入深,通俗易懂地解释一下什么是天使投资,VC,PE 今天在知乎上看到一篇文章,觉得值得一转的,Here. 我给楼主讲个完整点的故事吧.长文慎点,前方高能,自备避雷针.18岁以 ...

  5. linuxx virutal machine installation

    1. vmplayer download: https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player ...

  6. 【java开发】封装与继承

    2.封装 把属性封起来(私有化private) 提供了一对公有(public)的方法(getter/setter)来对属性进行操作(读取和设置) 这样做以后可以对属性值的有效性进行判断,避免出现不合法 ...

  7. cefsharp重写默认js弹窗(alert/confirm/prompt)

    1.设置js弹窗控制器 webView.JsDialogHandler = this;  //js弹窗控制 this表示本类对象,所以本类要实现IJsDialogHandler接口 2.实现IJsDi ...

  8. java设计模式之中介者模式

    中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式UML图 中介者模式代码 package com ...

  9. required string parameter XXX is not present

    @RequestParam jQuery调用方式: deleteFile: function(filePath) { return ajax({ method: 'POST', url: '/cm/s ...

  10. jQuery表单验证案例

    目标:使用jQuery进行表单验证. 功能:1.必填选项后面添加了红色小星星: 2.选中开始输入时,输入文本框会改变当前背景色,增强用户体验: 3.输入的时候就开始验证,当输入格式正确就会提醒,就是当 ...