2016-08-02 26 views
17

Sau khi có thể thêm nguồn dữ liệu tùy chỉnh từ đậu java vào báo cáo theo Add custom data source to Jaspersoft Studio, tôi nhận được đến điểm thứ hai của báo cáo của tôi với jasper.Làm việc với nhiều nguồn dữ liệu trong studio jaspersoft

Tôi có báo cáo chính sử dụng cơ sở dữ liệu làm nguồn dữ liệu. Sau đó, tôi thêm một nguồn dữ liệu bean.xml vào báo cáo và thêm một bảng vào báo cáo chính sử dụng nguồn dữ liệu bean.xml này để lấy các hạt java.

Mục tiêu của tôi là để có được một giá trị trường từ báo cáo chính và thao tác giá trị của nó, sau đó điền đậu với các giá trị và cuối cùng điền vào bảng với đậu.

Để thực hiện điều này, tôi đã viết 3 lớp mà tôi sử dụng như Scriptlet trong các dữ liệu bảng thiết:

Đây là một minh chứng về những gì tôi cần phải làm: enter image description here

Vấn đề là trong lớp FillTable, khi tôi chúng tôi String kNFormelGG = (String) this.getParameterValue("gg"); bean.xml đã tạo không thành công kết nối thử nghiệm với java.lang.reflect.InvocationTargetException

Caused by: java.lang.NullPointerException 
at net.sf.jasperreports.engine.JRAbstractScriptlet.getParameterValue(JRAbstractScriptlet.java:95) 
at net.sf.jasperreports.engine.JRAbstractScriptlet.getParameterValue(JRAbstractScriptlet.java:86) 
at org.iqtig.reporting.dataSource.bean.dataSourceXML.FillTable.fillTable(FillTable.java:45) 
at org.iqtig.reporting.dataSource.bean.dataSourceXML.JRDataSourceFactory.createCollection(JRDataSourceFactory.java:27) 
... 34 more 

Nếu tôi chỉ định giá trị sửa lỗi như String kNFormelGG ="Test me" kết nối bean không gặp lỗi và sau khi gán bean.xml làm giá trị cho Bộ điều hợp dữ liệu mặc định trong Tập dữ liệu, nó sẽ điền vào bảng có giá trị tĩnh. Làm cách nào để lấy dữ liệu từ tham số hoặc giá trị động từ nguồn dữ liệu báo cáo chính và sử dụng nó trong các bean? Tôi có giả định rằng tại thời điểm gọi lớp nhà máy tĩnh từ bộ điều hợp của tôi, các trường vẫn trống. Có lẽ tôi sai nhưng tôi không tìm thấy bất kỳ tuyên bố nào khác cho vấn đề này.

BeanFactory Lớp

import java.util.Collection; 
import net.sf.jasperreports.engine.JRDefaultScriptlet; 
import net.sf.jasperreports.engine.JRScriptletException; 

/** 
* Factory for TableCellsBean Klasse 
* 
* @author iman.gharib 
*/ 

public class JRDataSourceFactory extends JRDefaultScriptlet { 

/** 
* @return collection der TableCellsBean Objekten 
* @throws JRScriptletException 
*/ 
public static Collection<TableCellsBean> createCollection() 
     throws JRScriptletException { 
    FillTable ft = new FillTable(); 
    Collection<TableCellsBean> reportRows = ft.fillTable(); 
    return reportRows; 
} 

} 

Bean Lớp

public class TableCellsBean { 

private String fieldName; 
private String keyFormel; 
private String mK; 
private String notation; 
private String item; 

/** 
* Constructor. 
* 
* @param fieldName 
* @param keyFormel 
* @param mK 
* @param notation 
* @param item 
*/ 
public TableCellsBean(final String fieldName, final String keyFormel, final String mK, final String notation, final String item) { 
    this.fieldName = fieldName; 
    this.keyFormel = keyFormel; 
    this.mK = mK; 
    this.notation = notation; 
    this.item = item; 
} 

/** 
* Constructo Leer 
*/ 
public TableCellsBean() { 

} 
public TableCellsBean getme() { 
    return this; 
} 
// getter and setters 
} 

lớp để chuẩn bị và tạo ra đậu

