一、问题描述:
利用ireport+jasperreport做报表,并导出为html格式的文件,用IE浏览器在网页上用WB.ExecWB控件打印该html格式的报表时,报表的内容虽然是已经分页了,不过打印出来的报表并未进行分页,出现了一页纸上不止有一页报表表格(比如说第一页纸上,除了报表内容中的第一个表格外,还有第二个表格的一部分)。
二、问题分析:
通过分析jasperreport生成的html文件,发现jasperreport是根据
name="JR_PAGE_ANCHOR_*_*">
(*表示数字)进行分页的。如下图红色方框中的代码:而用WB.ExecWB控件打印文件时,是根据
三、解决方案:
根据对该问题的分析,很明显可以看出,要让WB.ExecWB控件在打印时进行合理地分页,我们必须在需要分页的地方添加分页标签,进行强制分页。
我的解决方法是在jasperreport生成html文件时,在html文件中插入分页标签
style="page-break-after: always">。
此时,最直接的方法就是修改jasperreport生成html文件的源代码。打开jasperreport中生成html文件的类net.sf.jasperreports.engine.export.JRHtmlExporter,找到exportReportToWriter()方法,并添加响应插入分页标签的代码,如下图:
其中,蓝色方框中的
***>
标签是jasperreport自身进行分页的标签。***>
标签,仅仅是为了调整页面上报表的位置。
添加这几行代码,重新build一下后,将新的jar文件导进项目中,搞定!
(至于源代码下载、部署、编译,这里就不赘述了。)
该解决方案比较粗糙,如有其它想法或建议,各位高手,请不吝赐教。
四、扩展:
该解决方案只是针对WB.ExecWB组件,因为不同组件对于HTML文件分页打印的分页标签是有差别的。不过都是一样的原理,只要修改源代码中相应的标签便可适应不同的组件。如果需要方便日后改变组件能识别的分页标签,可以把这部分信息写在配置文件中,日后修改起来就不用每次都区编译源码了,这会比较方便使用。