저는 현재 Jaspersoft Studio 6.3.0 및 jasperreports-6.2.0.jar을 사용하여 Java 응용 프로그램에서 JasperReports의 보고서를 생성하고 있습니다.
JRBeanCollectionDataSource를 사용하여 여러 xy-line 차트 (단지 한 줄이 아닌)를 만들어야합니다.
List<Coordinates>
한 줄에 대한 데이터 만 포함 된 단일 xy-data 목록으로 작업 하면 올바른 XY- 선 차트를 가지지 만 한 줄만 사용합니다. 하지만 차트에 여러 줄을 그려야하고 그릴 줄의 수는 동적입니다.
JasperReports에 대한 경험이 좋은 사람이 쉽게 해결할 수 있기를 바랍니다. JRBeanCollectionDataSource로 여러 xy-line 차트를 검색해 보았지만 모두 데이터베이스 쿼리를 사용하여 동일한 예제를 가지고 있습니다.
누구든지 재스퍼에 대한 좋은 읽기 자료를 제안 할 수 있습니까? 이것은 저에게 시작에 불과하기 때문입니다. 나중에는 재스퍼 보고서를 사용하여 문서를 생성해야하고 재스퍼에서 제공하는 대부분의 기능을 사용해야한다고 생각합니다. 테이블, 정적 데이터, 목차 등).
콩 클래스 :
public class Coordinates {
public Coordinates(Number xCoordinate, Number yCoordinate) {
super();
this.xCoordinate = xCoordinate;
this.yCoordinate = yCoordinate;
}
public Coordinates() {
}
private Number xCoordinate;
private Number yCoordinate;
public Number getxCoordinate() {
return xCoordinate;
}
public void setxCoordinate(Number xCoordinate) {
this.xCoordinate = xCoordinate;
}
public Number getyCoordinate() {
return yCoordinate;
}
public void setyCoordinate(Number yCoordinate) {
this.yCoordinate = yCoordinate;
}
이것이 내가 보고서를 만드는 방법입니다.
List<List<Coordinates>> coordinatesList = new ArrayList<>();
여러 줄 데이터를 저장할 수 있습니다.
JRBeanCollectionDataSource coordiantesListBean = new JRBeanCollectionDataSource(coordinatesList);
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream projectInputStream = classloader.getResourceAsStream("jasper/xyLineChart.jasper");
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("XYChartDataSource", coordiantesListBean);
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(projectInputStream, parameters,
new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint,FILE_LOCATION);
} catch (JRException e) {
e.printStackTrace();
}
여기 내 xyLineChart.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="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f5d035d9-630a-476c-b3d1-32985d774cb3">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<subDataset name="XYdataset" uuid="276f43e3-9d6c-4df1-85cb-5ea8bef1c28c">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="XYChartDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource">
<parameterDescription><![CDATA[]]></parameterDescription>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<field name="xCoordinate" class="java.lang.Number"/>
<field name="yCoordinate" class="java.lang.Number"/>
</subDataset>
<parameter name="XYChartDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<queryString>
<![CDATA[]]>
</queryString>
<summary>
<band height="283" splitType="Stretch">
<xyLineChart>
<chart evaluationTime="Report">
<reportElement x="0" y="0" width="555" height="283" uuid="9c9ff114-81b4-433f-bf71-17e21ea1fd3e"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<xyDataset>
<dataset>
<datasetRun subDataset="XYdataset" uuid="a8b4a706-dfaf-4347-9410-3c7018fce5f2">
<dataSourceExpression><![CDATA[$P{XYChartDataSource}]]></dataSourceExpression>
</datasetRun>
</dataset>
<xySeries autoSort="true">
<seriesExpression><![CDATA["SERIES 1"]]></seriesExpression>
<xValueExpression><![CDATA[$F{xCoordinate}]]></xValueExpression>
<yValueExpression><![CDATA[$F{yCoordinate}]]></yValueExpression>
</xySeries>
</xyDataset>
<linePlot>
<plot/>
<categoryAxisFormat>
<axisFormat/>
</categoryAxisFormat>
<valueAxisFormat>
<axisFormat/>
</valueAxisFormat>
</linePlot>
</xyLineChart>
</band>
</summary>
</jasperReport>
실제로 여러 줄은 JasperReports에서 여러 시리즈를 의미합니다.
그리고 그것을 해결하기 위해 각 시리즈에 대해 별도의 빈을 만들었습니다. 이것이 최선의 솔루션인지 확실하지 않지만 일종의 저에게 효과적이었습니다.
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream projectInputStream = classloader.getResourceAsStream("jasper/xyLineChart.jasper");
Map<String, Object> parameters = new HashMap<String, Object>();
for(int i = 0 ; i< coordinatesList.size() ; i++){
coordiantesListBean = new JRBeanCollectionDataSource(coordinatesList.get(i));
parameters.put("XYChartDataSource", coordiantesListBean);
}
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(projectInputStream, parameters,
new JREmptyDataSource());
JasperExportManager.exportReportToPdfFile(jasperPrint,FILE_LOCATION);
} catch (JRException e) {
e.printStackTrace();
}
BEAN 클래스에서 추가 시리즈 변수를 만들었습니다.
public class Coordinates {
public Coordinates() {
}
public Coordinates(Number series, Number xCoordinate, Number yCoordinate) {
super();
this.series = series;
this.xCoordinate = xCoordinate;
this.yCoordinate = yCoordinate;
}
private Number series;
private Number xCoordinate;
private Number yCoordinate;
/** getters & setters **/
}
xyLineChart.jrxml
여기에 새로운 Series 변수를 추가했습니다.
<![CDATA[$F{series}.doubleValue()]]>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.0.final using JasperReports Library version 6.3.0 -->
<!-- 2016-07-22T09:37:19 -->
<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="test" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f5d035d9-630a-476c-b3d1-32985d774cb3">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<subDataset name="XYdataset" uuid="276f43e3-9d6c-4df1-85cb-5ea8bef1c28c">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="XYChartDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource">
<parameterDescription><![CDATA[]]></parameterDescription>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<field name="xCoordinate" class="java.lang.Double"/>
<field name="yCoordinate" class="java.lang.Double"/>
<field name="series" class="java.lang.Double"/>
</subDataset>
<parameter name="XYChartDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<queryString>
<![CDATA[]]>
</queryString>
<background>
<band splitType="Stretch"/>
</background>
<summary>
<band height="283" splitType="Stretch">
<xyLineChart>
<chart evaluationTime="Report">
<reportElement x="0" y="0" width="555" height="283" uuid="78aa19cc-8293-4bdd-b9af-5c429db047d2"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<xyDataset>
<dataset>
<datasetRun subDataset="XYdataset" uuid="d121d53d-5698-4914-953e-03df6bf2af6e">
<dataSourceExpression><![CDATA[$P{XYChartDataSource}]]></dataSourceExpression>
</datasetRun>
</dataset>
<xySeries autoSort="true">
<seriesExpression><![CDATA[$F{series}.doubleValue()]]></seriesExpression>
<xValueExpression><![CDATA[$F{xCoordinate}.doubleValue()]]></xValueExpression>
<yValueExpression><![CDATA[$F{yCoordinate}.doubleValue()]]></yValueExpression>
</xySeries>
</xyDataset>
<linePlot>
<plot/>
<categoryAxisFormat>
<axisFormat/>
</categoryAxisFormat>
<valueAxisFormat>
<axisFormat/>
</valueAxisFormat>
</linePlot>
</xyLineChart>
</band>
</summary>
</jasperReport>
산출:
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다