public class FillTable extends JRDefaultScriptlet { 
@Override 
public void afterColumnInit() 
     throws JRScriptletException { 
    fillTable(); 
} 
public ArrayList<String> splitGGArray(final String kNFormelGG) { 
    ArrayList<String> fieldNames = new ArrayList<>(); 
    String[] array = (kNFormelGG.split(" ")); 
    for (String sub : array) { 
     fieldNames.add(sub); 
    } 
    return fieldNames; 
} 
public Collection<TableCellsBean> fillTable() 
     throws JRScriptletException { 
// gg is a parameter for table dataset. It is mapped to KN_FormelGG 
// which comes from the main report data base 
    String kNFormelGG = (String) this.getParameterValue("gg"); 
    List<TableCellsBean> listTableCells = new ArrayList<>(); 
    // TableCellsBean tableCell = new TableCellsBean(); 
    for (String fn : splitGGArray(kNFormelGG)) { 
     listTableCells.add(new TableCellsBean(fn, fn, fn, fn, fn)); 
     // listTableCells.add(tableCell); 
    } 
    // JRBeanCollectionDataSource tableCellJRBean = new JRBeanCollectionDataSource(listTableCells); 
    // Map<String, Object> parameters = new HashMap<>(); 
    // parameters.put("FieldDataSource", tableCellJRBean); 
    return listTableCells; 
} 
} 

