jasper文本字段被截断

时间:2013-11-21 15:41:29

标签: jasper-reports ireport dynamic-jasper

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

e.g。

内部预览:

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上生成的代码中得到证明(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

我注意到在所有测试用例中我都能够创建第一行是空白的,所以我将特定单元格更改为 vertical-align top ,这当然有效,但当然当一个单元格中没有太多文本时,它就会错位。

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

更新5

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

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

更新6

我检查过,{KarusŠarapnickis与printOrder没有问题。呃,好吧。我会继续战斗。 ; - )

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

文本被截断时出现同样的问题,似乎没有任何效果。 幸运的是,我发现我的root xml元素具有以下属性:

printOrder="Horizontal"

删除它解决了我的问题。

答案 2 :(得分:0)

就我而言,我在一个文本字段中有很长的文本。添加换行符可以解决某些单元格的问题,但不能解决跨越页面的非常长的单元格问题。为了最终解决它,我必须将文本字段设置为拉伸到 RELATIVE_TO_BAND_HEIGHT 。以前,它设置为RELATIVE_TO_TALLEST_OBJECT。我的猜测是,RELATIVE_TO_TALLEST_OBJECT计算错误(低于需要)。

这就是诀窍:

textField.setStretchType( StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT );

答案 3 :(得分:0)

Well, i'm not sure if you're struggeling with the exact same problem i was. But my solution was setting the property "net.sf.jasperreports.print.keep.full.text" of the field to "true".