如何自动检测Jasper报表中的所有溢出/截断文本?
我的用例:我有一个多语言报告。当一些翻译更改时,我希望确保下一个(可能更长的文本)不会被截断,而不必关注每个更改。
检查应该适用于所有元素,即使是那些增长的元素。假设我有一个文本框,它试图增长并延伸到页面边框之外。也许更好的描述是:我想知道引擎何时向页面添加用户看不到的文本,无论是什么原因。
发布于 2017-01-25 17:42:16
我找到了一个解决办法:当文本溢出时,JasperReports会在PDF中忽略它(而不是依赖于裁剪)。
您可以使用像PDFBox这样的框架从页面获取文本。在单元测试中,您可以检查全文是否可见。
这可以很好地处理静态文本。
我已经创建了一个gist with some demo code。
动态文本比较困难,因为它们可能会在生产中溢出。您可以使用相同的方法来检查文本是否在页面上保持不变,但速度有点慢。
对于单行文本,一个更快的解决方案是使用平均字符宽度( PDFont class有一个getAverageFontWidth()方法。
可放入框中的平均字符数为boxWidth / averageCharWidth。将字符串长度与此值进行比较。如果它更小,那么你很可能是安全的。如果它更长,你至少可以用这个字符串记录一个警告。
一段时间后,您可以收集所有这些日志,并尝试找出一种更好的方法来确定哪些文本适合哪些不适合。
理想的解决方案是一个应用程序接口,它将字体、样式和文本传递给JasperReports并取回宽度。
https://stackoverflow.com/questions/41552879
复制相似问题