Как получить одинаковые стили в DynamicReports и JasperReports

Я хотел бы найти лучшее решение для использования одинаковых стилей для dynamicReports и jasperReports. Я начал использовать dynamicReports, однако мне было сложно создавать там необычные отчеты. Гораздо проще это было сделать в графическом конструкторе iReport. Так что теперь у меня есть 50% отчетов, которые работают на Dynamic и 50% на Jasper.

Теперь я не могу решить проблему со стилем. Я создал стили, шрифты и т. д. в классе Template и использовал его для DynamicReports. После некоторой магии, например:

.setName("cellCenterStyle");
template().setColumnStyle(cellStyle)

Я смог использовать их для яшмы, но это не полное решение, так как некоторые опции все еще не работают, например:

.setDetailEvenRowStyle(Template.evenIntensivStyle)

работает с динамическим, но джаспер игнорирует.

Итак, вопрос:

Могу ли я использовать одинаковые стили для динамики и яшмы с четкой структурой и без лишней «магии». Я бы предпочел такое решение, как стили *.css, но буду признателен за любую помощь.


person quento    schedule 28.07.2016    source источник
comment
это не точная копия, но я думаю, что в ней есть то, что вы ищете, или, по крайней мере, это хорошая отправная точка.   -  person Petter Friberg    schedule 28.07.2016
comment
@DaveJarvis мне кажется, что ему нравится решение в стиле CSS, а это внешние стили ... ему просто нужно выяснить, как загружать их динамические отчеты   -  person Petter Friberg    schedule 28.07.2016
comment
@PetterFriberg: Да, это часть проблемы. Вторая проблема заключается в том, что половина из них находится в DynamicJasper, а другая половина используется в iReport. Другой ответ не касается того, как ссылаться на один и тот же набор стилей из двух разных сред отчетов.   -  person Dave Jarvis    schedule 28.07.2016


Ответы (1)


Используйте параметр для ссылки на относительный (или абсолютный) путь к файлу стилей. Например, основной отчет может содержать:

<template><![CDATA[$P{P_REPORT_STYLES_PATH} + "FontStyle.jrtx"]]></template>
<parameter name="P_REPORT_BASE" class="java.lang.String">
    <defaultValueExpression><![CDATA[""]]></defaultValueExpression>
</parameter>
<parameter name="P_REPORT_RESOURCES_PATH" class="java.lang.String">
    <defaultValueExpression><![CDATA[$P{P_REPORT_BASE} + "resources/"]]></defaultValueExpression>
</parameter>
<parameter name="P_REPORT_STYLES_PATH" class="java.lang.String">
    <defaultValueExpression><![CDATA[$P{P_REPORT_RESOURCES_PATH} + "styles/"]]></defaultValueExpression>
</parameter>

Это позволяет отчету в iReport (или Jaspersoft Studio) ссылаться на относительный путь к стилям отчета, например:

resources/styles/FontStyle.jrtx

Этот путь относится к расположению файла отчета .jasper.

Затем в DynamicJasper вы можете передать параметр отчета. Вызов API в DynamicJasper может не совпадать с вызовом API для следующего вызова библиотеки JasperReports, но он должен быть достаточно похож, чтобы понять идею:

    reportParameters.put("P_REPORT_BASE", "/home/user/dev/reports/workspace");
    JasperFillManager.fillReport(..., reportParameters, dataSource);

Если предположить, что /home/user/dev/reports/workspace является расположением файлов .jasper, а также расположением рабочей области для iReport/Jaspersoft Studio, то и DynamicJasper, и среда разработки отчетов найдут и будут использовать один и тот же файл стилей.

Полный путь к файлу стилей в этом примере будет таким:

/home/user/dev/reports/workspace/resources/styles/FontStyle.jrtx

Ваши пути к каталогам, конечно, будут отличаться.


На этом этапе вы можете ссылаться на одни и те же стили в обеих средах. Смотрите также:

person Dave Jarvis    schedule 28.07.2016