jasper-reports - jasper 文本字段被截断

标签 jasper-reports ireport dynamic-jasper

我的 jasper 报告出现字体问题,其中一个比较冗长的文本字段(详细信息带中的最后一个)在 PDF 和 PDF 预览中被截断,但在内部预览中没有。

例如

内部预览:

Here is a fake description. It fits
perfectly, fitting just in the lines.

PDF 预览
Here is a fake description. It 
fits perfectly, fitting just in the

Jasper(似乎)使用某种算法来计算字段应该有多高,我的文本几乎不合适,然后当生成 PDF 时,文本换行并在下一行消失。

我没有使用自定义字体(只是默认/隐式“SansSerif”),也没有使用除粗体/斜体之外的任何自定义样式。这种行为在 iReport 的 PDF 预览和我的代码在 Windows 和 MacOS 上生成的 PDF 中都可以证明(Linux 可能仍然存在问题,但我的示例文本在 Ubuntu 上没有表现出这种行为)。

我玩过 Stretch Type、Position Type 和 Stretch with Overflow,并将这个文本字段移到它自己的带区,但没有一个修复这个错误(其中一些会导致其他错误)。

我很幸运将字体更改为其他内置字体,但这只是告诉我我的示例不适用于该特定字体,而不是我已经修复了错误。

任何提示将非常感谢。

更新 1

我尝试从 Jasper Reports 5.2.0 升级到 6.2.0 和 Jasper Fonts 4.0.0 到 6.0.0 ......没有变化。

更新 2

尝试编辑我的 src/main/resources/jasperreports_extension.properties并添加
net.sf.jasperreports.export.pdf.force.linebreak.policy=true

... 不用找了。

(值得注意的是,尽管在我的用例中我不能使用 isStretchWithOverflow="true" ,所以这可能就是它不起作用的原因。)

更新 3

我尝试通过编辑 src/main/resources/jasperreports_extension.xml 嵌入字体并添加:
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.arialFontFamily=fonts/customFontFamilies.xml

customFontFamilies.xml:
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
 <fontFamily name="ArialEM">
   <normal><![CDATA[fonts/Arial/Arial.ttf]]></normal>
   <bold><![CDATA[fonts/Arial/Arial Bold.ttf]]></bold>
   <italic><![CDATA[fonts/Arial/Arial Italic.ttf]]></italic>
   <boldItalic><![CDATA[fonts/Arial/Arial Bold Italic.ttf]]>/boldItalic>
   <pdfEncoding><![CDATA[Cp1252]]></pdfEncoding>
   <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
 </fontFamily>
</fontFamilies>

... 没有骰子。 (虽然这确实有助于解决 Firefox 的 PDF 渲染器无法渲染粗体字体的问题。)

更新 4

我注意到在我能够创建的所有测试用例中,第一行是空白的,因此我将特定单元格更改为 垂直对齐顶部 ,这有效,但是当其中没有太多文本时,当然会使该单元格不对齐。

将其作为解决方案废弃,但可能对某人有用。

更新 5

在这一点上,希望很明显我已经尝试了“真正的”解决方案,并看着他们都死于可怕的死亡。因此,我们进入了黑客解决方案的领域。首先我尝试了@wmmci 的解决方案,但他的回答改变了我的盒子的高度(由于它是由 Dynamic Jasper 动态计算的)。我注意到我可以创建的所有示例都涉及字符串中的单词内句点,例如“富...酒吧”。这可能不是你的情况,但它适合我。所以我在词内空间之后注入(inject)了一个“头发空间”( &#8202; )。

这显然不是一个真正的解决方案,只是一个临时的解决方法,直到我能够找到更多的错误示例。

更新 6

我检查了,我没有@KarolisŠarapnickis 的 printOrder 问题。 .呃,好吧。我要当兵。 ;-)

最佳答案

我有同样的问题,我尝试了所有可能的配置 - 没有工作。最后,作为一种解决方法,我在该字段中添加了一个换行符并且它起作用了。
像这样:$F{description} + "\n"

关于jasper-reports - jasper 文本字段被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20125341/

相关文章:

jasper-reports - 如何水平显示自定义数量的元素?

jasper-reports - 如何将 JRBeanCollectionDataSource 列表传递给子报表

java - 看不见的饼图标签?

jasper-reports - 警告元素位置无效。 iReport Jasperreports 中的文本被裁剪

java - 是否可以使用 Jasper Reports 动态生成报告而不为每个报告生成 jasper?

java - 使用 DynamicJasper 打印报告中的自定义文本

Java jasper 报告 valueAxis 位置

java - 碧 Jade 报告 : getting "java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory" Exception

jasper-reports - Jasper Reports - 将一天添加到日期参数

java - 使用 DynamicJasper API 创建图表