1

我有以下数据要打印在 PDF 中,

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

需要通过以下方式显示,

101 HARRIER WAY
OMVILLE
BELLSHIRE
OM1  1HA

但是是像下面这样打印,

在此处输入图像描述

更新:

当我使用其他文字代替OMVILLE

101 HARRIER WAY<br>HELLO WORLD BANGALORE<br>BELLSHIRE<br>OM1  1HA<br>

它运作良好。我不知道为什么当我给它时它不起作用OMVILLE

在此处输入图像描述

代码:

<?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>

PS:我正在生成 PDF 格式的 jrxml。

4

1 回答 1

2

您的示例适用于以下版本的JasperReports API4.0.14.1.1,但我在4.0.2版本中遇到了与您相同的问题。

有什么区别?

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

如您所见,这两个版本的PdfTextRenderer的源代码是不同的,例如方法draw发生了变化。该方法draw()包含对iText框架的ColumnText.go()方法的调用。此方法用于在pdf文档中绘制文本。

可能的解决方案:

  1. 您可以升级JasperReports库的归属。最后一个是5.2.0,您的示例可以使用它。正如我之前提到的,即使使用4.1.1 ,您的示例也能正常工作

  2. 如果您无法升级JR库的版本,您可以修复PdfTextRenderer类的源代码。


关于测试您的问题

我写了一个小样本来测试你的问题。我使用了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>
于 2013-09-02T20:29:07.257 回答