web打印,使用lodop实现打印和导出emf图以及生成word。

本文介绍如何使用Lodop打印控件生成报表和Word文档,包括环境搭建、HTML与JS集成步骤,以及通过实例展示如何设置打印样式和页面尺寸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天需要打印一些报表和生成对应的word

网上也有不少工具,帆软,lodop等许多中间件。

但是帆软收费,所以就选择了lodop。

使用lodop就要先安装他的环境。

去官网下载zip

附上官网的下载链接

http://www.lodop.net/

直接下载就行

下载之后解压到一个文件夹(最好新建一个)

然后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">报销日期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;年&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;月&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日</td>
        <td style="border: 1px black solid;background-color: white;height: 20px;width: 100px" colspan="2"class="a">附件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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">&nbsp;&nbsp;&nbsp;合&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;计&nbsp;&nbsp;&nbsp;&nbsp;</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">核实金额(大写)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;佰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拾&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;万&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;仟&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;佰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拾&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;元&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;角&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值