【问题标题】:Text wrapping issue in generated pdf file生成的 pdf 文件中的文本换行问题
【发布时间】:2016-11-25 06:01:24
【问题描述】:

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

sn-p 包含问题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 生成报告时遇到此问题

【问题讨论】:

    标签: jasper-reports overlapping word-wrap export-to-pdf


    【解决方案1】:

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

    其次,您可能遇到了已解决的问题。 JasperReports 4.1.1 更改日志包括:

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

    【讨论】:

    • 非常感谢您的帮助。我将无法使用第二个选项,因为 Ireport 4.0.2 jar 已经部署在应用程序的服务器中。但是是的,当我在我的独立机器上使用其他版本的 Ireport 时,包装问题确实得到了解决。我没有尝试过 4.1.1 。我尝试使用 4.0.1,它工作正常。但是我需要在 Ireport 4.0.2 版本中找到一种方法来纠正这个问题。几个问题......(1)如果问题与字体有关,那么为什么对于具有相同字体类型和相同其他属性的某些文本没有出现问题?
    • 2)使用字体扩展,我的理解是我们可以在工具中添加字体,但它不会添加到服务器中..对吗?因为我们在服务器中部署.jasper文件,我们还需要在服务器中添加使用字体扩展创建的 jar 吗?
    • 是:字体扩展的存在专门用于在服务器上部署相同的字体。它将是服务器上的一个附加 .jar 文件。
    • @mdahlman 我遇到了同样的问题,我已经发布了here。如何使用字体扩展?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      某些元素(TextField 或 StaticText)可以增加其高度取决于stretch typestretch with overflow 属性。但是元素的宽度不通过编程是不能改变的。

      引用iReport Ultimate Guide:

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

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

      您也可以阅读此discussion

      【讨论】:

      • 嗨,Alex,非常感谢您的回复..但是我想我无法向您清楚地解释我的问题。让我尝试重新表述并向您解释我在报告中遇到的问题。我有一个文本字段,其值从我使用的 xml 数据源的表中动态填充。宽度足以容纳两个字母的单词。但是,当我生成报告时,一些文本会被换行,即使同一字段中的某些文本工作正常。
      • 对于相同长度的文本是否有不同的行为?
      • 是的...正如我之前对相同文本字段(具有相同长度)所述,文本的行为不同
      • 可以发一下报告的sn-p吗?
      • 嗨亚历克斯,这是我遇到问题的报告的 sn-p..
      【解决方案4】:

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

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

      在 iReport 设计器中:

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

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

      第 3 步) 转到 Classpath -> 点击 ADD Jar -> 添加您的字体 jar -> 确定

      现在预览报告。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-20
        • 1970-01-01
        相关资源
        最近更新 更多