4

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

该片段包含问题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>

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

Ps 当我从 Ireport 4.0.2 生成报告时,我遇到了这个问题

4

4 回答 4

3

首先,使用字体扩展。您的问题很可能是因为 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

于 2011-11-01T18:54:32.757 回答
2

您可以通过在文本的末尾添加空格来避免这种情况。我也在使用 jasper4.0.2,它对我有用。

于 2015-03-10T10:58:23.017 回答
1

一些元素(TextField 或StaticText)可以增加它的高度取决于stretch typestretch with overflow属性。但是元素的宽度不能在没有编程的情况下改变。

引自iReport Ultimate Guide

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

    Stretch with overflow - 当它被选中时,此选项允许文本字段如果元素不足以包含所有文本行,则垂直适应内容
  • 例如,您可以使用DynamicJasper API 中的ColumnBuilder类来设置列宽。

    您也可以阅读此讨论

    于 2011-11-01T11:51:02.790 回答
    0

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

    将您的字体转换为 Jar,然后添加为外部 jar,绝对可以。

    在 iReport 设计器中:

    步骤 1)工具 -> 选项 -> 字体 -> 安装字体

    步骤 2)选择该字体->单击导出为扩展名 [将其设为 JAR]

    步骤 3)转到 Classpath -> 点击 ADD Jar -> 添加你的字体 jar -> OK

    现在预览报告。

    于 2015-07-06T09:57:27.923 回答