生成的pdf文件中的文本换行问题

时间:2011-11-01 09:56:01

标签: jasper-reports overlapping textwrapping export-to-pdf

我遇到了以pdf格式包装文本的问题。对于像xls,rtf和pptx这样的所有格式,报告工作正常,但是在pdf中,一些文本被包装,即文本的一些字母,尤其是最后几个字母在下一行中打印。我已经尝试了该文本属性中的几乎所有选项。我可以减少效果的唯一方法是将pdf字体名称更改为这些文本的罗马时间。然而,即使这在某些情况下也不起作用。

该代码段包含问题TextField

<textField  isBlankWhenNull="true">
    <reportElement positionType="Float" x="560" y="0" width="60" height="20"/>
    <box leftPadding="2">
        <pen lineWidth="0.5"/>
        <topPen lineWidth="0.5"/>
        <leftPen lineWidth="0.5"/>
        <bottomPen lineWidth="0.5"/>
        <rightPen lineWidth="0.5"/>
    </box>
    <textElement>
        <font fontName="Arial Unicode MS"  isPdfEmbedded="false"/>
    </textElement>
    <textFieldExpression class="java.lang.String"><![CDATA[$F{CustState}]]>
    </textFieldExpression>
</textField>

如果您为此分享一些解决方案,我将非常感激。 感谢...

P.s我在从Ireport 4.0.2生成报告时遇到此问题

4 个答案:

答案 0 :(得分:3)

首先,使用Font Extensions。您的问题很可能是因为JasperReports(iText)在生成PDF时未使用您希望它使用的字体。字体扩展解决了这个问题。

其次,您可能遇到了一个已修复的问题。 JasperReports 4.1.1更改日志包括:

the net.sf.jasperreports.export.pdf.force.linebreak.policy configuration property is now deprecated as the PDF text rendering code was refactored so that text is rendered exactly like in AWT

答案 1 :(得分:2)

你可以通过添加文本的空格结尾来避免这种情况。我也使用jasper4.0.2并且它对我有效。

答案 2 :(得分:1)

某些元素(TextField或StaticText)可以增加其高度取决于stretch typestretch with overflow属性。但是如果没有编程,元素的宽度就无法改变。

iReport Ultimate Guide的引用:

拉伸类型 - 此属性定义如何计算元素  印刷精加工期间的高度;三个可能的值是  如下:  
  • NoStretch - 这是预先定义的拉伸类型,它  规定元素高度应保持相等。  
  • RelativeToBandHeight - 元素高度与乐队的大小增加成比例增加;这对于模拟表格边框的垂直线很有用。  
  • RelativeToTallestObject - 元素根据最近元素的变形修改其高度:此选项也与元素组一起使用,元素组是不由iReport管理的元素组机制

    拉伸溢出 - 选中此选项后,如果元素不足以包含所有文本行,则此选项允许文本字段垂直适应内容
  • 您可以使用ColumnBuilder API中的DynamicJasper类来设置列宽。

    您还可以阅读此discussion

    答案 3 :(得分:0)

    对于iReport 4.0.2中的pdf导出中的文本换行问题

    将您的字体转换为Jar,然后添加为外部jar,肯定会起作用。

    在iReport设计师中:

    步骤1)工具 - &gt;选项 - &gt;字体 - &gt;安装字体

    步骤2)选择该字体 - &gt;点击导出为扩展名[将其设为JAR]

    步骤3)转到Classpath - &gt;点击ADD Jar - &gt;添加你的字体jar - &gt;行

    现在预览报告。