powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ireport json java
10 сообщений из 10, страница 1 из 1
ireport json java
    #39135407
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача построить отчет из данных в формате JSON средствами jasper ireport. Проблема в том,что мой отчет работает в Eclipse с Json из файла, а средствами java получаю отчет без данных.Я так понимаю проблема в этом куске <![CDATA[$P{REPORT_DATA_SOURCE}]]>, но что нужно использовать для вывода данных?
report.jrxml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.1.1.final using JasperReports Library version 6.1.1  -->
<!-- 2015-12-23T12:06:41 -->
<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="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="79238ab2-f1f6-4c4e-934d-83d56b0a9736">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="Json file"/>
    <style name="table">
        <box>
            <pen lineWidth="1.0" lineColor="#000000"/>
        </box>
    </style>
    <style name="table_TH" mode="Opaque" backcolor="#F5F5DC">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="table_CH" mode="Opaque" backcolor="#FFFFBF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
        </box>
    </style>
    <style name="table_TD" mode="Opaque" backcolor="#FFFFFF">
        <box>
            <pen lineWidth="0.5" lineColor="#000000"/>
        </box>
        <conditionalStyle>
            <conditionExpression><![CDATA[new Boolean($V{REPORT_COUNT}.intValue()%2==0)]]></conditionExpression>
            <style backcolor="#FFFFEF"/>
        </conditionalStyle>
    </style>
    <subDataset name="Table Dataset 1" uuid="2bcb141e-d376-4fb4-b084-a527c2bce849">
        <field name="otves_num" class="java.lang.String"/>
        <field name="otves_date" class="java.lang.String"/>
    </subDataset>
    <queryString language="json">
        <![CDATA[rows]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch"/>
    </title>
    <detail>
        <band height="70" splitType="Stretch">
            <componentElement>
                <reportElement key="table" style="table" x="-10" y="20" width="555" height="50" uuid="7897afdc-0ea4-4f23-92dd-b742b47229bf"/>
                <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="AllSectionsNoDetail">
                    <datasetRun subDataset="Table Dataset 1" uuid="eb9a23dc-8e49-42ac-b296-c69962525bd3">
                        <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="90" uuid="826306d5-a0d5-44ea-886f-48edb3af159d">
                        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
                        <jr:tableHeader style="table_TH" height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="90" height="30" uuid="ec1a8b2a-35c8-4759-b6b2-a2591553f9fa"/>
                                <textElement>
                                    <font fontName="DejaVu Sans Mono" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Отвес]]></text>
                            </staticText>
                        </jr:tableHeader>
                        <jr:detailCell style="table_TD" height="20">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="20" uuid="cf0f2875-ddd5-4ea4-af0e-aa4bd56076c6"/>
                                <textElement>
                                    <font fontName="DejaVu Sans Mono"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{otves_num}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="90" uuid="5eeffefc-7508-4128-9a3e-60d811d86787">
                        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/>
                        <jr:tableHeader style="table_TH" height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="90" height="30" uuid="33a16386-45e7-4675-8829-770ecde346fd"/>
                                <textElement>
                                    <font fontName="DejaVu Sans Mono" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Дата]]></text>
                            </staticText>
                        </jr:tableHeader>
                        <jr:detailCell style="table_TD" height="20">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="20" uuid="54383b5f-2c28-4212-a0b4-894b268a899e"/>
                                <textElement>
                                    <font fontName="DejaVu Sans Mono"/>
                                </textElement>
                                <textFieldExpression><![CDATA[$F{otves_date}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </detail>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>



file.json
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
{
"rows" : 

[
	{
		
		"otves_num": "43 2006",		
		"otves_date": "18.02.2006"
	},

	{
		
		"otves_num": "237 2006",
		"otves_date": "05.09.2006"
	}
]
}



JasperReportGenerator.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
package com.himprom;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;

import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JsonDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;

public class JasperReportGenerator {

	public JasperReportGenerator() {
	}

	
	public static void runReport()
			throws net.sf.jasperreports.engine.JRException, FileNotFoundException, UnsupportedEncodingException {
		

		String reportFileName = "report";
		File reportFile = new File("/home/jane/jasper/" + reportFileName + ".jrxml");
		
		JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
		System.out.println("Done with load!");
		JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
		System.out.println("Done with compileReport!");
		JRParameter[] jrParameters = jasperReport.getParameters();
		for (JRParameter param : jrParameters) {
			System.out.println("Parameter : " + param.getName());
			System.out.println("    Class Name: " + param.getValueClassName());
			System.out.println("    isSystemDefined: " + param.isSystemDefined());
		}	
         String flatJSON = "{\n" + 
         		"\"rows\" : \n" + 
         		"\n" + 
         		"[\n" + 
         		"	{\n" + 
         		"		\n" + 
         		"		\"otves_num\": \"43 2006\",		\n" + 
         		"		\"otves_date\": \"18.02.2006\"\n" + 
         		"	},\n" + 
         		"\n" + 
         		"	{\n" + 
         		"		\n" + 
         		"		\"otves_num\": \"237 2006\",\n" + 
         		"		\"otves_date\": \"05.09.2006\"\n" + 
         		"	}\n" + 
         		"]\n" + 
         		"}";
        InputStream iStream = new ByteArrayInputStream(flatJSON.getBytes());
         JsonDataSource  jsonDataSource = new JsonDataSource(iStream);
         JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), jsonDataSource);
         String dest = "/home/jane/test.pdf";
         JasperExportManager.exportReportToPdfFile(jasperPrint,dest);			
	}

	public static void main(String[] args)
			throws net.sf.jasperreports.engine.JRException, FileNotFoundException, UnsupportedEncodingException {		
		runReport();		
	}
}
...
Рейтинг: 0 / 0
ireport json java
    #39135580
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

