浏览的的打印功能目前只有chrome做的最好,会生成a4纸大小的打印预览,而火狐会将打印预览变成电脑屏幕的100%;
所以最好用chrome来实现
使用场景:我的页面是基于table做的,如下图,需要两个功能 1.导出excel 2.直接点击打印按钮,要求可以调用浏览器的打印功能。
由于页面比较复杂,使用java后台生成表格需要配置的东西过多,比较麻烦,所以我就想到了用html页面直接生成excel,简单实用
关于java后台方法对excel的读取和导出请看 https://blog.csdn.net/lianzhang861/article/details/83092835,后台方法适合一些格式统一的表格,如后台管理系统中的用户列表啥的,复杂的页面建议使用下述前端方法实现
点击打印按钮,生成的打印预览
点击导出excel,生成的excel
实现方法:
1.html 由于最后要导出excel,excel对html中的table支持很好,且excel支持大部分的css,所以建议直接将要导出的页面用table标签来写,下面是我的例子
<%@include file="/common/jsp/meta.jsp" %>
.page-container{
width:800px;margin:0 auto;
padding:30px;
}
#printContent{
margin-top:20px;
}
table{
border-collapse: collapse;
width:100%;
}
table td{
font-size:14px;padding:10px;
}
.punishTable tfoot td{
font-size:16px;font-weight:bold;
}
.punishTable td{
text-align: center;
border:1px solid #666;align:center;
font-size:14px;height:60px;
}
@page{
size:210mm 290 mm;
margin:0mm auto;
}
<%----%>
${assessPunish.regionGroupName}考核扣罚表 |
|||||
依照【移集团 合同[${assessPunish.CONTRACT_NO}] 号】《合同名称》 | |||||
现由地市业务支撑中心对维修公司服务的移动公司营业设备配件维修工作进行认定,考核扣罚结果如下: |
|||||
地市:${assessPunish.regionGroupName} |
维修时间段:${assessPunish.REPAIR_DATE} |
认定大项 | 描述 | 单位 | 数量 | 单价 | 小计 |
合计扣罚(不含增值税) |
${assessPunish.TOTAL} |
业务支撑中心主管签字: |
维修公司主管签字: |
||||
业务支撑中心经理签字: |
维修公司分管经理签字: |
注意:因为打印和导出表格都是要展示页面主题内容,而一般页面上还有导航栏,按钮啥的,所以要将没用的元素剔除,只留需要打印的内容 在元素 .printContent中
看下面就知道是将 printContent中的内容重新生成一个html,所以其css需要写在printContent中,否则新页面将没有样式
另外打印预览时会自动出现页眉页脚,不需要的话加一段css就可以解决
@page{
size:210mm 290 mm;
margin:0mm auto;
}
2.调用浏览器打印接口js
//按打印按钮调用浏览器打印接口
function printout() {
// debugger;
var newWindow;
//打开一个新的窗口
newWindow = window.open();
// 是新窗口获得焦点
newWindow.focus();
//保存写入内容
var newContent = "
newContent += document.getElementById("printContent").outerHTML;
newContent += ""
// 将HTML代码写入新窗口中
newWindow.document.write(newContent);
newWindow.print();
// close layout stream
newWindow.document.close();
//关闭打开的临时窗口
newWindow.close();
return false;
};
原理就是用window.print()将制定去内容渲染到一个新窗口
3.导出Excel 的 js
// 使用outerHTML属性获取整个table元素的HTML代码(包括
会签单 | ||||||
流转 | 会议 | |||||
名称 | 自动获取 | 编号 | 自动获取 | |||
主持 | 自动获取 | 类型 | 自动获取 | |||
人 | 自动获取 | 日期 | 自动获取 | |||
内容 | 自动获取 | |||||
备注 | 自动获取 | |||||
意见 | ||||||
序号 | 人 | 部门 | 意见 | 时间 | 节点 | 状态 |
1 | 顾 | 办公室 | 同意! | 2018/5/14 15:21 | 已提交 |
// 使用outerHTML属性获取整个table元素的HTML代码(包括