强大的web打印插件--Lodop

最近公司有个项目需要实现记录打印功能,在网上找到了一个很好的打印插件Lodop,它是一个专门针对web页面打印的控件,里面封装了很多的JS API,用户只要根据自己特定的需要调用里面相应的接口,就可以实现各种很复杂的打印的功能,例如记录页面、图片包括复杂的图表等等它都能够帮你实现,在用的过程中,还发现它还能够打印条形码、公章,而且它还能实现将记录导出到一个excel文件当中,无论你的表格多么复杂,它都能帮你实现,而且只需要在前台控制就可以了,实在是非常强大呀!!不过,遗憾的是,它是收费的,收费与不收费的区别是免费版的直接打印出来会在页面左下角显示:本页由试用版打印控件Lodop版本号输出,如果用户先预览后打印不会出现这行文字,不过我在网上查了一个,大家都说它的高级版本收取的费用不是很高,对于企业项目,如果这些内容会有影响的话,就去花点钱买个正版的咯,如果影响不大,那么我们就可以直接用这个免费的控件啦!!详细的API操作接口和Demo实例可以在我的博客里面进行下载:http://download.csdn.net/detail/harderxin/6697249,大家也可以在官网进行下载最新版本的Lodop:http://www.lodop.net/,因为很多实例和相应的JS操作接口在我的资源库那个文件里面都有了,大家应该一看就知道了,下面我就简单的给大家介绍一下常用的操作吧:

这个是我项目中实现的打印页面,连上打印机就可以蒋其中的内容打印出来咯:

下面是我使用这个插件开始将页面数据导出页面:

好了,下面来看看它吧:

环境搭建:

根据相应的操作系统,安装install_lodop32.exe文件,它里面包含两个exe文件install_lodop32.exe和install_lodop64.exe,在页面的头部中引入:

<!-- 打印插件 -->
<script type="text/javascript" src="<%=basePath %>js/LodopFuncs.js"></script>
<object  id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0>  
       <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed> 
</object> 
<!-- 打印end -->

 

当我们在执行操作的时候,它会根据相应的操作系统(32位or64位),选择相应的exe文件,下载安装,这个安装文件比较小,所以安装起来也比较方便。卸载它也很简单,只要复制这个exe文件,然后改名为:uninstall_lodop32.exe,点击运行即可,安装后我们就可以使用里面的JS函数了:

 
PRINT_INIT(strPrintTaskName)打印初始化
SET_PRINT_PAGESIZE(intOrient,intPageWidth,intPageHeight,strPageName)设定纸张大小
ADD_PRINT_HTM(intTop,intLeft,intWidth,intHeight,strHtml)增加超文本项
ADD_PRINT_TEXT(intTop,intLeft,intWidth,intHeight,strContent)增加纯文本项
ADD_PRINT_TABLE(intTop,intLeft,intWidth,intHeight,strHtml)增加表格项
ADD_PRINT_SHAPE(intShapeType,intTop,intLeft,intWidth,intHeight,intLineStyle,intLineWidth,intColor)画图形
SET_PRINT_STYLE(strStyleName, varStyleValue)设置对象风格
PREVIEW打印预览
PRINT直接打印
PRINT_SETUP打印维护
PRINT_DESIGN打印设计

最基本的打印过程至少有初始化语句添内容语句打印语句三部分组成,例如:
LODOP.PRINT_INIT("打印任务名");              //首先一个初始化语句
LODOP.ADD_PRINT_TEXT(0,0,100,20,"文本内容一");
//然后多个ADD语句及SET语句
LODOP.PRINT();                              
//最后一个打印(或预览、维护、设计)语句

