批量打印

编辑
  • 文档创建者:文档助手1
  • 浏览次数:11736次
  • 编辑次数:23次
  • 最近更新:susie 于 2019-06-29
  • 1. 描述

    若您有很多张模板需要打印,而如果一个一个进行打印的话会比较麻烦,希望批量打印出来。

    例如有一张全国销售人员的业绩报表,我传入不同销售人员参数后,批量打印出这些报表。

    2. 批量打印传入的 URL 格式

    批量打印多张报表 URL 格式如:

    reportlets=[{reportlet:'reportname1.cpt',param1:'value1', param2:'value2'},{reportlet:'reportname2.cpt',param3:'value3', param4:'value4}]


    var printurl="http://localhost:8075/webroot/decision/view/report";
    var reportlets ="[{reportlet: 'GettingStarted.cpt', 地区: '华北'}, {reportlet: 'GettingStarted.cpt', 地区: '华东'}]";
    var config = {
    printUrl : printurl,
    isPopUp : true, 
    // 是否弹出设置窗口,true为弹出,false为不弹出
    data :{ 
    reportlets: reportlets // 需要打印的模板列表
    },
    printType : 1, // 打印类型,0为零客户端打印,1为本地打印
    // 以下为本地打印的参数,仅当 printType 为 1 时生效
    printerName : 'Microsoft Print to PDF', // 打印机名
    pageType: 2, // 打印页码类型:0:所有页,1:当前页,2:指定页
    pageIndex: '1-3', // 页码范围。当 pageType 为 2 时有效
    copy: 3, // 打印份数
    };
    FR.doURLPrint(config);

    注:调用打印方法中的第二个参数为 true 表示弹出对话框,为false表示不弹出对话框即静默打印。具体可参考不预览模板直接打印文档。

    注:高版本的 Tomcat 不支持 [] / {}特殊符号,URL 需要使用编码后的 URL,否则无法生效。

    3. 示例

    如需要打印出某个模板所有参数情况对应的结果,如下图,选择希望打印的参数值,点击 doPrint 按钮批量打印出对应的结果。


    3.1 实现思路

    首先通过 JS 获取复选框的值然后拼凑出正确的url,最后调用打印方法,通过 post 方法传参(FR.doURLPrint(printurl,true,{data: {reportlets : paravalue}});)进行批量打印。

    3.2 打印完整代码


    <html>     
    <head>    
    <title>FineReport Demo</title>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <script type="text/javascript" src="/webroot/decision/view/report?op=emb&resource=finereport.js"></script>     
    <link rel="stylesheet" type="text/css" href="/webroot/decision/view/report?op=emb&resource=finereport.css"/>  
    <script type="text/javascript">          
        function doPrint(){     //通过sessionid打印    
            var printurl="http://localhost:8075/webroot/decision/view/report"; 
    var p1=document.report.config1.value;
    var p2=document.report.config2.value;
    var reportlets = FR.cjkEncode("[{reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地区 : " + p1 + "}, {reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地区 : " + p2 + "}]");
    var config = {
    printUrl : printurl,
    isPopUp : true, 
    // 是否弹出设置窗口,true为弹出,false为不弹出
    data :{ 
    reportlets: reportlets // 需要打印的模板列表
    },
    printType : 1, // 打印类型,0为零客户端打印,1为本地打印
    // 以下为本地打印的参数,仅当 printType 为 1 时生效
    printerName : 'Microsoft Print to PDF', // 打印机名
    pageType: 2, // 打印页码类型:0:所有页,1:当前页,2:指定页
    pageIndex: '1-3', // 页码范围。当 pageType 为 2 时有效
    copy: 3, // 打印份数
    };
    FR.doURLPrint(config);
        }
    </script>     
    </head>     
    <body>     
    <form name="report" width="200" height="200">
    <input id="config1" type="checkbox" value="华东" />华东<br>  
    <input id="config2" type="checkbox" value="华北" />华北<br>  
    <input type="button" onClick="doPrint();" value="doPrint"><br>   
    </form>     
    <body>     
    </html>


    代码可查看%FR_HOME%/webapps/webroot/help/page_demo/cusprint_batch.html

    3.3 效果查看

    打开内置服务器,在浏览器中输入http://localhost:8075/webroot/help/page_demo/cusprint_batch.html,选中多个复选框,点击 doprint 按钮,既可以实现批量打印了。

    4. 利用模板实现批量打印效果

    以上方法介绍了批量打印的原理以及利用 HTML 实现批量打印的效果,但是在实际使用中,可能使用的参数比较多,而且可能还不固定,那么使用纯 JS 或纯 HTML 来实现打印就不能满足需求了,我们可以利用 FineReport 数据集强大的展示功能以及上面的 JS 代码结合,完成同样的效果,并且更加适用,以下还是以实现上面的效果来作为示例。

    4.1 新建模板

    新建数据集,ds1,,使用 FRDemo 数据库作为数据源,数据集 ds1为: select 地区 from 销量

    模板设计如下图,将地区字段拖 入 A2 单元格,A4 单元格添加一个打印按钮,命名为打印:


    4.2 设置单元格属性

    选中 A2 单元格,点击右侧高级按钮,给其自定义显示值


    自定义显示内容如下:

    '<input id="config1" type="checkbox" value="'+$$$+'" checked />'+$$$

    注:checked 代表初始化时参数复选框被选中,如果初始化时不需要被选中,去掉此参数即可。

    为了让 A2 显示成复选框样式,需要将其样式设计成用 HTML 显示内容,如下图:



    4.3 打印按钮添加 JS 代码

    选中 A4 按钮控件,为其添加点击事件,如下图:


    JS 代码如下:


    var printurl = "http://localhost:8075/webroot/decision/view/report";
    var p = [];
    //获取当前页面选中的参数值,并将值放入数组中  
    $(":checkbox").each(function() {
    if ($(this).attr("checked") == "checked")
    p.push("{reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地区 : " + $(this).val() + "}");
    })
    if (p.length > 0) {
    //将参数值组成的数组转化为字符串  
    var rp = p.join(",");
    //使用FineReport自带的方法cjkEncode进行转码  
    var reportlets = FR.cjkEncode("[" + rp + "]");
    var config = {
    printUrl: printurl,
    isPopUp: true,
    // 是否弹出设置窗口,true为弹出,false为不弹出
    data: {
    reportlets: reportlets // 需要打印的模板列表
    },
    printType: 1, // 打印类型,0为零客户端打印,1为本地打印
    // 以下为本地打印的参数,仅当 printType 为 1 时生效
    printerName: 'Microsoft Print to PDF', // 打印机名
    pageType: 2, // 打印页码类型:0:所有页,1:当前页,2:指定页
    pageIndex: '1-3', // 页码范围。当 pageType 为 2 时有效
    copy: 3, // 打印份数
    };
    FR.doURLPrint(config);
    } else
    alert("请选择需要打印的参数");

    4.4 填报预览

    保存后进行填报预览,即可看到下图效果,选择需要打印的参数,然后打印,即可完成批量打印效果。



    附件列表


    主题: 报表应用
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]