簡體   English   中英

JasperReports 導出到 Excel 僅使用最后設置的背景顏色

[英]JasperReports export to Excel uses only last set background color

我對 Dynamic-Jasper 非常陌生,但由於工作原因,我不得不向我們已經實施的解決方案添加一個新功能。

我的問題

目標是將一個列添加到僅包含基於某些信息的背景顏色的報告中。 我設法做到了,但在測試時我偶然發現了一個問題。 雖然我在 html 和 pdf 視圖中的所有列都具有正確的顏色,但 Excel 僅使用最后一種顏色為字段着色。

在調試時我注意到,相同顏色的字段具有相同的模板 ID,但是雖然所有視圖都運行大部分相同的代碼,但 Excel 顯示不同的行為並且在所有字段中具有相同的 ID。

我在其中操作模板的代碼

for(JRPrintElement elemt : jasperPrint.getPages().get(0).getElements()) {
         if(elemt instanceof JRTemplatePrintText) {
                   JRTemplatePrintText text = (JRTemplatePrintText) elemt;
                   (...)
                   if (text.getFullText().startsWith("COLOR_IDENTIFIER")) {
                            String marker = text.getFullText().substring(text.getFullText().indexOf('#') + 1);
                            text.setText("ID = " + ((JRTemplatePrintText) elemt).getTemplate().getId());
                            int rgb = TypeConverter.string2int(Integer.parseInt(marker, 16) + "", 0);
                            ((JRTemplatePrintText) elemt).getTemplate().setBackcolor(new Color(rgb));
                   }
         }
}

html視圖

Excel 視圖

臨時結論

相同的樣式在后台使用相同的對象,而 JR-Excel 導出通過將相同的對象分配給我在那里操作的所有字段來搞砸。 如果有人知道我的錯誤或潛在的解決方案來改變不同的東西以產生同樣的結果,請告訴我。

我之前嘗試過的不同方法是嘗試在 Jasper 調用的評估方法中設置字段。 在該方法中,我們分配每個字段的文本值。 它包含一個帶有 JRFillFields 的地圖,但不幸的是 Map-Implementation 拒絕訪問它們,只是重新調整了它們的值。 該地圖由 dj 提供,無法與其他地圖切換。

編輯

我們正在使用 JasperReports 6.7.1

我找到了一個解決方案,我用一個看起來完全一樣的新模板替換了每個模板。 這樣每個 Field 都有自己的 ID 保證,並且它不是偶然的,JasperReports 如何在內部處理其數據。

JRTemplateElement custom = 
   new JRTemplateText(((JRTemplatePrintText) elemt).getTemplate().getOrigin(), 
   ((JRTemplatePrintText) elemt).getTemplate().getDefaultStyleProvider());
custom.setBackcolor(new Color(rgb));
custom.setStyle(((JRTemplatePrintText) elemt).getTemplate().getStyle());
((JRTemplatePrintText) elemt).setTemplate(custom);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM