我们已将JasperReports嵌入到我们的应用程序中以生成报告,但我对JEditorPaneHtmlMarkupProcessor处理编写任意XHTML的方式一直不满意。例如,我需要在一个点上输出项目符号列表,但是因为它将它转换为实际的项目符号字符和换行符,所以文本包含相当长的文章会导致文本换行与项目符号对齐,而不是文字的第一个字母。
由于这个和类似的问题,我想我可能会尝试将XHTML内容渲染为图形(使用flyingsaucer XHTML渲染器)。这让我可以更好地控制它的外观,但仍然存在一个问题。根据 JasperReports权威指南,“JasperReports模板和生成文档中的所有定位和大小调整都是使用72 dpi的默认Java分辨率执行的。”看来要渲染的单个字母需要定位在整体坐标处。在72 dpi时,这没什么大不了的,因为它在最坏情况下相当于亚像素定位误差,而不是任何重大后果。但是,当渲染为PDF时,JasperReports会将其高达300 dpi,导致某些字母的水平位置有时偏离多个像素。
是否有某种方法可以更好地渲染任意XHTML,或者是否有某种方法可以让JasperReports以300 dpi而不是72来执行其定位和大小调整?
答案 0 :(得分:0)
我最终通过使用一个没有坚持整体角色位置的渲染器来解决这个问题:来自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);