JasperReports:Internet Explorer中文本字段的错误定位

时间:2016-05-20 14:08:15

标签: java html internet-explorer jasper-reports

目标:表示合并了一些单元格的表格,因此可以使用JasperReports(Java代码,而不是JasperStudio)以PDF和HTML格式正确呈现。

问题:当我们在Internet Explorer中打开创建的HTML文件时,元素的位置不正确。

更多信息:每一行都放在Jasper设计的详细信息部分中的一个波段(JRDesignBand)内。在这两个波段中,我们有不同宽度的文本字段(JRDesignTextField)。 以下是它在PDF中的显示方式(第一个乐队中的项目前面带有“R”,第二个带中带有“N”的项目): enter image description here 一切都按照需要呈现。但是,以下情况发生在HTML中(仅在Internet Explorer中): enter image description here 正如我们所看到的,文本字段不再出现在正确的位置,它们似乎在表格之外被拉伸。

我正在使用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);

1 个答案:

答案 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%;");