Работа с SVG-файлами в iReport дает JRExpressionEvalException: ошибка при вычислении выражения: исходный текст
Я работал в веб-проекте, где клиенту нужно показывать отчет как карточку Id. Я разработал структуру отчета в Illustrator и экспортировал как SVG, поэтому BatikRenderer обрабатывает файл и показывает его в отчете. А в iReport просто включите поля, которые я собираюсь показать. Так что в основном это работает в iReport Designer 5.5.0.
Когда я скомпилирую его и покажу превью. Кажется, все в порядке.
Вот мой 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="prueba" whenNoDataType="AllSectionsNoDetail" language="groovy" pageWidth="180" pageHeight="288" columnWidth="180" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="2cedbacf-8972-4cbe-bf07-7d3af62126d5">
<detail>
<band height="288" splitType="Stretch">
<image>
<reportElement x="0" y="0" width="180" height="288" uuid="3c8031c1-70ca-4e47-be8e-735b90b7797a"/>
<imageExpression class="net.sf.jasperreports.engine.JRRenderable"><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromLocation("svg-design.svg")]]></imageExpression>
</image>
</band>
</detail>
</jasperReport>
Я использовал другой вариант с абсолютным путем, и он тоже работает:
<![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File("/Users/RogelioMonge/Dropbox/Adepafut/src/java/com/adepafut/common/reports/svg-design.svg"))]]>
Проблема в том, когда я пытаюсь выполнить отчет из моего приложения. Я использую свой отчет с пустым источником данных, просто для теста SVG, мне нужно сначала добиться этого, чтобы я мог продолжить заполнение отчета с помощью источника данных.
Вот фиктивный код, который я использовал для проверки отчета:
try {
Map<String, Object> parameters = new HashMap<String, Object>();
JRDataSource dataSource = null;
InputStream report = this.getClass().getClassLoader().getResourceAsStream(JugadorReportEnum.PATH_REPORT.getValue());
JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource);
JasperViewer jv = new JasperViewer(jasperPrint, false);
jv.viewReport(jasperPrint, false);
} catch (JRException ex) {
Logger.getLogger(ReportHandler.class.getName()).log(Level.SEVERE, null, ex);
}
Вот исключение:
ex = (net.sf.jasperreports.engine.fill.JRExpressionEvalException)net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : net.sf.jasperreports.renderers.BatikRenderer.getInstanceFromLocation("svg-design.svg")
1 ответ
Я решил это! Я забыл включить библиотеки батика в свой проект. В моем случае я использую MAC OS. Я искал библиотеки батика в папке Ireport Designer.app/Contents/Resources/ireport/ireport/modules/ext/. Так что вам не нужно скачивать. Этот способ лучше, так что вы должны убедиться, что используете те же банки, что и ваш Ireport Designer. Между прочим, вам понадобится xml-apis-ext.jar, это зависимость для баночных батиков. Этот можно найти в той же папке Ireport Designer. Добавьте все эти фляги к своему пути к классу, и готово. Это обсуждение очень помогло. Батик не в классе