Мин в коде вроде не видно. Таблица в detail, я обычно кидаю в summary, но это я может устарел.
Почему надо сразу ваять таблицы, а не отладиться с полями основного отчета (не subDataset). В таблицах граблей там поназаложено...
Проблема то в чем? Результат работы отчета какой?
...
Рейтинг: 0 / 0
ireport json java
    #39135644
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sanBez,таблица пустая при формировании в java
...
Рейтинг: 0 / 0
ireport json java
    #39135685
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

Какие результаты если

a) убить таблицу с сабдатасетом, определить поля в отчете и кинуть их просто в detail без таблицы
б) перенести таблицу в summary
...
Рейтинг: 0 / 0
ireport json java
    #39135789
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашла я один секретик JsonDataSource jsonDataSource = new JsonDataSource(iStream,"rows"); , важен 2-й параметр, учитываю мою структуру json.
...
Рейтинг: 0 / 0
ireport json java
    #39135841
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему-то при выводе таблицы не выходит первый элемент из массива json....
...
Рейтинг: 0 / 0
ireport json java
    #39135892
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gema,

Вообще-то странно. Второй параметр там это select expression, который у тебя в queryString уже есть.

код jasper
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	public JsonDataSource(InputStream stream) throws JRException {
		this(stream, null);
	}
	
	public JsonDataSource(InputStream jsonStream, String selectExpression) throws JRException {
		try {
			this.jsonStream = jsonStream;
			this.mapper = new ObjectMapper();
			
			mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
			mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
			mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
			
			this.jsonTree = mapper.readTree(jsonStream);
			this.selectExpression = selectExpression;
			
			moveFirst();
		} catch (JsonProcessingException e) {
			throw new JRException(e);
		} catch (IOException e) {
			throw new JRException(e);
		}
	}



По поводу отсутствия первой записи - стандартные грабли таблицы (я предупреждал). Попробуй передать JsonDataSource через хэшмап параметров отчета (второй параметр fillReport) и использовать в датасет таблицы для DataSource этот параметр, а не $P{REPORT_DATA_SOURCE}
...
Рейтинг: 0 / 0
ireport json java
    #39136669
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, мне тоже показалось странным зачем повторно указывать selectExpression,но это решило проблему.

Передала JsonDataSource в качестве HashMap параметра и стали все данные из массива выходить. sanBez , спасибо.

А отсутствие первой строки в таблицах- это есть такая проблема . Почитала на форумах, самое простое решение пустой первый элемент добавить.
...
Рейтинг: 0 / 0
ireport json java
    #39136670
gema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблемы решены, СПАСИБО.
...
Рейтинг: 0 / 0
ireport json java
    #39138201
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gemaА отсутствие первой строки в таблицах- это есть такая проблема http://mergetag.com/jasperreport-fisrt-row-in-table-component-is-missing . Почитала на форумах, самое простое решение пустой первый элемент добавить.
Угу. Понадобилось поменять сортировку в отчете на descending. Хотя тут может и прокатит. Или допустим в отсортированной входной коллекции компаратор поменялся...
И опля в отчете появилась пустая строка а реальная запись исчезла.
Заколебешься вспоминать и искать ошибку если проект давнишний.
Нафиг нафиг. Пусть студенты так лабы сдают.
ИМХО
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ireport json java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]