2016-08-09 48 views
2

Ich bin mit kühnem Stil für einen Teil des Textes, so dass es wie folgt aussieht:Warum wird Stil in XLSX ignoriert, wenn Markup verwendet wird?

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

in jrxml diesen textField wie folgt aussieht:

<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> 

TextField- Markup Eigenschaft - gestylt

Es funktioniert perfekt für PDF und HTML. Allerdings habe ich Probleme mit der Verwendung derselben für XLSX.

Leider auch nach dem direkten Schriftgröße auf 14 einstellen (Ich habe versucht, bevor es von der Art eingestellt) Ich erhalte Schrift 11 callibri (Es ist Standard-Schriftart) für ganzes Label, der <style isBold='true'>-Tag ist.

Ich habe das gleiche mit <b> text </b> und Markup = HTML versucht - Ergebnis wurde nicht geändert.

Fazit: Jeder formatierte Text in XLSX ist unempfindlich für Schriften (setzt es auf Standard), wie kann das gelöst werden?

EDIT:

fand ich, dass das Problem in der Art ist, die ich für diesen textField vor beantrage, aber immer noch Problem ist nur in Excel. Das <style>-Tag überschreibt es einfach auf Standardschriftart und Schriftgröße.

+0

@PetterFriberg ja, habe ich noch eine Frage haben. Ich verwende hier keine bedingten Styles. Problem mit der Schriftüberschreibung – quento

+0

@PetterFriberg und nur in XLSX – quento

+0

Ich denke, das ist ein Fehler, ich habe einige getestet, in XLSX (nicht in xls) das Stilattribut ignoriert wird, wenn Markup mit TextField verwendet wird, werde ich sehen, ob ich finden kann ein Work around, aber wie es ist, ** es ist ein Fehler **. –

Antwort

1

Ich kann denselben Fehler bestätigen, wenn sie xlsx exportieren, Stil ignoriert wird, ist es im Zusammenhang scheint in der XSSFSheet für die Zelle die RichTextString zu schaffen. (Falsche/keine Schrift RichTextString gesetzt?)

EDIT: ich geschaffen habe ein bug issue, dass markiert wird als für den nächsten Release behoben (aktuelle Version war V6.3.0)

Einfache Beispiel zum Reproduzieren des Fehlers

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-Code zu xls exportieren und

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(); 

Ausgang xls (links) xlsx, xlsx (rechts)

result

Zelle A1 in xlsx der Stil ist nicht angewandt

Umgehen

Sie nicht Stil verwendet auf den textField, daher auch den Stil direkt an die textField anzuwenden.

Im Beispiel fügen wir die forecolor="#CC0000" und fontSize="14"-textField und entfernen Sie das Attribut 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

so eine vollständige Antwort, danke! – quento

+0

@quento FYI: Ich habe ein Bug Problem zu öffnen siehe http://community.jaspersoft.com/jasperreports-library/issues/8326, da ich kein verwandtes Problem finden konnte, sind die Jaspis-Berichte Jungs sehr nett, so werden sie wahrscheinlich bald vorbeikommen –

+2

Danke euch allen, dass ihr diesen Bug entdeckt habt. Es wurde nun behoben und das Update wird mit der nächsten JasperReports-Version verfügbar sein. – shertage