结合各种函数,输出用户需要的结果:这里我使用的是我的案例,项目中由于文件内容比较长,也比较宽,所以我需要横向打印,并且需要打印很多页,每页都要有固定标题和页脚,例如第1页/共3页,代码如下:

	var LODOP; //声明为全局变量 
	function preview(){
		CreatePrintPage();
		//打印预览
		LODOP.PREVIEW();
	}

	function setup(){
		CreatePrintPage();
		//LODOP.PRINT_SETUP();
		LODOP.PRINT_DESIGN();//打印设置
	}

	function print(){
		CreatePrintPage();
		LODOP.PRINT();	//打印
	}

	//初始化页面
	function CreatePrintPage(){
		//得到LODOP对象,注意head标签里面需引入object和embed标签
		LODOP=getLodop(document.getElementById('LODOP_OB'),document.getElementById('LODOP_EM'));
		//封装我们的html元素  
		var strBodyStyle="<style>table,td{border:1 solid #000000;border-collapse:collapse}</style>";
                  //获得id为content标签里面的html元素
		var strFormHtml=strBodyStyle+"<body>"+document.getElementById("content").innerHTML+"</body>";
		//打印初始化,页面距离顶部10px,距离左边10px,宽754px,高453px,给打印设置个标题
		LODOP.PRINT_INITA(10,10,754,453,"打印控件操作");
		//设置打印页面属性:2:表示横向打印,0:定义纸张宽度,为0表示无效设置,A4:设置纸张为A4
		LODOP.SET_PRINT_PAGESIZE (2, 0, 0,"A4");
		//设置文本,参数(距离页面头部,距离页面左边距离,文本宽度,文本高度,文本内容)
		LODOP.ADD_PRINT_TEXT(21,300,300,30,"${unitType}${flowval }检修记录\n");
		//给所添加的文本定义样式,0:表示新添加的元素,相应的属性,相应的值
		LODOP.SET_PRINT_STYLEA(0,"FontSize",15);
		LODOP.SET_PRINT_STYLEA(0,"ItemType",1);//固定标题,设置卫页眉页脚
		LODOP.SET_PRINT_STYLEA(0,"Horient",2);
		LODOP.SET_PRINT_STYLEA(0,"Bold",1);
		//同上
		LODOP.ADD_PRINT_TEXT(40,60,350,30,"机车号:${datePlan.jcType } ${datePlan.jcnum }  修程:${datePlan.fixFreque}  检修日期:${datePlan.kcsj }");
		LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
		//添加html元素
		LODOP.ADD_PRINT_HTM(63,38,684,330,strFormHtml);
		LODOP.SET_PRINT_STYLEA(0,"FontSize",15);
		LODOP.SET_PRINT_STYLEA(0,"ItemType",4);
		LODOP.SET_PRINT_STYLEA(0,"Horient",3);
		LODOP.SET_PRINT_STYLEA(0,"Vorient",3);
		//添加一条线,参数(开始短点距离头部距离,开始端点距左边距离,结束端点距头部距离,结束端点距左边距离)
		LODOP.ADD_PRINT_LINE(53,23,52,725,0,1);
		LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
		LODOP.SET_PRINT_STYLEA(0,"Horient",3);
		LODOP.ADD_PRINT_LINE(414,23,413,725,0,1);
		LODOP.SET_PRINT_STYLEA(0,"ItemType",1);
		LODOP.SET_PRINT_STYLEA(0,"Horient",3);
		LODOP.SET_PRINT_STYLEA(0,"Vorient",1);
		//LODOP.ADD_PRINT_TEXT(421,37,144,22,"左下脚的文本小标题");
		//LODOP.SET_PRINT_STYLEA(0,"Vorient",1);
		LODOP.ADD_PRINT_TEXT(421,542,165,22,"第#页/共&页");
		LODOP.SET_PRINT_STYLEA(0,"ItemType",2);
		LODOP.SET_PRINT_STYLEA(0,"Horient",1);
		LODOP.SET_PRINT_STYLEA(0,"Vorient",1);
	}


上面的函数都是自己通过学习它的API联合起来用的,我的注释可能会有些看不懂,希望大家能把API下载下来进行研究,其中它实现了很多功能哦!

1、画一个名片大小的矩形边框:
LODOP.ADD_PRINT_RECT(10,55,360,220,0,1);
边框离纸张顶端10px(px是绝对值长度,等于1/96英寸,下同)距左边55px、宽360px、高220px、
框为实线(0-实线 1-破折线 2-点线 3-点划线 4-双点划线)、线宽为1px
 
2、设置基本打印风格:
LODOP.SET_PRINT_STYLE("FontSize",11);
"FontSize"是系统关键字,表示设置字体大小,11是字体大小值,单位是pt。
 
3、在矩形框内打印姓名栏:
LODOP.ADD_PRINT_TEXT(20,180,100,25,"郭德强");
姓名栏离纸张顶端20px、距左边180px、宽100px、高25px、内容为“郭德强”
 
4、设置姓名栏的打印风格:
LODOP.SET_PRINT_STYLEA(2,"FontName","隶书");
LODOP.SET_PRINT_STYLEA(2,"FontSize",15);
2是姓名栏的增加顺序号,"FontName""FontSize"系统关键字,表示设置字体名和字体大小。
"隶书"是字体名值,同操作系统的字体名,15是字体大小值,单位是pt。
序号设0表示最新对象,注意SET_PRINT_STYLEASET_PRINT_STYLE的区别。
 
5、下面打印其职务、地址、电话等(用基本风格):
LODOP.ADD_PRINT_TEXT(53,187,75,20,"科学家");
LODOP.ADD_PRINT_TEXT(100,131,272,20,"地址:中国北京社会科学院附近东大街西胡同");
LODOP.ADD_PRINT_TEXT(138,132,166,20,"电话:010-88811888");
 
6、在发送以上指令前,一般要初始化并设置打印任务名:
LODOP.PRINT_INIT("打印插件功能演示_代码功能_名片");
初始化并指定打印任务名是"打印插件功能演示_代码功能_名片"

 

