java - 使用 JasperReports 呈现任意 XHTML

标签 java pdf xhtml jasper-reports flying-saucer

我们已经将 JasperReports 嵌入到我们的应用程序中来生成报告,但我对 JEditorPaneHtmlMarkupProcessor 处理编写任意 XHTML 的方式相当不满意。例如,我需要在某一点输出一个项目符号列表,它确实做到了,但因为它将其转换为实际的项目符号字符和换行符,所以具有相当长文本的项目符号会导致文本换行与项目符号对齐,而不是与项目符号对齐。文本的第一个字母。

由于这个问题和类似的问题,我想我可以尝试将 XHTML 内容渲染为图形(使用 Flyingsaucer XHTML 渲染器)。这让我可以更好地控制它的外观,但仍然存在一个问题。根据 JasperReports 权威指南,“JasperReports 模板和生成的文档中的所有定位和大小调整都是使用默认的 Java 分辨率 72 dpi 执行的。”看来要渲染的各个字母需要位于整数坐标处。在 72 dpi 下,这没什么大不了的,因为最坏的情况下它相当于子像素定位错误,不会产生任何重大后果。然而,在渲染为 PDF 时,JasperReports 将其分辨率提高到 300 dpi,导致某些字母的水平位置有时会偏离多个像素。

是否有某种方法可以更好地呈现任意 XHTML,或者是否有某种方法可以使 JasperReports 以 300 dpi 而不是 72 执行定位和调整大小?

最佳答案

我最终通过使用不坚持完整字符位置的渲染器解决了这个问题:来自 Swing 的 JEditorPane:

JEditorPane pane = new JEditorPane();
pane.setBorder(null);
pane.setSize(w, h);
pane.setContentType("text/html");
pane.setEditable(false);
pane.setText(html);
pane.paint(g2);

关于java - 使用 JasperReports 呈现任意 XHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1461485/

相关文章:

java - 外部方法如何在内部递归方法上执行?

java - 如何将测试包添加到现有的 ejb 项目中?

Android- 从 PDF 中获取文本

ios - Xcode 6 : pdf vector images with transparency

css - 我应该为 ="...."和 id =".."重复标签文本吗?

Java 9 Eclipse 4.7 可移植导出错误 "resource not found", "Could not find main method from given launch configuration."

java - 无与伦比的类型 : int and Number in java 8

php - FPDF output() 以 html 扩展名保存文件

javascript - HTML 表格 - 在浏览器中隐藏列而不影响 colspans

javascript - 使用 CDATA 替换 < 是否正确