批量打印,复杂数据结构的批量打印之解决方案

举报
幸福科技 发表于 2022/07/20 22:41:10 2022/07/20
【摘要】 批量打印,复杂数据结构的批量打印问题,这是三年前做鲁山县人社局一个项目时遇到的问题,而这个问题曾深深地困扰了我一周多时间,最终得以解决。三年后的今天重新审视这个问题和解决方案,个人觉得仍有很强的借鉴和参考意义。

批量打印,复杂数据结构的批量打印,这个问题曾深深地困扰着我一周多的时间,最终得以解决!解决方案记录如下:

1.window setTimeout异步调用函数[异步get+ Window.print()];

<script>
    //全选/全不选功能
    $(document).on("click",".all_ckx",function () {
        if ($(this).is(":checked")) {
            $("[name=family_id]:checkbox").prop("checked", true);
        } else {
            $("[name=family_id]:checkbox").prop("checked", false);
        }});
    //批量打印功能按钮    获取到每个选中的复选框的值,用get同步请求拿回页面内容存入隐藏的div后,用该div的内容替换掉body中的所有内容进行打印,打印之后再换回原内容
    $("#print").click(function(){
        setTimeout(()=>{
            //获取每个已选中的复选框的值并调用get同步请求回页面数据后,追加到隐藏的div中
            $("input[name='family_id']:checked").each(function(){
            var family_id = $(this).val();
            var n=family_id.indexOf('&');
            var bid = family_id.substring(0,n);
            var type = family_id.substring(n+1);
            $.ajax({
                    async:false,
                    type:'get',
                    url:'{:url('index/Persondata/createprint')}',
                data:{
                    bid:bid,
                    type:type,
                    bill_jump:1
            },
            success:function(data){
                $("#js_print_content").append('<div style="page-break-after:always;">'+data+'</div>');
            }});
        });
        //获取隐藏div中的内容
        var newstr = $("#js_print_content").html();
        //用隐藏的div中的内容替换掉当前页面上的内容
        var oldstr = $("body").prop("outerHTML");
        $("body").html(newstr);
        setTimeout(()=>{
            //调用打印功能
            window.print();
        //返回之前的内容页面
        location.reload();
        //清空隐藏的div中的内容
        $("#js_print_content").html("");
    });
    });
    });

    function printpage() {
        var lodopprint=$("#lodopprint");
//        LODOP.print();

        LODOP=getLodop();
        LODOP.PRINT_INIT("");
        AddPrintContent(lodopprint);
        LODOP.PRINT();
    }
</script>

