Report报表打印
效果展示
业务需求:
打印页面中所选主表数据的报表信息(根据单据号查询出每个单据主表信息和详情表列表信息后打印)
第一步:安装打印机(略)
第二步:安装DesignTool设计器
下载设计器https://pan.baidu.com/s/1sNWC-HBJ5XHSeHUo3YtK1Q
提取码:a1cn
解压后直接打开设计器
该设计器是免安装可以直接打开使用
使用方法可以查看下面文件
我的设计后的模板如下
第三步:添加需要前端文件
文件下载:https://pan.baidu.com/s/18yIE8qvm-qjt7dIE_2woLQ
提取码:x3ic
下载后将文件剪贴到项目webApp下
第四步:编码部分
下载脚本:https://pan.baidu.com/s/1zP1toeiX7NFYKUgKaI0HOg
提取码:l2eu
1.将下载的文件剪贴到你的前端页面文件中
2.在前端页面引入所需脚本文件
<script type="text/javascript" language="JavaScript" src="${ctx}/plugin/myreport/js/swfobject.js"></script>
<script type="text/javascript" language="JavaScript" src="${ctx}/plugin/vmi/markPrintDllInit.js"></script>
<#include "ReportPrint.ftl">
3.获取打印数据并将数据传到后台
<#-- 前端打印按钮-->
<button type="button" class="btn btn-info btn-sm" onclick="reportprint()" >
<i class="glyphicon glyphicon-print"></i> 打印
</button>
<#-- 报表主表信息-->
<table id="pu_Detail_table"></table>
/*
打印报表
*/
function reportprint(){
var data = $('#pu_Detail_table').bootstrapTable('getSelections');
var pantryOrderPrints=JSON.stringify(data);//得到打印接口所需参数(我这里是多表打印,因此参数是所有表的主表信息)
var url = "${ctx}/pantryOrderPrint/previewReportPrint.z";//后台接口
var layerConfirm=layer.confirm('你确定要打印吗?', {
btn: ['确定','取消']
}, function(){
layer.close(layerConfirm);
var layerIndex = layer.load();
$.post(
url,
{ pantryOrderPrints:pantryOrderPrints},
function(result){
if(result!=null){
layer.close(layerIndex);
loadAndPrint3(result['myReportURL'],result['params'],result['table']);
}
},"json"
)
});
}
4.后台接口
/**
* 汇总单打印
*
* @param
* @param
* @return
* @throws Exception
*/
@RequestMapping("/previewReportPrint")
public void PreviewReportPrint(HttpServletResponse resp, HttpServletRequest req, String pantryOrderPrints) throws Exception {
resp.setCharacterEncoding("utf-8");
JSONArray json = JSONArray.fromObject(pantryOrderPrints);
List<PantryOrderPrint> list = JSONArray.toList(json, PantryOrderPrint.class);
Map<String, Object> context = new HashMap<>();
List<Map<String, Object>> paramList = new ArrayList<>();
List<List<Map<String, Object>>> tableLists = new ArrayList<>();
SysUser v_User = WebUtil.getCurrentUser();
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(date);
//每张报表所需数据
for (PantryOrderPrint pantryOrderPrintTemp:list) {
//主表信息
PantryOrderPrint pantryOrderPrint=new PantryOrderPrint();
pantryOrderPrint.setBill(pantryOrderPrintTemp.getBill());
List<PantryOrderPrint> palletOrderList = findPalletOrderList(pantryOrderPrint);
PantryOrderPrint pantryOrderPrint1 = palletOrderList.get(0);
Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("dept_name", pantryOrderPrint1.getDeptName());
paramsMap.put("bill", pantryOrderPrint1.getBill());
paramsMap.put("order_product", pantryOrderPrint1.getOrderProduct());
paramsMap.put("sum",pantryOrderPrint1.getPlanQty());
paramsMap.put("printPerson", v_User.getLogUserName());
paramsMap.put("printTime", dateString);
paramList.add(paramsMap);
//封装表格所需要的详情列表数据
List<PantryOrderPrint> pantryList= vmiPantryOrderPrintService.findPantryOrderPrintList(pantryOrderPrint);
List<Map<String, Object>> tableList = new ArrayList<>();//最外层的list集合
for (PantryOrderPrint pantryOrderPrint2 : pantryList) {
Map<String, Object> tableMap = new HashMap<String, Object>();
tableMap.put("itemCode",pantryOrderPrint2.getItemCode());
tableMap.put("itemName", pantryOrderPrint2.getItemName());
tableMap.put("material", pantryOrderPrint2.getMaterial());
tableMap.put("orderQty", pantryOrderPrint2.getOrderQty());
tableMap.put("wzybkc", pantryOrderPrint2.getWzybkc());
tableMap.put("stockQty", pantryOrderPrint2.getStockQty());
if(Help.isNull(pantryOrderPrint2.getPalletPosition())){
tableMap.put("palletPosition","");
}else{
tableMap.put("palletPosition",pantryOrderPrint2.getPalletPosition());
}
tableList.add(tableMap);
}
tableLists.add(tableList);
}
String params = JSON.toJSONString(paramList);
context.put("params", params);
//设置报表装载的模版*.xml
String myReportURL = null;
//根据用户配置的打印类型设置打印模板
myReportURL = "/VMI/plugin/myreport/template/purchaseReportStyle.xml";
List<String> myReportUrlList = new ArrayList<String>();
myReportUrlList.add(myReportURL);
String url = JSON.toJSONString(myReportUrlList);
context.put("myReportURL", url);
String table = JSON.toJSONString(tableLists);
context.put("table", table);
long time1=System.currentTimeMillis();
JsonUtil.writeJson(resp,context);//往前端传输数据
long time2=System.currentTimeMillis();
System.out.println("往前端传输数据耗时:"+(time2-time1)+"毫秒");
}
public class JsonUtil {
public static void writeJson(HttpServletResponse resp,Object obj) {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out= null;
try {
out = resp.getWriter();
out.write(JSON.toJSONString(obj));
out.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
out.close();
}
}
}