2013-11-21 86 views
5

我的字体问题与我的碧玉报告在我的一个更罗嗦的文本字段(细节带中的最后一个)在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 

贾斯帕(貌似)使用一些算法来找出该领域应该多高是,我的文字是勉强配合,那么当生成PDF文本包装并在下一行中消失。

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

我已经玩过Stretch Type,Position Type和Stretch with Overflow,并且将这个文本字段移到了它自己的乐队中,但是没有一个修复这个bug(并且其中一些会导致其他几个)。

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

任何提示将不胜感激。

更新1

我试图从碧玉升级报表5.2.0至6.2.0和碧玉字体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;)。

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

更新6

我检查,我没有@KarolisŠarapnickis的与printOrder问题。呃,好吧。我将成为士兵。 ;-)

+0

你找到一个解决这个问题?我有同样的问题,它是如此讨厌......它似乎像碧玉无法计算最大数量的字符,如果它是一个粗体输入数据,然后削减剩余出口到PDF – Jesus

+0

为了将来的参考,用户与此问题应该检查[font-extensions](https://stackoverflow.com/documentation/jasper-reports/5773/font-extensions#t=201705312048127084075)正确使用 –

回答

7

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

+0

这是一个很好的窍门。为我工作:) –

+0

_Any_可扩展textarea会有这个问题,所以你需要添加回车到_everything_。此外,这也将影响领域的高度。仍然...这是一个可行的解决方法绝望(可以说我是)。 – inanutshellus

+0

也为我工作。在我们的例子中,jasperprint在linux服务器上生成并显示在Windows客户端上。我的猜测是,它使用略小的Linux字体来计算所需的空间,然后在Windows上显示时,窗口字体不适合。 – tobi42

0

如果文本被截断并且没有任何工作似乎有相同的问题。 幸运的是我发现我的根XML元素有以下属性:

printOrder="Horizontal" 

删除它解决了我的问题。

+0

就我而言,我仍然有这个问题,但在我的JRXML文件的根节点中没有'printOrder =“Horizo​​ntal”'。不过,希望这会帮助那里的人。 – inanutshellus

0

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

这奏效了:

textField.setStretchType(StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT); 
+0

我做到了,但没有奏效 – Jesus