1. 概述
1.1 应用场景
用户系统中使用 iframe 嵌入报表,浏览器端预览看到的样式跟实际打印出来的样式不一致。例如:
用户系统显示报表的 iframe 大小固定,无法完全显示 A4 纸张大小的模板,因此在显示报表的时候进行了分页处理,如每页显示 10 条数据。
如果直接将这个显示结果打印到 A4 纸上,每页纸上只显示 10 条数据,下面全是空白的,不美观并且浪费纸张,所以希望打印的时候按正常页面打印。
1.2 解决思路
解决方案:做两张模板,一张对应查看的模板,另一张对应打印的模板。
进行打印时,通过 JS 调用 FR 的打印方法,将第二张模板打印出来即可。
2. 示例
例如以下 HTML 文件的代码,其中触发打印的代码里的模板跟 iframe 嵌入代码里的模板不一样,也就是做了两个,展示是一个,打印是一个,互不影响。
<html>
<head>
<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 doFRPrint(){ //点击打印时触发
var reportURL="/webroot/decision/view/report?reportlet=report_print.cpt"; //打印模板路径,与BS查看的效果不同
FR.doURLFlashPrint(reportURL); //调用FR打印方法
}
</script>
</head>
<body>
<div id="toolbar">
<button type="button" onclick=doFRPrint()>打印</button>
</div>
<iframe id="reportFrame" src="/webroot/decision/view/report?reportlet=report.cpt&__showtoolbar__=false" width=100% height=80%></iframe>
</body>
</html>
注1:这个代码只是示例,可以改下里面的模板路径,保存为HTML文件使用。
注2:移动端不支持各种打印和导出方式。