使用带有iReport的标记=“html”时生成为PDF文件的报告的文本对齐问题

时间:2013-08-30 12:48:43

标签: jasper-reports pdf-generation ireport

我要在PDF中打印以下数据

101 HARRIER WAY<br>OMVILLE<br>BELLSHIRE<br>OM1  1HA<br>

需要以下列方式显示,

101 HARRIER WAY
OMVILLE
BELLSHIRE
OM1  1HA

但是打印如下,

enter image description here

更新

当我在OMVILLE

的地方使用其他文字时
101 HARRIER WAY<br>HELLO WORLD BANGALORE<br>BELLSHIRE<br>OM1  1HA<br>

效果很好。当我给OMVILLE

时,我不知道它为什么不起作用

enter image description here

代码:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="accountStatement" pageWidth="720" pageHeight="1008" columnWidth="680" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isTitleNewPage="true">
    <parameter name="address" class="java.lang.String"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="914" splitType="Stretch">
            <textField isStretchWithOverflow="true" pattern="" isBlankWhenNull="true">
                <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="117" y="141" width="297" height="105" isRemoveLineWhenBlank="true"/>
                <textElement markup="html">
                    <font size="9" isBold="false" pdfFontName="Helvetica"/>
                    <paragraph lineSpacing="Single" tabStopWidth="60"/>
                </textElement>
                <textFieldExpression class="java.lang.String"><![CDATA[$P{address}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

我使用 iReport 4.0.2 运行此代码,而我的 JasperReports 版本为4。

为了运行上面的代码,使用所有输入参数作为默认值,对于地址参数,将下面的一个作为输入。

101 HARRIER WAY<br>OMVILLE<br>BELLSHIRE<br>OM1  1HA<br>

P.S:我正在生成PDF格式的jrxml。

1 个答案:

答案 0 :(得分:2)

您的示例适用于此版本的 JasperReports API 4.0.1 4.1.1 ,但我遇到了同样的问题与 4.0.2 版本一样的问题。

有什么区别?

我们可以比较 JRPdfExporter 的两个版本的实现,例如 4.1.1 4.0.2 版本。

正如您所看到的,PdfTextRenderer的源代码对于这两个版本是不同的,例如方法draw已更改。此方法 draw()包含对 iText 框架的ColumnText.go()方法的调用。此方法用于在 pdf 文档中绘制文本。

可能的解决方案:

  1. 您可以升级 JasperReports 库的版本。最后一个是 5.2.0 ,你的样本可以使用它。如前所述

  2. ,即使使用 4.1.1 ,您的样本也能正常运行
  3. 如果无法升级 JR 库的版本,则可以修复 PdfTextRenderer 类的源代码。


  4. 关于测试您的问题

    我写了一个小样本来测试你的问题。我已经使用 Maven 项目 - 在 JR 库版本之间进行简单切换。

    用于测试问题的 Java 类的源代码:

    public static void testReport() throws JRException {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("address", "101 HARRIER WAT<br/>OMVILLE<br/>BELLSHIRE<br/>OM1 1HA<br/>");
    
        JasperReport jasperReport = JasperCompileManager.compileReport(reportSource);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());
    
        JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
    } 
    

    “苗条”测试 jrxml 文件是:

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="accountStatement" pageWidth="720" pageHeight="1008" columnWidth="680" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isTitleNewPage="true">
        <parameter name="address" class="java.lang.String"/>
        <queryString>
            <![CDATA[]]>
        </queryString>
        <title>
            <band height="914" splitType="Stretch">
                <textField>
                    <reportElement x="117" y="141" width="297" height="105"/>
                    <textElement markup="html">
                        <font size="9" isBold="false" pdfFontName="Helvetica"/>
                    </textElement>
                    <textFieldExpression class="java.lang.String"><![CDATA[$P{address}]]></textFieldExpression>
                </textField>
            </band>
        </title>
    </jasperReport>