这两天需要打印一些报表和生成对应的word
网上也有不少工具,帆软,lodop等许多中间件。
但是帆软收费,所以就选择了lodop。
使用lodop就要先安装他的环境。
去官网下载zip
附上官网的下载链接
直接下载就行
下载之后解压到一个文件夹(最好新建一个)
然后32和64位看着安装就行,
然后再安装2的CLODOP,全是傻瓜式安装,安装完自动启动。
然后去官网看是否安装成功
进入在线样例,然后往下滑,找到样例清单,点击样例一
点击查看本机是否安装web打印服务,如果出现这个弹框就可以了
没出现的会有提示根据提示操作就行,一般没什么问题。
这样准备工作就做完了,当然,现在就可以看着他的样例进行操作了,毕竟是国语,所以按F12去看js也应该能看懂,简单粗暴。
根据说明
需要在html或者jsp中引入这些东西
<script type="text/javascript" language="javascript" src="你的路径/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>
LodopFuncs.js就是你下载压缩包的js
实例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>表格</title>
<script type="text/javascript" language="javascript" src="/static/js/ftl/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>
<style>
body{
width: 940px;
height:380px;
border:2px dimgray solid
}
table{
width: 800px;
height: 300px;
text-align: center;
/* 表边框合并 两个单元格之间的边框进行合并 */
border-collapse: collapse;
margin: 0 auto;
}
table td, th{
border:1px black solid;
background-color: white;
height:20px;
width: 100px;
}
.a{
border:none;
text-align: right;
}
.b{
text-align: left;
padding-left: 10px;
}
.c{
text-align:center
}
.d{
border:none;
text-align: center;
padding-top:5px ;
}
</style>
</head>
<body>
<h2>演示如何打印当前页面的内容:</h2>
<input type="button" value="打印预览" onclick="prn1_preview()">
<input type="button" value="直接打印" onclick="prn1_print()">
<input type="button" value="选择打印机" onclick="prn1_printA()">
<!-- 将要打印的内容通过div赋值-->
<div id="printDiv">
Lodop打印测试Lodop打印测试
</div>
width: 940px;
height:380px;
border:2px dimgray solid
<div id="d1" style="width: 940px;height: 380px;border: 2px dimgrey solid">
<table style="width: 800px;height: 300px;text-align: center;border-collapse: collapse;margin: 0 auto;">
<caption>
<h2>费用报销单</h2>
</caption>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="4" class="a">报销日期 年 月 日</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"class="a">附件 张 </td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1">报销项目</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2">摘要</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1">金额</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" rowspan="2">负责人(签章)</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" rowspan="2"> </td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" class="c" rowspan="2">审查意见</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" rowspan="2"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" rowspan="2">报销人(签章)</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" rowspan="2"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="1"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="4"> 合 计 </td>
<#--<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px"></td>-->
<#--<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px"></td>-->
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px;text-align: left;padding-left: 10px" class="b">¥</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px;text-align: left;padding-left: 10px"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" class="c" colspan="6">核实金额(大写) 佰 拾 万 仟 佰 拾 元 角 分 </td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px">借款额</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px">应退金额</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px"></td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px">应补金额</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px"></td>
</tr>
<tr>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px;border: none;text-align: center;padding-top: 5px" colspan="2" class="d">会计主管:</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px;border: none;text-align: center;padding-top: 5px" colspan="2" class="d">审核:</td>
<td style="border: 1px black solid;background-color: white;height: 20px;width: 100px;border: none;text-align: center;padding-top: 5px" colspan="2" class="d">出纳:</td>
</table>
</div>
</body>
<script>
var LODOP=document.getElementById("LODOP_OB");
//打印预览
function prn1_preview() {
CreateOneFormPage();
LODOP.PREVIEW();
}
//直接打印
function prn1_print() {
CreateOneFormPage();
LODOP.PRINT();
}
//选择打印机
function prn1_printA() {
CreateOneFormPage();
LODOP.PRINTA();
}
function CreateOneFormPage(){
LODOP=getLodop(document.getElementById('LODOP_OB'),document.getElementById('LODOP_EM'));
LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_表单一");
LODOP.SET_PRINT_STYLE("FontSize",18);
LODOP.SET_PRINT_STYLE("Bold",1);
LODOP.SET_PRINT_PAGESIZE(2, 0, 0,"A4");
//LODOP.SET_SHOW_MODE("LANDSCAPE_DEFROTATED",1)//横向时的正向显示
//参数100表示距离左侧100px;88表示距离顶部88px
LODOP.ADD_PRINT_HTM(0,0,'80%','80%',document.getElementById("d1").innerHTML);
}
</script>
</html>
引入你下载的js后启动就是这样
点击打印浏览,因为我在
LODOP.SET_PRINT_PAGESIZE(2, 0, 0,"A4");
类型是2所以是横板A4
当然拉,你也可以直接打印,也就是后面两个按钮。
最后执行什么都跟LODOP.PREVIEW();LODOP.PRINT();LODOP.PRINTA();最后的这几个函数有关。
如果要打印设计就是这个 LODOP.PRINT_DESIGN();
上面是一个报销单的实例,你可以修改<table>标签从后台传值就可以实现动态效果,LODOP的api就不一一介绍了,文档和样例里比较多还有图文并茂。
//保存为emf图片
function SaveAsEmfFile(str){
LODOP.PRINT_INIT("");
LODOP.SET_PRINT_PAGESIZE(2,'7cm','10cm','');
LODOP.ADD_PRINT_HTM(0,0,"100%","100%",str);
LODOP.SET_SAVE_MODE("SAVEAS_IMGFILE_EXENAME",".emf");
LODOP.SAVE_TO_FILE("新的矢量图片文件.emf");
};
//写入到word
//参数
//intWriteMode:编码
//strFilename:文件全路径(D:\\test.doc)
//strText:数据体,就是上面那个html中的table那种
function writefile(intWriteMode,strFilename,strText) {
if (LODOP.CVERSION) CLODOP.On_Return=function(TaskID,Value){alert(Value);};
var strResult=LODOP.WRITE_FILE_TEXT(intWriteMode,strFilename,strText);
if (!LODOP.CVERSION){if (strResult=="ok") alert("写入成功!");else alert(strResult);};
};
他的文档也比较详细,就在下载zip的下面。
就比如SET_PRINT_PAGESIZE();
文档中除了介绍还有例子。
如果要使用LODOP.SET_PRINT_PAGESIZE(2, 0, 0,"A4");函数
就不能在这个函数中设置宽高LODOP.PRINT_INIT("打印控件功能演示_Lodop功能_表单一");
名称:设定纸张大小
格式:SET_PRINT_PAGESIZE(intOrient, PageWidth,PageHeight,strPageName)
功能:设定打印纸张为固定纸张或自适应内容高,并设定相关大小值或纸张名及打印方向。
参数:
intOrient:
打印方向及纸张类型,数字型,
1---纵(正)向打印,固定纸张;
2---横向打印,固定纸张;
3---纵(正)向打印,宽度固定,高度按打印内容的高度自适应;
0(或其它)----打印方向由操作者自行选择或按打印机缺省设置;
PageWidth:
设定自定义纸张宽度,整数或字符型,整数时缺省长度单位为0.1mm, 譬如该参数值为45,则表示4.5毫米。字符型时可包含单位名:in(英寸)、cm(厘米) 、mm(毫米) 、pt(磅),如“10mm”表示10毫米。数值等于0时本参数无效。
PageHeight:
固定纸张时设定纸张高;高度自适应时设定纸张底边的空白高。整数或字符型,整数时缺省长度单位为0.1毫米。字符型时可包含单位名:in(英寸)、cm(厘米) 、mm(毫米) 、pt(磅),如“10mm”表示10毫米。数值等于0时本参数无效。
宽或高无效时下面的strPageName才起作用。
strPageName:
所选纸张类型名,字符型。不同打印机所支持的纸张可能不一样,这里的名称同操作系统内打印机属性中的纸张名称,支持操作系统内的自定义纸张。
关键字“CreateCustomPage”会按以上宽度和高度自动建立一个自定义纸张,所建立的纸张名固定为“LodopCustomPage”,多次建立则刷新该纸张的大小值。
注:PageWidth、PageHeight 和strPageName都无效时,本函数对纸张大小不起作用,控件则采用所选打印机的默认纸张,但intOrient仍可起作用。
实际打印时,控件按如下优先级顺序确定纸张大小:
第1优先是打印维护里纸张属性(“本机自行定义纸张”)设置的纸张大小。
第2优先是SET_PRINT_PAGESIZE指定的纸张大小;
第3优先是上次打印时在预览界面设置里选择的纸张类型;
第4是按所选打印机的默认纸张;
结果:无
建议或要求:
打印初始化之后调用。
如果打印纸张不固定,希望由操作者自主选择纸张时,则不要调用本函数。
举例一:LODOP.SET_PRINT_PAGESIZE(1,2100,2970,"");
设置纸张大小为:宽210mm*高297mm,纵向打印
举例二:LODOP.SET_PRINT_PAGESIZE(2, 0, 0,"A4");
设置纸张为A4(按操作系统定义的A4尺寸),横向打印
刚用一两天,还是有很多不足,草草实现了业务功能,但并不美观。lodop的功能挺强大,但是需要慢慢去看。
同时也附上lodop的环境zip和技术文档
Lodop6.226_Clodop3.083
链接:https://pan.baidu.com/s/1KRxPePShjRoVEUa10LZQQQ
提取码:o5uf
CLodop_Setup_for_Win32NT
链接:https://pan.baidu.com/s/1OKpmlupPujc4jxDMdl_NhA
提取码:0c6j
lodop技术文档
链接:https://pan.baidu.com/s/1bPom8_Si56T0EpaHOqIUqg
提取码:c5kk