最近需要使用Lodop打印控件,所以就研究了一下,期间从网上找了诸多的东西,基本全是对HTML进行打印的,没有找到我想要的,就只好自己动手丰衣足食。
这篇文章主要讲述的是Lodop与数据的结合使用,官网和网上能找到的东西本文不在复述,只是记录在使用过程中自己遇到的问题和相应解决方法,本人笔拙,有不足之处希望大家多提意见;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
开发环境:
Myeclipse 10.7 + Oracle11g Windows 10;
主要技术:
Spring MVC + Mybatis + JQuery;
参考文档:Lodop技术手册6.2.1.5;
Lodop相应程序及技术文档请到官网下载:http://www.lodop.net/index.html
对于Lodop有简单了解之后观看本文效果更佳;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
再次声明:本文针对的是Lodop的模板打印,相关基础问题只提到部分,其余自行去官网或者其他渠道获得;
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
需要解决的问题:
一:新增模板并把Lodop生成的模板存到Oracle数据库;
1.1:自主添加模板名称;
1.2:关闭打印设计之后自动返回模板内容代码;
1.4:对返回的数据进行存储;
二::对已创建的模板进行修改(包括打印设计和打印设置),动态从Oracle数据库加载;
2.1:单独修改模板名称;
2.2:动态加载已有模板属性;
三:调用已创建模板,并将数据库查询到的数据进行动态加载;
3.1:参数值传递;
相关问题解决思路:
一:新增模板并保存到数据库:
1.1:新增模板并自定义模板名称
在进行模板新增之前先进行模板名称输入,使用LODOP.PRINT_INIT(modelName); modelName 为自定义变量值进行接收输入的模板名称,然后可以设置一些插件的基本属性
如:LODOP.SET_PRINT_MODE("PROGRAM_CONTENT_BYVAR",true);//生成程序时,内容参数有变量用变量,无变量用具体值
然后进行调用 Lodop 打印设计 LODOP.PRINT_DESIGN(); 方法,即可进行新增模板;
1.2:关闭打印设计之后自动返回模板
在Lodop 打印设计页面有相应生成程序代码按钮
当我们在打印设计页面有内容时点击这个会弹出一个包含这个模板所有内容代码的框
这里面包含:模板名称、内容具体项、内容项的位置、内容项的属性等内容,Lodop原本的做法是将模板保存在安装目录的一个以模板名称命名的.ini文件中,然后现在要做的就是
在打印设计关闭的时候将上面代码返回到后台,然后丢进数据库进行保存起来;
下面先说下数据库结构:printModelName VARCHAR2(20)--模板名称; printModelContent CLOB--模板内容 ; printModelContentField VARCHAR2(500)--模板需传值字段;
在进行数据库存储的时候,我是将内容代码的第一行LODOP.PRINT_INIT(modelName);与其他内容进行了分割,单独提取出了模板名称,这个是为了方便模板的维护,然后模板其他所有内容全
部存在printModelContent 字段中,然后又对内容进行提取,得出这个模板中所有需要进行打印的字段,以“,”分割存进printModelContentField 里面(为什么这么做后面会提到),
然后说下打印设计关闭获得上述代码的方法 (官网案例35):
if (LODOP.CVERSION) {
CLODOP.On_Return=function(TaskID,Value){
var code = Value;
console.log(Value);
LODOP.PRINT_DESIGN();
}
这个Value 就是我们需要的数据,传到后台之后使用.spit();进行两次分割,第一次分割是为了分割出模板名称,所以用的是.spit(";",2); 第二次分割是为了得到模板需要打印的字段名称,
所以用的是.split(";"); 那么至此我们就得出了上述三个我们需要的字段,然后将他们丢进数据库就行了;
二::对已创建的模板进行修改
2.1:维护模板名称
因为上面我们在数据库对模板名称是单独存储的,所以在需要更改模板名称时直接进行printModelName 字段进行Update 就OK了;
2.2:修改已创建模板
首先我们需要先将已经保存的模板加载出来,这里我是依据模板管理表的主键ID来进行调用的,从数据库查出该条记录之后,首先进行加载模板名称,然后将模板剩余内容动态进行拼接到名称
之后,方法如下
var aaa = JSON.parse(data);//----对查询出的数据进行JSON转换
LODOP.PRINT_INIT(aaa[0].printModelName); //----加载模板名称
var datas = aaa[0].printModelContent;//----剩余模板内容
//----对剩余模板内容进行动态拼接
var script = document.createElement('script');
script.type = 'text/javascript';
script.appendChild(document.createTextNode(datas));
document.body.appendChild(script);
然后调用 打印关闭获得程序代码方法,确保我们在进行修改之后修改的内容可以保存到数据库。至此就是对已有模板的修改;
三:调用已创建模板,打印测试
通过以上两步,完成了模板新增、存储、修改,下面就是要进行调用了。
首先,生成的程序代码是LODOP.ADD_PRINT_TEXTA("userName",213,389,100,20,"userName"); 这样的,经过测试发现LODOP.ADD_PRINT_TEXTA("userName",213,389,100,20,obj.userName);
这样的可以动态加载,但是这样肯定是不行的,然后从Lodop官网找到了LODOP.SET_PRINT_STYLEA(varItemNameID, strStyleName,varStyleValue);//----varItemNameID,需要替换的项目名称;
strStyleName,打印风格名称;varStyleValue,需要替换的项目值(与前面项目名称对应),就比如,此时我需要给userName进行赋值,就需要将LODOP.SET_PRINT_STYLEA的属性值写成如下格式:
LODOP.SET_PRINT_STYLEA(“userName”, “CONTENT”,obj.userName);//----注意双引号, obj为数据库查询出的值;那么我们怎么获取需要替换的项目名称呢,此时上面我在进行模板存储的时候分割出
的内容项打印字段就派上用场了,此时对printModelContentField 进行分割, 然后使用for循环进行遍历就可以动态的对模板进行赋值,相应语句为:
var str = aaa[0].printModelContentField.split(",");
for(var i=0;i<str.length;i++){
LODOP.SET_PRINT_STYLEA(str[i],"CONTENT",printObj[str[i]]);
}
此时,我们在进行调用LODOP.PREVIEW();//打印预览 方法,就可以看到我们取到的数据库的值;
以上,就是在下对于Lodop的一点个人的浅显的理解,如有不足之处请多多指教。
如果需要转载请注明出处。