2.复杂数据结构采用hereDoc语法结构,function回调函数data回调;

 public  function createprint( ){
        $param=input('get.');
        if($param){
            $membermodel=new Members();
            $areamodel=new Area();
            $family_id=$param['type'];
            $family=model('Family')->where('family_id',$family_id)->find();
            $area_id=$family['area_id'];
            $cunarea=$areamodel->where('id',$area_id)->field('area,pid')->find();
            $village=$cunarea['area'];
            $town=$areamodel->where('id',$cunarea['pid'])->value('area');
            $host =  $membermodel->where('id', $family['host'])->value('fullname');
            $members=$membermodel->where('family_id',$family_id)->select();
            $members=collection($members);
            foreach ($members as $key=>$v){
                $members[$key]['outOfPoverty'] = $area_id=$family['outOfPoverty'];
                $members[$key]['year'] = $area_id=$family['year'];
            }
            $memberstring='';
            foreach ($members as $v){
                $memberstring.=  '<tr><td>'.$v['fullname'].'</td><td>'.$v['sex'].'</td><td>'.$v['identity'].'</td><td>'.$v['relation'].'</td><td>'.$v['outOfPoverty'].'</td><td>'.$v['year'].'</td></tr>';
            }
            $education=model('education')->where('family_id',$family_id)->select();
            if(!empty($education)) {
                foreach ($education as $key => $v){
                    $education[$key]['fullname']=$membermodel->where('id',$education[$key]['member_id'])->value('fullname');
                }
            }
            $edustring='';
            if(!empty($education)){
                foreach ($education as $v){
                    $edustring.=  '<tr><td>'.$v['fullname'].'</td><td>'.$v['specialities'].'</td><td>'.$v['study_year'].'</td><td>'.$v['school'].'</td><td>'.$v['subsidy'].'</td><td>'.$v['money'].'</td></tr>';
                }
            }else{
                $edustring.=  '<tr><td colspan="6">没有数据</td></tr>';
            }
            $job=model('job')->where('family_id',$family_id)->select();
            if(!empty($job)) {
                foreach ($job as $key => $v) {
                    $job[$key]['fullname'] = $membermodel->where('id', $job[$key]['member_id'])->value('fullname');
                }
            }
            $jobstring='';
            if(!empty($job)){
                foreach ($job as $v){
                    $jobstring.=  '<tr><td>'.$v['fullname'].'</td><td>'.$v['jytj'].'</td><td>'.$v['wgdy'].'</td><td>'.$v['unit'].'</td><td>'.$v['remark'].'</td></tr>';
                }
            }else{
                $jobstring.=  '<tr><td colspan="6">没有数据</td></tr>';
            }
            $insure=model('insure')->where('family_id',$family_id)->select();
            if(!empty($insure)){
                foreach ($insure as $key => $v){
                    $insure[$key]['fullname']=$membermodel->where('id',$insure[$key]['member_id'])->value('fullname');
                }
            }
            $insurestring='';
            if(!empty($insure)){
                foreach ($insure as $v){
                    $insurestring.=  '<tr><td>'.$v['fullname'].'</td><td>'.$v['birthday'].'</td><td>'.$v['sfycj'].'</td><td>'.$v['sfcj'].'</td><td>'.$v['sfyxs'].'</td><td>'.$v['sfxs'].'</td><td>'.$v['money'].'</td><td>'.$v['remark'].'</td></tr>';
                }
            }else{
                $insurestring.=  '<tr><td colspan="8">没有数据</td></tr>';
            }
            $pxjymd=model('pxjymd')->where('family_id',$family_id)->select();
            if(!empty($pxjymd)){
                foreach ($pxjymd as $key => $v){
                    $pxjymd[$key]['fullname']=$membermodel->where('id',$pxjymd[$key]['member_id'])->value('fullname');
                }
            }
            $pxjymdstring='';
            if(!empty($pxjymd)){
                foreach ($pxjymd as $v){
                    $pxjymdstring.=  '<tr><td>'.$v['fullname'].'</td><td>'.$v['birthday'].'</td><td>'.$v['pxyy'].'</td><td>'.$v['jyyy'].'</td><td>'.$v['remark'].'</td></tr>';
                }
            }
            else{
                $pxjymdstring.=  '<tr><td colspan="6">没有数据</td></tr>';
            }
            $print_content=<<<EOF
               <h4 style="text-align: center; font-weight: 600">2019年平顶山市鲁山县人社系统扶贫政策落实卡</h4>
                        <ul style="width: 100%;height: 20px;">
                            <li style="width:20%;height: 30px;float: left;">乡镇:{$town}</li>
                            <li style="width:25%;height: 30px;float: left;">行政村:{$village}</li>
                            <li style="width:20%;height: 30px;float: left;">户主姓名:{$host}</li>
                            <li style="width:35%;height: 30px;float: left;">户编号:{$family_id}</li>
                        </ul>
                        <h5 style="padding-left: 6%; font-weight: 600">
                            <span class="glyphicon glyphicon-th-list success" aria-hidden="true"></span>
                            贫困家庭成员基本情况
                        </h5>
                        <table style="width: 90%;margin:auto;">
                            <tr>
                                <th>姓名</th>
                                <th>性别</th>
                                <th>公民身份证号</th>
                                <th>与户主关系</th>
                                <th>脱贫属性</th>
                                <th>脱贫年份</th>
                            </tr>
                            $memberstring
                      </table>  
                        <h5 style="padding-left: 6%;margin-top: 20px; font-weight: 600">
                                <span class="glyphicon glyphicon-th-list success" aria-hidden="true"></span>
                                贫困家庭成员参加人社部门培训情况
                            </h5>
                            <table style="width: 90%;margin:auto;">
                                <tr>
                                    <th>姓名</th>
                                    <th>培训专业</th>
                                    <th>培训年份</th>
                                    <th>培训机构</th>
                                    <th>培训期间是否应享受生活补贴</th>
                                    <th>备注</th>
                                </tr>
                                $edustring
                            </table>
                            <h5 style="padding-left: 6%;margin-top: 20px; font-weight: 600">
                                <span class="glyphicon glyphicon-th-list success" aria-hidden="true"></span>
                                贫困家庭劳动力转移就业情况
                            </h5>
                            <table style="width: 90%;margin:auto;">
                                <tr>
                                    <th width="120">姓名</th>
                                    <th width="100">就业途径</th>
                                    <th width="100">务工地域</th>
                                    <th width="150">务工地点或单位</th>
                                    <th>备注</th>
                                </tr>
                                $jobstring
                            </table>
                            <h5 style="padding-left: 6%;margin-top: 20px; font-weight: 600">
                                <span class="glyphicon glyphicon-th-list success" aria-hidden="true"></span>
                                贫困家庭成员参加城乡居民养老保险情况
                            </h5>
                            <table style="width: 90%;margin:auto;">
                                <tr>
                                    <th width="120" style="display:table-cell; vertical-align:middle">姓名</th>
                                    <th width="100" style="display:table-cell; vertical-align:middle">出生年月</th>
                                    <th width="50">是否<br>应参</th>
                                    <th width="50">是否<br>已参</th>
                                    <th width="50">是否<br>应享受</th>
                                    <th width="50">是否<br>已享受</th>
                                    <th width="50">每月发<br>放金额</th>
                                    <th>备 注</th>
                                </tr>
                                $insurestring
                            </table>
                            <h5 style="padding-left: 6%;margin-top: 20px; font-weight: 600">
                                <span class="glyphicon glyphicon-th-list success" aria-hidden="true"></span>
                                未就业贫困劳动力技能培训和就业摸底情况
                            </h5>
                            <table style="width: 90%;margin:auto;">
                                <tr>
                                    <th width="120">姓名</th>
                                    <th width="100">出生年月</th>
                                    <th width="125">是否有培训意愿<br>且符合受训条件</th>
                                    <th width="125">是否有就业意<br>愿和就业条件</th>
                                    <th>备 注</th>
                                </tr>
                                $pxjymdstring
                            </table>
    </table>
EOF;
            return $print_content;
        }
    }

3.jquery清空打印容器,回调数据循环填充打印!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。