jasper 文本字段被截断

问题描述 投票:0回答:6

我的 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 上没有表现出该行为)。

我尝试过“拉伸类型”、“位置类型”和“溢出拉伸”,并将此文本字段移至其自己的区域,但没有修复此错误(其中几个会导致其他错误)。

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

任何提示将不胜感激。

更新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

动态计算的)。我注意到我可以创建的所有示例都涉及字符串中的词内句点,例如“富...酒吧”。这可能不是你的情况,但对我来说却是这样。所以我在词内空格之后注入了一个“头发空格”(

&#8202;
)。

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

更新6

我检查过,我没有遇到 @KarolisŠarapnickis 的

printOrder

问题。啊好吧。我会坚持下去。 ;-)

    

jasper-reports ireport dynamic-jasper
6个回答
19
投票


1
投票

printOrder="Horizontal"

删除它解决了我的问题。


1
投票


0
投票
RELATIVE_TO_BAND_HEIGHT

。以前,它被设置为 RELATIVE_TO_TALLEST_OBJECT。我的猜测是,RELATIVE_TO_TALLEST_OBJECT 的计算不正确(低于需要的值)。 这成功了:

textField.setStretchType( StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT );



0
投票
here

进行讨论)。不过新线路 并不理想,因为会对输出文档产生不必要的影响。更好的解决方案似乎是将制表符放在行尾。为了避免在使用 Horizontal Alignment = Justified 时出现其他问题,请在制表符之前添加一个空格。例如: $F{my_text} + " \t"



0
投票

© www.soinside.com 2019 - 2024. All rights reserved.