批量打印,复杂数据结构的批量打印之解决方案
【摘要】 批量打印,复杂数据结构的批量打印问题,这是三年前做鲁山县人社局一个项目时遇到的问题,而这个问题曾深深地困扰了我一周多时间,最终得以解决。三年后的今天重新审视这个问题和解决方案,个人觉得仍有很强的借鉴和参考意义。
批量打印,复杂数据结构的批量打印,这个问题曾深深地困扰着我一周多的时间,最终得以解决!解决方案记录如下:
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)