2016-08-09 51 views
2

我使用的大膽風格的文本的一部分,所以它看起來像:爲什麼在使用標記時XLSX中忽略了樣式?

"<style isBold = 'true'>" + $P{REPORT_RESOURCE_BUNDLE}.getString("report.label.foo") +": "+"</style>"+$F{foo} 
在JRXML

這個textField樣子:

<textField> 
<reportElement style="moduleBorderColumnStyle" mode="Opaque" x="0" y="0" width="555" height="20" uuid="6adbbfa7-e549-4378-903c-04095c2f34c4"/> 
<textElement markup="styled"/> 
<textFieldExpression><![CDATA["<style isBold = 'true'>" + 
$P{REPORT_RESOURCE_BUNDLE} 
.getString("report.label.foo") 
+": "+"</style>"+$F{foo}]]></textFieldExpression> 
</textField> 

文本字段標記屬性 - 風格

它適用於PDF和HTML。但是,我在使用XLSX時遇到了問題。

不幸的是,甚至直接字體大小設置爲14後(我試圖從之前的風格設置)我正在爲整個標籤,這是使用標籤<style isBold='true'>字體11 callibri(它的默認字體)。

我試過與<b> text </b>相同,標記= HTML - 結果沒有改變。

結論:XLSX中的任何樣式文本都對字體不敏感(將其設置爲默認值),這怎麼解決?

編輯:

我發現,問題出在哪,我之前在申請這個textField風格,但是依然問題僅僅是在Excel中。 <style>標籤將其重寫爲默認字體和字體大小。

+0

@PetterFriberg是的,我仍然有一個問題。這裏我不使用條件樣式。字體覆蓋問題 – quento

+0

@PetterFriberg和只是在XLSX – quento

+0

我認爲這是錯誤,我一直在測試一些,在xlsx(不是xls)中,style屬性被忽略,如果標記與textField一起使用,我會看看我能否找到一個工作,但是現在,**這是一個bug **。 –

回答

1

我可以在導出到xlsx時確認同樣的錯誤,忽略樣式,它似乎與爲XSSFSheet中的單元格創建RichTextString有關。 (不正確/不字體設置爲RichTextString?)

編輯:我創建了一個bug issue,作爲解決的下一個版本被標記(當前版本是v6.3.0)

簡單重現錯誤的例子

jrxml(SimpleTest。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="SimpleTest" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="e4188d8a-c7f9-4f7d-8f0f-ada07b89d42f"> 
    <style name="test" mode="Transparent" forecolor="#CC0000" fontSize="14"/> 
    <detail> 
     <band height="20"> 
      <textField isStretchWithOverflow="true"> 
       <reportElement style="test" positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="200" height="20" uuid="6d5644bf-480e-4ed2-831b-3ed043f38f70"/> 
       <textElement verticalAlignment="Middle" markup="html"> 
        <paragraph lineSpacing="Single"/> 
       </textElement> 
       <textFieldExpression><![CDATA["<b>TEST</b> TEXT"]]></textFieldExpression> 
      </textField> 
      <textField isStretchWithOverflow="true"> 
       <reportElement style="test" positionType="Float" stretchType="RelativeToTallestObject" x="200" y="0" width="200" height="20" uuid="f876d0a3-136b-468c-b3bd-bd9cd5475ca9"/> 
       <textElement verticalAlignment="Middle" markup="html"> 
        <paragraph lineSpacing="Single"/> 
       </textElement> 
       <textFieldExpression><![CDATA["TEXT2"]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

Java代碼來導出到XLS和XLSX

JasperReport report = JasperCompileManager.compileReport("SimpleTest.jrxml"); 
JasperPrint jasperPrint = JasperFillManager.fillReport(report,new HashMap<String, Object>(), new JREmptyDataSource(1)); 

//Export to excel xls 
JRXlsExporter exporterXls = new JRXlsExporter(); 
File outputFile = new File("excelTest.xls"); 
exporterXls.setExporterInput(new SimpleExporterInput(jasperPrint)); 
exporterXls.setExporterOutput(new SimpleOutputStreamExporterOutput(outputFile)); 
SimpleXlsReportConfiguration configXls = new SimpleXlsReportConfiguration(); 
configXls.setDetectCellType(true); 
configXls.setRemoveEmptySpaceBetweenColumns(true); 
configXls.setRemoveEmptySpaceBetweenRows(true); 
configXls.setCollapseRowSpan(true); 
configXls.setWhitePageBackground(false); 
exporterXls.setConfiguration(configXls); 
exporterXls.exportReport(); 

//Export to excel xlsx 
JRXlsxExporter exporterXlsx = new JRXlsxExporter(); 
File output = new File("excelTest.xlsx"); 
exporterXlsx.setExporterInput(new SimpleExporterInput(jasperPrint)); 
exporterXlsx.setExporterOutput(new SimpleOutputStreamExporterOutput(output)); 
SimpleXlsxReportConfiguration configXlsx = new SimpleXlsxReportConfiguration(); 
configXlsx.setDetectCellType(true); 
configXlsx.setRemoveEmptySpaceBetweenColumns(true); 
configXlsx.setRemoveEmptySpaceBetweenRows(true); 
configXlsx.setCollapseRowSpan(true); 
configXlsx.setWhitePageBackground(false); 
exporterXlsx.setConfiguration(configXlsx); 
exporterXlsx.exportReport(); 

輸出XLS(左),XLSX(右)

result

在xlsx中的單元格A1該樣式不適用

解決方法

不要不上textField使用樣式,因此直接應用樣式到textField

在例子中,我們添加forecolor="#CC0000"fontSize="14"textField並刪除style屬性

<textField isStretchWithOverflow="true"> 
    <reportElement positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="200" height="20" forecolor="#CC0000" uuid="6d5644bf-480e-4ed2-831b-3ed043f38f70"/> 
    <textElement verticalAlignment="Middle" markup="html"> 
     <font size="14"/> 
     <paragraph lineSpacing="Single"/> 
    </textElement> 
    <textFieldExpression><![CDATA["<b>TEST</b> TEXT"]]></textFieldExpression> 
</textField> 
+0

這樣一個完整的答案,謝謝! – quento

+0

@quento僅供參考:我已經打開了一個錯誤問題,請參閱http://community.jaspersoft.com/jasperreports-library/issues/8326,因爲我找不到任何相關的問題,jasper-reports人非常好,所以他們會大概一步一步 –

+2

謝謝大家發現這個bug。它現在已經修復,修復程序將在下一個JasperReports發行版中提供。 – shertage

相關問題