例如:
内部预览:
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上没有显示该行为)。
我尝试过拉伸类型、位置类型和带溢出的拉伸,以及将此文本字段移到其自己的band中,但没有修复此错误(其中一些会导致其他错误)。
我曾经成功地更改过字体到其他内置字体,但这只是告诉我我的示例对于特定的字体不起作用,而不是我已经解决了这个bug。
非常感谢任何提示。
更新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
动态计算的)。我注意到,我能够创建的所有示例都涉及字符串中的句内点号,例如,“foo...bar”。那可能不是你的情况,但是对我来说是这样的。所以我在句内空格后注入了“hair space” ( 
)。
这显然不是真正的解决方案,只是一个临时的解决办法,直到我能够找到更多的bug示例。
更新6
我检查过了,我没有@KarolisŠarapnickis的printOrder
问题。啊,好吧。我会继续努力的。;-)