zoukankan      html  css  js  c++  java
  • Web打印的解决方案之证件套打

    由于以前未接触过套打,一直觉得套打是一个比较神秘和麻烦的事情,因为打印机的位置总是需要调整的,你总不能硬编码吧?但是如果位置可调,有需要直观一些来处理,那就比较麻烦了。

    在前面介绍过《Web打印的解决方案之普通报表打印》的一片文章中提到过那个打印控件Lodop,做起套打来感觉还是挺方便的,至少位置调整界面不需要自己弄,位置嘛,也提供了自动保存的功能,不需要理会。

    一般的套打,包含了几部分操作:打印预览、打印维护、打印设计。

    打印预览和打印维护是面向终端用户的,打印维护是指内容不能修改删除、但位置可以调整,给不同的打印机不同的尺寸打印提供调整位置的可能性。

    打印设计是面向开发人员的,开始需要通过这个功能来设计好套打的界面,就是根据套打证件的背景图片,大致摆放好各个内容的位置。

    大致的实现代码如下所示:

    <script language="javascript">
        
    var LODOP=document.getElementById("LODOP");//这行语句是为了符合DTD规范
        CheckLodop();
    </script>
    <script language="javascript" type="text/javascript">   

        
    function Preview2() {        
            CreateDataBill();
              LODOP.PREVIEW();        
        };            
        
    function Setup2() {        
            CreateDataBill();
            LODOP.PRINT_SETUP();        
        };
        
    function Design2() {        
            CreateDataBill();
            LODOP.PRINT_DESIGN();

        };    
        
    function RealPrint() {        
            CreateDataBill();
            
    if (LODOP.PRINTA()) 
               alert(
    "已发出实际打印命令!"); 
            
    else 
               alert(
    "放弃打印!"); 
        };    
        
    function CreateDataBill() {
            LODOP.SET_PRINT_PAPER(
    10,10,762,533,"打印控件功能演示_Lodop功能_移动公司发票套打");
            LODOP.ADD_PRINT_TEXT(
    126,150,100,20,"郭德刚");
            LODOP.SET_PRINT_STYLEA(
    1,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    151,150,100,20,"13954885177");
            LODOP.SET_PRINT_STYLEA(
    2,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    125,584,99,20,"发票打印(第1次)");
            LODOP.SET_PRINT_STYLEA(
    3,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    465,140,198,20,"陆百柒拾捌元叁角零分");
            LODOP.SET_PRINT_STYLEA(
    4,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    465,599,70,20,"678.30");
            LODOP.SET_PRINT_STYLEA(
    5,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    496,408,59,20,"H112063");
            LODOP.SET_PRINT_STYLEA(
    6,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    191,58,100,20,"国内漫游通话");
            LODOP.SET_PRINT_STYLEA(
    7,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    191,217,100,20,"584.00");
            LODOP.SET_PRINT_STYLEA(
    8,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    222,58,100,20,"增值业务费");
            LODOP.SET_PRINT_STYLEA(
    9,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    222,217,100,20,"48.30");
            LODOP.SET_PRINT_STYLEA(
    10,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    251,58,100,20,"代收费");
            LODOP.SET_PRINT_STYLEA(
    11,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    251,217,100,20,"50.00");
            LODOP.SET_PRINT_STYLEA(
    12,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    280,58,100,20,"优惠费");
            LODOP.SET_PRINT_STYLEA(
    13,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    280,217,100,20,"4.00");
            LODOP.SET_PRINT_STYLEA(
    14,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    98,101,150,20,"101081005747319387");
            LODOP.SET_PRINT_STYLEA(
    15,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    97,307,150,20,"2008年10月19日 10:28:38");
            LODOP.SET_PRINT_STYLEA(
    16,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    152,584,103,20,"138860016786");
            LODOP.SET_PRINT_STYLEA(
    17,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    95,571,112,20,"06775516");
            LODOP.SET_PRINT_STYLEA(
    18,"FontName","System");
            LODOP.SET_PRINT_STYLEA(
    18,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    496,135,183,20,"2008年09月(20080901-20080930)");
            LODOP.SET_PRINT_STYLEA(
    19,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    496,572,112,20,"-王府井中心店营");
            LODOP.SET_PRINT_STYLEA(
    20,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    311,217,100,20,"678.30");
            LODOP.SET_PRINT_STYLEA(
    21,"FontColor",16711680);
            LODOP.ADD_PRINT_TEXT(
    311,58,100,20,"费用合计");
            LODOP.SET_PRINT_STYLEA(
    22,"FontColor",16711680);

            LODOP.ADD_PRINT_SETUP_BKIMG(
    "<img src=Report/证件背景.jpg' />");
            LODOP.SET_SHOW_MODE (
    "BKIMG_IN_PREVIEW",1);
    }
    </script> 

     其中大部分内容还是比较好理解的,不同的功能调用不同的函数Preview为预览、Setup为维护、Design为设计。

    在套打的时候,注意需要通过下面代码来设置显示背景图片(打印的时候,是不打印背景的)。

            LODOP.ADD_PRINT_SETUP_BKIMG("<img src=Report/证件背景.jpg' />");
            LODOP.SET_SHOW_MODE ("BKIMG_IN_PREVIEW",1); //打印预览时是否包含背景图

     另外,由于报表的内容都是写在HTML页面中的,因此在动态设置内容的时候,一可以用脚本来读取界面元素作为数据源,二可以通过后台代码自动生成脚本代码,输出到前台页面中,看具体的需要了。

    套打的预览界面大致如下图所示,其中蓝色部分是需要打印的内容,背景图片是一个发票的样板。

    下面代码是通过脚本获取界面元素来取得相应的内容的,这种情况适合于界面上可能会修改一些打印的内容的情景。

            LODOP.ADD_PRINT_TEXT(95, 695, 250, 52, document.getElementById("txtCompanyName").innerText); //业户名称
            LODOP.SET_PRINT_STYLEA(1, "FontSize", 14);
            LODOP.SET_PRINT_STYLEA(1, "Bold", 1);

            var licenseDate = document.getElementById("txtLicenseDate").value;//证件有效期
            var licenseYear = "";
            var licenseMonth = "";
            var licenseDay = "";
            if (licenseDate != null && licenseDate != "") {
                licenseYear = licenseDate.split("-")[0];
                licenseMonth = licenseDate.split("-")[1];
                licenseDay = (licenseDate.split("-")[2]).substr(0, 2);
            }

            LODOP.ADD_PRINT_TEXT(396, 190, 46, 22, validateYear); //有效期 结束 年 
            LODOP.SET_PRINT_STYLEA(6, "FontSize", 11);
            LODOP.SET_PRINT_STYLEA(6, "Bold", 1);
            LODOP.ADD_PRINT_TEXT(396, 253, 30, 22, validateMonth); //有效期 结束 月
            LODOP.SET_PRINT_STYLEA(7, "FontSize", 11);
            LODOP.SET_PRINT_STYLEA(7, "Bold", 1);
            LODOP.ADD_PRINT_TEXT(396, 304, 32, 22, validateDay); //有效期 结束 日
            LODOP.SET_PRINT_STYLEA(8, "FontSize", 11);
            LODOP.SET_PRINT_STYLEA(8, "Bold", 1);

     最后附上它的设计界面,其中生成代码功能可以生成用于静态HTML中的内容布局显示,做一定的修改调整就可以用在动态页面中了。非常有用的一个功能。

     

    主要研究技术:代码生成工具、Visio二次开发
        
        转载请注明出处:
    撰写人:伍华聪  http:
    //www.iqidi.com 
  • 相关阅读:
    vim 配合管道过滤多行记录
    SpringBoot自动配置原理
    SpringBoot零XML配置的Spring Boot Application
    SpringBoot快速开始Hello World
    Java反射机制
    Java网络编程
    Java JDBC
    Java泛型
    Java I/O
    Java集合
  • 原文地址:https://www.cnblogs.com/jcomet/p/1693503.html
Copyright © 2011-2022 走看看