JRXML

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Created with Jaspersoft Studio version 6.3.0.final using JasperReports Library version 6.3.0 --> 
<!-- 2016-08-08T14:30:03 --> 
<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="main" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4f1480cf-f8f9-420f-96b4-7fc1e41e791b"> 
    <property name="com.jaspersoft.studio.data.sql.tables" value=""/> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="QIDBReport"/> 
    <style name="Table_TH" mode="Opaque" backcolor="#F0F8FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="Table_CH" mode="Opaque" backcolor="#BFE1FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="Table_TD" mode="Opaque" backcolor="#FFFFFF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
      <topPen lineWidth="0.5" lineColor="#000000"/> 
      <leftPen lineWidth="0.5" lineColor="#000000"/> 
      <bottomPen lineWidth="0.5" lineColor="#000000"/> 
      <rightPen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <subDataset name="Dataset1" uuid="5677929d-813b-4d39-828c-de966a9d7689"> 
     <property name="com.jaspersoft.studio.data.defaultdataadapter" value="bean.xml"/> 
     <property name="net.sf.jasperreports.data.adapter" value="bean.xml"/> 
     <scriptlet name="Scriptlet_1" class="org.iqtig.reporting.dataSource.bean.mapBeanAsDatasource.JRDataSourceFactory"/> 
     <parameter name="gg" class="java.lang.String"/> 
     <field name="item" class="java.lang.String"> 
      <fieldDescription><![CDATA[item]]></fieldDescription> 
     </field> 
     <field name="fieldName" class="java.lang.String"> 
      <fieldDescription><![CDATA[fieldName]]></fieldDescription> 
     </field> 
     <field name="me" class="org.iqtig.reporting.dataSource.bean.dataSourceXML.TableCellsBean"> 
      <fieldDescription><![CDATA[me]]></fieldDescription> 
     </field> 
     <field name="keyFormel" class="java.lang.String"> 
      <fieldDescription><![CDATA[keyFormel]]></fieldDescription> 
     </field> 
     <field name="mK" class="java.lang.String"> 
      <fieldDescription><![CDATA[mK]]></fieldDescription> 
     </field> 
    </subDataset> 
    <parameter name="LB_ID" class="java.lang.Integer"> 
     <defaultValueExpression><![CDATA[62]]></defaultValueExpression> 
    </parameter> 
    <parameter name="KN_OffeziellGruppe" class="java.lang.Integer"> 
     <defaultValueExpression><![CDATA[3]]></defaultValueExpression> 
    </parameter> 
    <parameter name="FieldDataSource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" isForPrompting="false"/> 
    <parameter name="KN_FormelGG" class="java.lang.String" isForPrompting="false"/> 
    <queryString> 
     <![CDATA[select * from "KennzahlReferenz2015_QIBericht", "Images" 
where LB_ID = $P{LB_ID} 
and KN_OffiziellGruppe = $P{KN_OffeziellGruppe} 
and IMG_ID = 1]]> 
    </queryString> 
    <field name="QI_Praefix" class="java.lang.String"/> 
    <field name="KN_Id" class="java.lang.Integer"/> 
    <field name="bewertungsArtTypNameKurz" class="java.lang.String"/> 
    <field name="refbereich" class="java.lang.String"/> 
    <field name="refbereichVorjahres" class="java.lang.String"/> 
    <field name="KN_GGAlleinstehend" class="java.lang.String"/> 
    <field name="erlaueterungDerRechregeln" class="java.lang.String"/> 
    <field name="teildatensatzbezug" class="java.lang.String"/> 
    <field name="mindesanzahlZaeler" class="java.lang.Integer"/> 
    <field name="mindesanzahlNenner" class="java.lang.Integer"/> 
    <field name="KN_FormelZ" class="java.lang.String"/> 
    <field name="KN_FormelGG" class="java.lang.String"/> 
    <field name="verwendeteFunktionen" class="java.lang.String"/> 
    <field name="idLb" class="java.lang.String"/> 
    <field name="LB_LangBezeichnung" class="java.lang.String"/> 
    <field name="LB_ID" class="java.lang.Integer"/> 
    <field name="nameAlleinstehend" class="java.lang.String"/> 
    <field name="KN_BezeichnungAlleinstehendKurz" class="java.lang.String"/> 
    <field name="QI_ID" class="java.lang.Integer"/> 
    <field name="IMG_ID" class="java.lang.Integer"/> 
    <field name="Name" class="java.lang.String"/> 
    <field name="Image" class="java.lang.Object"/> 
    <group name="id" isStartNewPage="true"> 
     <groupExpression><![CDATA[$F{KN_Id}]]></groupExpression> 
     <groupHeader> 
      <band height="44"/> 
     </groupHeader> 
     <groupFooter> 
      <band height="50"/> 
     </groupFooter> 
    </group> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="44" splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band height="35" splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band height="34" splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="149" splitType="Stretch"> 
      <componentElement> 
       <reportElement x="170" y="20" width="350" height="100" uuid="38d917fb-dfc2-4c08-890a-09cfe6e2214d"> 
        <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/> 
        <property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/> 
        <property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/> 
        <property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/> 
        <property name="net.sf.jasperreports.export.headertoolbar.table.name" value=""/> 
        <property name="com.jaspersoft.studio.components.autoresize.proportional" value="true"/> 
       </reportElement> 
       <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="Dataset1" uuid="1b3548f6-7d6b-4070-bb8e-aaefbabdc7c9"> 
         <datasetParameter name="gg"> 
          <datasetParameterExpression><![CDATA[$F{KN_FormelGG}]]></datasetParameterExpression> 
         </datasetParameter> 
        </datasetRun> 
        <jr:column width="70" uuid="048812d7-0ed1-4db8-a09a-e6242f77c6ce"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"/> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="c5aaea84-1367-41df-be8d-7f71e3ea5153"/> 
           <textFieldExpression><![CDATA[$F{item}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="70" uuid="11b85ada-c9fe-42b6-a646-8bd1697cdec2"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"/> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="728ff44d-1dbd-404c-b8b3-7cc0e1f07f60"/> 
           <textFieldExpression><![CDATA[$F{fieldName}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="70" uuid="892f30cb-fb41-444f-889b-1e005484c35e"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column3"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"/> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="e38ac951-71bc-45a6-8ed2-313805a77050"/> 
           <textFieldExpression><![CDATA[$F{keyFormel}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="70" uuid="7d0d700a-5a75-4c26-94c0-9ef7c53bd719"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column4"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="68577007-0344-406c-8aa2-3127d1da1c65"/> 
          </textField> 
         </jr:tableHeader> 
         <jr:detailCell style="Table_TD" height="30"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="873d63c1-1b91-4441-b7bd-f67db7729e7f"/> 
           <textFieldExpression><![CDATA[$F{mK}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="70" uuid="cf5a1a2f-594d-429f-8925-62d001e1dd00"> 
         <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column5"/> 
         <jr:tableHeader style="Table_TH" height="30" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="70" height="30" uuid="7fb46eb8-d0e1-44ab-89f9-ec31d49b8109"/> 
           <textFieldExpression><![CDATA[$P{gg}]]></textFieldExpression> 
          </textField> 
         </jr:tableHeader> 
         <jr:detailCell style="Table_TD" height="30"/> 
        </jr:column> 
       </jr:table> 
      </componentElement> 
      <textField> 
       <reportElement x="20" y="80" width="100" height="30" uuid="b89cd04c-2569-43ef-9730-445b874855dd"/> 
       <textFieldExpression><![CDATA[$F{KN_FormelGG}]]></textFieldExpression> 
      </textField> 
      <staticText> 
       <reportElement x="20" y="32" width="100" height="30" uuid="e91b4461-5e53-4f85-8992-14e69a1aa05f"/> 
       <text><![CDATA[KN_FormelGG]]></text> 
      </staticText> 
     </band> 
    </detail> 
    <columnFooter> 
     <band height="45" splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band height="54" splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band height="42" splitType="Stretch"/> 
    </summary> 
</jasperReport> 
+0

** gg ** là thông số được xác định trong Datase1 cho bảng. Tham số này lấy giá trị của trường ** KN_FomelGG ** từ báo cáo chính. ánh xạ được thực hiện bằng cách thêm tham số bộ dữ liệu trong hộp thoại thông số bộ dữ liệu – Iman

+0

Tôi nghĩ bạn có một [vấn đề XY] (http: //meta.stackexchange.com/questions/66377/what-is-the-xy-problem), tôi đã trả lời liên quan đến ** mục tiêu của bạn **, không liên quan đến mã hiện tại của bạn, do đó bỏ qua tất cả mã scriplet có lỗi liên quan, v.v. –

Trả lời

4

Mục tiêu của tôi là để có được một giá trị trường từ báo cáo chính và thao tác giá trị của nó, sau đó điền đậu với các giá trị và cuối cùng điền vào bảng với đậu.

Tôi sẽ bỏ qua tất cả các tập lệnh và mã khác của bạn và chỉ cho bạn cách đơn giản nhất để tạo nguồn dữ liệu động cho thành phần khác sử dụng trường hiện tại, biến hoặc giá trị tham số.

Như dụ chúng ta sẽ có những giá trị String trong field1 (ROW1, row2)

Test1_1.23:Test2_4.32:Test3_1.08 
Test1_2.12:Test2_5.12:Test3_2.13 

Chúng tôi muốn chia trên : và tạo ra các hàng (Danh sách đậu), sau đó tách trên _ để tạo ra cột (các thuộc tính trên bean) và hiển thị nó trong một thành phần jr:table.

mã java (hoặc Bean)

public class TableCellsBean { 

    private String name; 
    private double value; 

    public TableCellsBean(String name,double value){ 
     this.name = name; 
     this.value = value; 
    } 
    public static JRBeanCollectionDataSource getDatasource(String fieldValue){ 
     List<TableCellsBean> retList = new ArrayList<>(); 
     String[] values = fieldValue.split(":"); 
     for (String v : values) { 
      String[] sp = v.split("_"); 
      retList.add(new TableCellsBean(sp[0], Double.parseDouble(sp[1]))); 
     } 
     return new JRBeanCollectionDataSource(retList); 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public double getValue() { 
     return value; 
    } 
    public void setValue(double value) { 
     this.value = value; 
    } 
} 

Như bạn có thể nhìn thấy đã được bên trong lớp bean này, tôi đã thêm một phương pháp tĩnh mà trả về một JRBeanCollectionDataSource tùy thuộc vào giá trị thông qua như là tham số.

Về cơ bản bạn vượt qua một fieldValue phương pháp này, nó một số logic, tạo ra TableCellBean, thêm chúng vào danh sách và trả về một JRBeanCollectionDataSource

Lưu ý: Phương pháp này không cần phải là tĩnh hay bên trong lớp này, hơn nữa xử lý ngoại lệ không được xem xét.

Báo cáo - các jrxml

Trong ví dụ chúng ta sẽ có field1 chứa Test1_1.23:Test2_4.32:Test3_1.08 trên hàng 1 và Test1_2.12:Test2_5.12:Test3_2.13 trên hàng 2.

Chúng ta định nghĩa một subdataset đại diện ra TableCellsBean

<subDataset name="table_dataset" uuid="4dc1b0fb-2588-4f98-8c8d-f0afefbb2fd1"> 
    <field name="name" class="java.lang.String"/> 
    <field name="value" class="java.lang.Double"/> 
</subDataset> 

dưới dạng nguồn dữ liệu, chúng tôi gọi phương thức tĩnh của chúng tôi chuyển nội dung field1 vào hàng hiện tại.

<dataSourceExpression><![CDATA[my.package.TableCellsBean.getDatasource($F{field1})]]></dataSourceExpression> 

Full 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" language="java" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="886a547e-11bd-434b-a330-d93ee5e4a280"> 
    <style name="table"> 
     <box> 
      <pen lineWidth="1.0" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table_TH" mode="Opaque" backcolor="#F0F8FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table_CH" mode="Opaque" backcolor="#BFE1FF"> 
     <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> 
    </style> 
    <subDataset name="table_dataset" uuid="4dc1b0fb-2588-4f98-8c8d-f0afefbb2fd1"> 
     <field name="name" class="java.lang.String"/> 
     <field name="value" class="java.lang.Double"/> 
    </subDataset> 
    <field name="field1" class="java.lang.String"> 
     <fieldDescription><![CDATA[_THIS]]></fieldDescription> 
    </field> 
    <detail> 
     <band height="40" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="555" height="20" uuid="a73343b1-ccb2-4a59-b882-381b98efd664"/> 
       <textElement verticalAlignment="Middle"/> 
       <textFieldExpression><![CDATA[$F{field1}]]></textFieldExpression> 
      </textField> 
      <componentElement> 
       <reportElement key="table" style="table" x="0" y="20" width="555" height="20" uuid="09a9a5b8-499b-40d2-b391-ece25772a31e"/> 
       <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"> 
        <datasetRun subDataset="table_dataset" uuid="05601bdb-5579-4253-90f7-6742739d9714"> 
         <dataSourceExpression><![CDATA[bounty.TableCellsBean.getDatasource($F{field1})]]></dataSourceExpression> 
        </datasetRun> 
        <jr:column width="90" uuid="afbbb3d0-573a-495d-ab51-0ae4d601e6fb"> 
         <jr:tableHeader style="table_TH" height="20" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="20" uuid="e476f026-bbec-4b19-9bd4-f4b21f3377ef"/> 
           <textElement textAlignment="Center" verticalAlignment="Middle"/> 
           <text><![CDATA[Name]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:detailCell style="table_TD" height="20" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="90" height="20" uuid="49cac181-b16b-4ab3-b600-78a56fb0f42b"/> 
           <box leftPadding="3" rightPadding="3"/> 
           <textElement verticalAlignment="Middle"/> 
           <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="90" uuid="4a1b0759-c347-4294-82c5-3aed4762f0c4"> 
         <jr:tableHeader style="table_TH" height="20" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="20" uuid="bfa965b5-b5a4-484d-bfbd-d8bc753718b1"/> 
           <textElement textAlignment="Center" verticalAlignment="Middle"/> 
           <text><![CDATA[Value]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:detailCell style="table_TD" height="20" rowSpan="1"> 
          <textField> 
           <reportElement x="0" y="0" width="90" height="20" uuid="925192bc-a761-48f5-bad5-097d15587198"/> 
           <box leftPadding="3" rightPadding="3"/> 
           <textElement textAlignment="Right" verticalAlignment="Middle"/> 
           <textFieldExpression><![CDATA[$F{value}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
       </jr:table> 
      </componentElement> 
     </band> 
    </detail> 
</jasperReport> 


thử ví dụ

Thêm phương pháp chính để xuất khẩu sang pdf

public static void main(String[] args) throws JRException { 
    //Compile report 
    JasperReport report = JasperCompileManager.compileReport("myJasperReport.jrxml"); 
    //Setting up some arbitrary data to test the auto creation of datasource 
    List<String> someData = new ArrayList<>(); 
    someData.add("Test1_1.23:Test2_4.32:Test3_1.08"); 
    someData.add("Test1_2.12:Test2_5.12:Test3_2.13"); 
    //Fill report 
    JasperPrint jasperPrint = JasperFillManager.fillReport(report, new HashMap<>(),new JRBeanCollectionDataSource(someData)); 
    //Export to pdf 
    JRPdfExporter exporter = new JRPdfExporter();  
    exporter.setExporterInput(new SimpleExporterInput(jasperPrint)); 
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("myJasperReport.pdf")); 
    SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration(); 
    exporter.setConfiguration(configuration); 
    exporter.exportReport(); 
} 

Output

result

Kết luận

Cách đơn giản nhất để cung cấp linh kiện với nguồn dữ liệu tùy chỉnh tùy thuộc vào chạy báo cáo giá trị (trường, các biến, tham số), là tạo ra một phương pháp mà tạo ra nguồn dữ liệu và cuộc gọi điều này trong dataSourceExpression

Các vấn đề liên quan