【问题标题】:Text alignment issue with report generated as PDF file when using markup="html" using iReport使用 iReport 使用 markup="html" 时生成为 PDF 文件的报告的文本对齐问题
【发布时间】:2013-08-30 12:48:43
【问题描述】:

我有以下数据要打印在 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。

【问题讨论】:

  • 是浏览器特有的吗?
  • 我没有得到你 .. 浏览器特定的意思 .. ?我在 IE7/IE8 上运行这个。
  • 你试过在 Chrome 或 firefox 上运行它吗?
  • 是的,我目前在 firefox 上运行 .. 但仍然出现错误。
  • @Che 我刚刚测试了您的样品 - 它非常完美。您使用的是哪个版本的 JasperReports\iReport

标签: jasper-reports pdf-generation ireport


【解决方案1】:

您的示例适用于以下版本的 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);
} 

“slim”测试 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>

【讨论】:

  • 好吧,让我试试这个.. :)
  • Alex 因为我在项目中有许多其他报告以及此报告,所以我无法升级或降级版本。作为第二个选项,我如何更改源代码.. 是我可以在 jrxml 文件中执行的任何其他解决方案,例如使用丰富的字体或样式或其他方式.. 我的数据作为输入 101 HARRIER WAY&lt;br&gt;OMVILLE&lt;br&gt;BELLSHIRE&lt;br&gt;OM1 1HA&lt;br&gt; 这样我有使用分隔符作为
    拆分这个并使用 4 个文本字段。但我仍然面临着这个问题。你能建议我一些我可以马上解决的事情吗?
  • 我也在阅读这个question。如何使用字体扩展。
  • 你读过Font Extensions主题吗?在 iReport 的帮助下,您可以使用您的字体 (ttf) 生成 jar
  • 任务完成.. 非常感谢。除了这个答案之外,您在 SO 中的其他答案对我帮助很大.. :)
猜你喜欢
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多