利用Lodop实现将页面表格元素导出为excel:

	function SaveAsFile(){ 
		//得到LODOP对象
		var LODOP=getLodop(document.getElementById('LODOP_OB'),document.getElementById('LODOP_EM'));   
		LODOP.PRINT_INIT(""); //初始化,因为不需要打印,所以不需要为其设置标题
		//增加打印表格,(距离头部距离、距离左边、宽度、高度),得到相应表格中的html元素
		LODOP.ADD_PRINT_TABLE(100,20,500,80,document.getElementById("content").innerHTML); 
		//设置相应模式
		LODOP.SET_SAVE_MODE("Orientation",1); //Excel文件的页面设置:横向打印   1-纵向,2-横向;
		LODOP.SET_SAVE_MODE("LINESTYLE",1);//导出后的Excel是否有边框
		LODOP.SET_SAVE_MODE("CAPTION","行安检修记录");//标题栏文本内容
		//LODOP.SET_SAVE_MODE("CENTERHEADER","行安检修记录");//页眉内容
		//LODOP.SET_SAVE_MODE("PaperSize",9);  //Excel文件的页面设置:纸张大小   9-对应A4
		//LODOP.SET_SAVE_MODE("Zoom",90);       //Excel文件的页面设置:缩放比例
		//LODOP.SET_SAVE_MODE("CenterHorizontally",true);//Excel文件的页面设置:页面水平居中
		//LODOP.SET_SAVE_MODE("CenterVertically",true); //Excel文件的页面设置:页面垂直居中
		//LODOP.SET_SAVE_MODE("QUICK_SAVE",true);//快速生成(无表格样式,数据量较大时或许用到) 
		//保存文件,以窗口弹出对话框的方式,让用户去选择文件保存的位置,参数为文件保存的默认名称
		LODOP.SAVE_TO_FILE("${datePlan.jcType }-${datePlan.jcnum }-${unitType}检修记录.xls"); 
	};	


这里本人所列出来的两个demo只是本人在项目中所用的,对其综合应用了,其实它里面有很多方法可以供我们去操作,实现各种各样的功能,我们只需要设置其中的参数,给打印页面各个元素定好位置,距离头部距离、距离左边距离、垂直或者水平摆放、居左还是居中对齐等等,我们都可以在里面进行相应的设置,自己把各个元素定位好,我相信它肯定能实现我们打印时所想要的效果!!

俗话说,说一百遍看一万遍,不如自己来写一遍,大家尝试着去研究一下吧!!

控件功能强大,却简单易用,所有调用如同JavaScript扩展语句, 主要接口函数如下: PRINT_INIT 打印初始化 SET_PRINT_PAGESIZE 设定纸张大小 ADD_PRINT_HTM 增加超文本项 ADD_PRINT_TEXT 增加纯文本项 ADD_PRINT_TABLE 增加表格项 ADD_PRINT_SHAPE 画图形 SET_PRINT_STYLE 设置对象风格 PREVIEW 打印预览 PRINT 直接打印 PRINT_SETUP 打印维护 PRINT_DESIGN 打印设计 ... 样例清单 1.如何在页面内嵌入控件见样例一 2.如何选材打印当前页面内容见样例二 3.如何用代码生成打印页见样例三 4.如何打印设计和定位套打见样例四 5.如何控制纸张大小和连续打印见样例五 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10.如何控制打印样式(STYLE)见样例十 11.如何直接打印条形码见样例十一 12.如何读写本地文件见样例十二 13.如何打印旋转内容见样例十三 14.如何按URL打印见样例十四 15.如何打印表格的页头页尾见样例十五 16.如何设置预览窗口大小见样例十六 17.如何发打印机指令或直接读写端口见样例十七 18.如何打印幅面高度不固定的票据见样例十八 19.如何内嵌显示及预览时包含背景图见样例十九 20.如何强制分页并预览多页卡片见样例二十 21.如何控制打印维护的功能权限见样例二十一 22.如何构建自己的纯WEB打印预览见样例二十二 23.如何居中打印超文本见样例二十三 24.如何选择界面皮肤见样例二十四 25.如何指定输出到哪页或仅预览见样例二十五 26.如何提高多页打印的性能见样例二十六 27.如何导出数据到Excel文件见样例二十七 28.如何快速读取客户端系统信息见样例二十八 29.如何使用其它长度单位见样例二十九 30.如何分页输出页面内容见样例三十 31.如何打印表格的分页小计或合计见样例三十一 32.如何实现清晰的图表打印见样例三十二 33.如何实现甘特图等的图表打印见样例三十三 34.如何使用百分比%和满页打印见样例三十四 35.如何获得打印结果和程序代码见样例三十五 36.如何在设计过程中用js编辑内容见样例三十六 37.如何打印公章效果图见样例三十七 38.如何用BASE64编码输出图片见样例三十八 39.如何打印田字格、上划线等文本见样例三十九 40.如何进行数据格式转换见样例四十 41.如何把内容关联后按顺序打印见样例四十一 42.如何把整页内容缩放打印见样例四十二 43.如何分页打印综合表格见样例四十三 44.如何缩放打印单个超文本内容见样例四十四 45.如何获得打印状态及最终结果见样例四十五 46.如何设置右边距和下边距见样例四十六
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值