2017-04-19 183 views
1

我在渲染一個嵌入式的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()); 

.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()到生成報告的輸出是: html output

但是,如果我有JasperExportManager.exportReportToPdfStream()繼續,我得到: pdf output

這可能是很難說從加盟截圖不同,但似乎這是指定生成的PDF報告的字體大小在CSS類(即p.m,p.c,p.s)大於實際應該達到的值(即12)。

有人在這裏可能以前遇到過這個問題。任何幫助都會受到歡迎。

+0

並非JasperReports支持的html(css)的所有功能 –

+0

@Alex K:再次感謝您的幫助。在這種情況下我應該怎麼做才能克服這個限制? – User00

+0

在這種情況下,您可以根據自己的需要進行設計。我不知道普遍的答案。也許這將是100次嘗試,風格和/或html的微小變化...... –

回答

1

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導出。這將在即將發佈的版本中得到解決。

+0

謝謝你的回答:) – User00