目标:表示合并了一些单元格的表格,因此可以使用JasperReports(Java代码,而不是JasperStudio)以PDF和HTML格式正确呈现。
问题:当我们在Internet Explorer中打开创建的HTML文件时,元素的位置不正确。
更多信息:每一行都放在Jasper设计的详细信息部分中的一个波段(JRDesignBand)内。在这两个波段中,我们有不同宽度的文本字段(JRDesignTextField)。 以下是它在PDF中的显示方式(第一个乐队中的项目前面带有“R”,第二个带中带有“N”的项目): 一切都按照需要呈现。但是,以下情况发生在HTML中(仅在Internet Explorer中): 正如我们所看到的,文本字段不再出现在正确的位置,它们似乎在表格之外被拉伸。
我正在使用JasperReports 6.1.0。 编辑:在JasperReports 6.2.2中也是如此。
我很感激您的建议!
修改
代码: (如果没有重现错误,我建议将默认字体设置得更大。)
/* Row 1 */
JRDesignBand band1 = new JRDesignBand();
JRDesignTextField textField1 = new JRDesignTextField();
textField1.setX(80);
textField1.setWidth(45);
textField1.setStretchWithOverflow(true);
JRDesignExpression jrExpression1 = new JRDesignExpression();
jrExpression1.setText("\"A.1.\"");
textField1.setExpression(jrExpression1);
JRDesignTextField textField2 = new JRDesignTextField();
textField2.setX(160);
textField2.setWidth(45);
textField2.setStretchWithOverflow(true);
JRDesignExpression jrExpression2 = new JRDesignExpression();
jrExpression2.setText("\"A.2. Lorem ipsum dolor sit\"");
textField2.setExpression(jrExpression2);
band1.addElement(textField1);
band1.addElement(textField2);
((JRDesignSection) jasperDesign.getDetailSection()).addBand(band1);
/* Row 2 */
JRDesignBand band2 = new JRDesignBand();
JRDesignTextField textField3 = new JRDesignTextField();
textField3.setX(89);
textField3.setWidth(331);
textField3.setStretchWithOverflow(true);
JRDesignExpression jrExpression3 = new JRDesignExpression();
jrExpression3
.setText("\"B.1. Lorem ipsum dolor sit amet consectetur adipiscing elit, sed do eiusmod tempor \"");
textField3.setExpression(jrExpression3);
band2.addElement(textField3);
((JRDesignSection) jasperDesign.getDetailSection()).addBand(band2);
答案 0 :(得分:0)
在this thread中,我发现在IE浏览器中显示错误是一个众所周知的问题 - 我根据那里显示的解决方案(最多投票的一个 - 不是被接受的一个)。
简而言之,最简单的方法是将table-layout:fixed;
添加到每个style
标记的table
属性中(以HTML格式)。这可以通过使用HtmlExporter
类的扩展版本来完成,覆盖其exportTable()
方法并在该方法的两行中添加前面提到的修改:
writer.write("<table class=\"jrPage\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"table-layout:fixed; empty-cells: show; width: ");
和
writer.write("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"table-layout:fixed; empty-cells: show; width: 100%;");