Я довольно новичок в Dynami c -Jasper, но из-за работы мне пришлось добавить новую функцию в наше уже реализованное решение.
Моя проблема
Цель состоит в том, чтобы добавить столбец к отчету, который состоит только из фона, основанного на некоторой информации. Мне удалось это сделать, но во время тестирования я наткнулся на проблему. В то время как все мои столбцы в представлении html и pdf имели правильный цвет, в Excel один окрашивал только поля в последнем цвете.
Во время отладки я заметил, что одинаковые цветные поля имеют одинаковый templateId, но в то время как все представления выполняются в основном в одном и том же коде, Excel показывал разное поведение и имел одинаковый идентификатор во всех полях.
Мой код, где я манипулировал шаблоном
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 портит что-то, назначая один и тот же объект всем полям, которыми я там манипулировал. Если кто-то знает о моей ошибке или потенциальном Решении изменить что-то другое, чтобы привести к тому же самому, пожалуйста, дайте мне знать.
Что-то другое, что я пробовал ранее, пытался установить поле в методе оценки, который вызывался Джаспер. В этом методе мы присваиваем текстовое значение каждому полю. Он содержал карту с JRFillFields, но, к сожалению, Map-реализации отказал в доступе к ним и просто переназначил их значение. Карта была предоставлена dj и не может быть переключена на другую.
Редактировать
Мы используем JasperReports 6.7.1