如何检测Jasper报告中的溢出?

时间:2017-01-09 16:48:14

标签: jasper-reports overflow

如何在Jasper报告中自动检测所有溢出/切断文本?

我的用例:我有一份多语言报告。当一些翻译被改变时,我想确保下一个(可能更长的文本)没有被截断,而不必考虑每一个变化。

检查应该适用于所有元素,甚至是那些成长的元素。想象一下,我有一个文本框,试图增长并延伸超过页面边框。也许更好的描述是:我想知道引擎何时向用户无法看到的页面添加文本,无论原因是什么。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方法:当文本溢出时,JasperReports会在PDF中省略它(而不是依赖于剪切)。

您可以使用PDFBox这样的框架来从页面中获取文本。在单元测试中,您可以检查全文是否可见。

这适用于静态文本。

我创建了gist with some demo code

动态文本更难,因为它们可能会溢出生产。您可以使用相同的方法检查文本是否在页面上保持不变但速度有点慢。

单行文本的更快解决方案是使用平均字符宽度(PDFont class有一个方法getAverageFontWidth())。

适合该框的平均字符数为boxWidth / averageCharWidth。将字符串长度与此值进行比较。如果它少了,那么你很可能是安全的。如果它更长,您至少可以使用字符串记录警告。

过了一段时间,你可以收集所有这些日志,并试图找出一种更好的方法来确定适合哪些文本,哪些不适合。

理想的解决方案是将字体,样式和文本传递给JasperReports并获取宽度的API。