HTML组件的字体大小呈现问题

HTML组件的字体大小呈现问题,html,jasper-reports,export-to-pdf,Html,Jasper Reports,Export To Pdf,呈现嵌入的html组件时,我的pdf报告的文本字体大小有问题,例如: 我的Java代码: StringBuilder htmlBody = new StringBuilder(""); htmlBody.append("<p class=\"m\">").append(mainSkillCategory.getName()).append("</p>\n"); for(SubSkillCategory subSkillCat : mainSkillCategory.get

呈现嵌入的html组件时,我的pdf报告的文本字体大小有问题,例如:

我的Java代码:

StringBuilder htmlBody = new StringBuilder("");
htmlBody.append("<p class=\"m\">").append(mainSkillCategory.getName()).append("</p>\n");
for(SubSkillCategory subSkillCat : mainSkillCategory.getSubSkillCategories()){
    htmlBody.append("<p class=\"c\">").append(subSkillCat.getName()).append("</p>\n");
    for(Skill skill : subSkillCat.getSkills()){
        htmlBody.append("<p class=\"s\">").append(skill.getName()).append("</p>\n");
    }
}
StringBuilder html = new StringBuilder("");
html.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n");
html.append("<html>\n");
html.append("<head>\n");
html.append("    <title>Sample of html based report</title>\n");
html.append("    <style type=\"text/css\">\n");
html.append("        p.m {\n");
html.append("              font-size: 12px;\n");
html.append("              font-family: \"Calibri\";\n");
html.append("              padding: 0pt 0pt 0pt 1cm;\n");
html.append("              font-weight: bold;\n");
html.append("              margin: 1pt 0pt 1pt 0pt;\n");
html.append("        }\n");
html.append("\n");
html.append("        p.c {\n");
html.append("              font-size: 12px;\n");
html.append("              font-family: \"Calibri\";\n");
html.append("              padding: 0pt 0pt 0pt 2cm;\n");
html.append("              font-weight: bold;\n");
html.append("              margin: 1pt 0pt 1pt 0pt;\n");
html.append("        }\n");
html.append("\n");
html.append("        p.s {\n");
html.append("              font-size: 12px;\n");
html.append("              font-family: \"Calibri\";\n");
html.append("              font-weight: normal;\n");
html.append("              padding: 0pt 0pt 0pt 3cm;\n");
html.append("              margin: 0pt 0pt 0pt 0pt;\n");
html.append("        }\n");
html.append("\n");
html.append("    </style>\n");
html.append("</head>\n");
html.append("\n");
html.append("<body>\n");
html.append(htmlBody.toString());                                                                                                                                                                                                                                                                           html.append("</body>\n");
html.append("</html>");
params.put("htmlCode", html.toString());
StringBuilder htmlBody=新的StringBuilder(“”);
htmlBody.append(“

”).append(mainSkillCategory.getName()).append(“

\n”); 对于(SubSkillCategory subSkillCat:mainSkillCategory.getSubSkillCategories()){ htmlBody.append(“

”).append(subSkillCat.getName()).append(“

\n”); for(技能:subSkillCat.getSkills()){ htmlBody.append(“

”).append(skill.getName()).append(“

\n”); } } StringBuilder html=新的StringBuilder(“”); html.append(“\n”); html.append(“\n”); html.append(“\n”); append(“基于html的报告示例”); html.append(“\n”); html.append(“p.m{\n”); html.append(“字体大小:12px;\n”); 追加(“字体系列:\“Calibri\”;\n”); 追加(“填充:0pt 0pt 0pt 1cm;\n”); html.append(“字体大小:粗体;\n”); 追加(“页边空白:1pt 0pt 1pt 0pt;\n”); html.append(“}\n”); html.append(“\n”); html.append(“p.c{\n”); html.append(“字体大小:12px;\n”); 追加(“字体系列:\“Calibri\”;\n”); 追加(“填充:0pt 0pt 0pt 2cm;\n”); html.append(“字体大小:粗体;\n”); 追加(“页边空白:1pt 0pt 1pt 0pt;\n”); html.append(“}\n”); html.append(“\n”); html.append(“p.s{\n”); html.append(“字体大小:12px;\n”); 追加(“字体系列:\“Calibri\”;\n”); html.append(“字体大小:正常;\n”); 追加(“填充:0pt 0pt 0pt 3cm;\n”); 追加(“页边距:0pt 0pt 0pt;\n”); html.append(“}\n”); html.append(“\n”); html.append(“\n”); html.append(“\n”); html.append(“\n”); html.append(“\n”); append(htmlBody.toString());html.append(“\n”); html.append(“”); put(“htmlCode”,html.toString());
.jrxml模板:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Html component" pageWidth="595" pageHeight="842" columnWidth="200" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">    
    <style name="backgroundStyle" mode="Opaque" backcolor="green"/>
    <parameter name="htmlCode" class="java.lang.String"/>
    <title>
        <band height="200">
            <componentElement>
                <reportElement style="backgroundStyle" x="0" y="0" width="550" height="200"/>
                <hc:html xmlns:hc="http://jasperreports.sourceforge.net/htmlcomponent" xsi:schemaLocation="http://jasperreports.sourceforge.net/htmlcomponent http://jasperreports.sourceforge.net/xsd/htmlcomponent.xsd" scaleType="RetainShape" horizontalAlign="Left" verticalAlign="Top">                   
                    <hc:htmlContentExpression><![CDATA[$P{htmlCode}]]></hc:htmlContentExpression>
                </hc:html>
            </componentElement>
        </band>
    </title>
</jasperReport>

如果使用
JasperExportManager.exportReportToHtmlFile()
继续生成报告,则输出为:

但是,如果我继续使用
JasperExportManager.exportReportToPdfStream()
,我会得到:

可能很难区分与连接的屏幕截图的区别,但生成的pdf报告的字体大小(在CSS类中指定)(即p.m、p.c、p.s)似乎比实际大小(即12)大得多


这里可能有人以前遇到过这个问题。欢迎提供任何帮助。

JasperReports中的
htmlcomponent
仍处于实验状态(它与核心库分离,在一个示例中),很可能会保持这种状态

这是因为它的输出在创建图像的非HTML格式中是不可预测的。该图像可能溢出,引擎无法决定在何处破坏它

对于小型HTML,您可以使用它,但是默认的图像生成器基于Java的默认
JEditorPane
,它的CSS支持有限

您可以绕过这一点,尝试使用以下属性设置一个对CSS更友好的图像生成器(支持CSS 2.1):

net.sf.jasperreports.html.printelement.factory = net.sf.jasperreports.engine.util.FlyingSaucerHtmlPrintElementFactory
看看有没有什么改进。因为该组件的输出毕竟是图像,所以切换到不同的缩放类型可能有助于保持内容的原始形状

请记住,在大于6.2.2的JasperReports版本中设置上述属性将中断使用此组件的报表的非HTML导出。这将在即将发布的版本中得到修复。

(我们的发现(JSS 6.3.2):)

HTML组件具有允许调整缩放内容的属性。 尝试
属性视图->HTML属性->缩放类型->[Clip]
例如

(为了清晰起见,还有更广阔的前景:)

但这仅适用于
Java
(在
Preview
选项卡中默认)或
PDF
呈现:


(并非html(css)的所有功能)支持JasperReports@AlexK:再次感谢您的帮助。在这种情况下,为了克服这个限制,我应该怎么做?在这种情况下,要做出您想要的设计是一件非常痛苦的事情。我不知道通用的答案。可能需要100次尝试,只需对样式和/或html进行一些小的更改……谢谢Alex K,我已经放弃了这个s解决方案,我更愿意使用子报表功能。不过我感谢您的帮助:)不客气:)您尝试过Narcis的解决方案吗?我从未尝试过FlyingSaucerHtmlPrintElementFactory,但也许这是你的盟友;)谢谢你的回答:)
Retain Shape
Clip
Fill Frame
Real Height
Real Size
some sample broken
text