JasperReports - Как запустить отчет с помощью Remote JSON Data Report в Java - PullRequest
0 голосов
/ 12 марта 2020

Folks,

У меня есть отчет, созданный в Studio, в котором используется поставщик данных файла JSON, указывающий на конечную точку GET RESTful с параметрами запроса. В Studio отчет работает нормально при передаче параметров. Сейчас я пытаюсь сгенерировать отчет из консольного приложения Java, но не знаю, как его запустить. Если я передаю ему JSON, он работает хорошо, но как мне заставить его вызвать конечную точку REST? Нужно ли вызывать конечную точку в моем коде, получить JSON и затем передать ее? Я надеялся, что библиотека JasperReports сделает вызов. Ниже приведены соответствующие части проекта. Надеюсь, что кто-то может помочь.

Файл определения отчета

<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="Inventory01" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df013db5-f76e-44d3-b0df-bcbc46d93160">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="InventoryByProduct"/>
    <queryString language="json">
        <![CDATA[products]]>
    </queryString>
    <parameter name="storeno" class="java.lang.String" evaluationTime="Early">
        <property name="net.sf.jasperreports.http.data.url.parameter" value="store"/>
    </parameter>
    <parameter name="locale" class="java.lang.String" evaluationTime="Early">
        <property name="net.sf.jasperreports.http.data.url.parameter" value="locale"/>
    </parameter>
    <parameter name="product" class="java.lang.String" evaluationTime="Early">
        <property name="net.sf.jasperreports.http.data.url.parameter" value="product"/>
    </parameter>

Код Java

InputStream employeeReportStream = getClass().getResourceAsStream(reportFile);
jasperReport = JasperCompileManager.compileReport(employeeReportStream);

Map<String, Object> parameters = new HashMap<>();
parameters.put("locale", "en");
parameters.put("product", "680680976804");
parameters.put("storeno", "260");

//************ HOW SHOULD I CREATE THE JsonDataSource OBJECT AND PASS IT TO THE LIBRARY TO EXECUTE?
//************ IF ds WERE A JSON DOCUMENT, IT PRINTS CORRECTLY, BUT I NEED IT TO CALL THE URL OF THE 
//************ RESTFUL ENDPOINT
//            JsonDataSource ds = new JsonDataSource(jsonDataStream);
//            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, ds); 

Спасибо

1 Ответ

0 голосов
/ 12 марта 2020

Так что я получил его на работу. Для тех, кто сталкивается с той же проблемой, ниже приведено решение.

Поместите определение адаптера Json в каталог вашего проекта: снимок экрана структуры проекта

В определении отчета jr xml:

<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="Inventory01" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df013db5-f76e-44d3-b0df-bcbc46d93160">
    <property name="net.sf.jasperreports.data.adapter" value="data/inventorydataadapter.xml"/>

Тогда в вашем Java коде:

            InputStream employeeReportStream = getClass().getResourceAsStream(reportFile);
            jasperReport = JasperCompileManager.compileReport(employeeReportStream);

            Map<String, Object> parameters = new HashMap<>();
            parameters.put("locale", "en");
            parameters.put("product", "680680976804");
            parameters.put("storeno", "260");

            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters);

            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
            exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputPdf));
            SimplePdfReportConfiguration reportConfig = new SimplePdfReportConfiguration();
            reportConfig.setSizePageToContent(true);
            reportConfig.setForceLineBreakPolicy(false);
            SimplePdfExporterConfiguration exportConfig = new SimplePdfExporterConfiguration();
            exportConfig.setMetadataAuthor("Ali M");
            exportConfig.setEncrypted(true);
            exportConfig.setAllowedPermissionsHint("PRINTING");
            exporter.setConfiguration(reportConfig);
            exporter.setConfiguration(exportConfig);

            exporter.exportReport();

Вот и все!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...