2016-05-25 6 views
1

私は次のように私のJavaコードがあり、その中にテーブルを使用してPDFファイルを生成するためにjasperreportを使用したい:なぜジャスパーレポートは1つではなく複数のテーブルを生成するのですか?

JasperReport report = JasperCompileManager.compileReport("src/main/resources/report1.jrxml"); 
Map<String,Object> params = new HashMap<String,Object>(); 
List<Info> infos = new ArrayList<Info>(); 
for(int i=0;i<10;i++) { 
    Info info = new Info(); 
    info.setAccountCode("abc"); 
    info.setAccountName("test"); 
    infos.add(info);     
} 

JRBeanCollectionDataSource beans = new JRBeanCollectionDataSource(infos); 
params.put("tableSource", infos); 

JasperPrint print = JasperFillManager.fillReport(report , params, beans); 
JasperExportManager.exportReportToPdfFile(print,"jasper.pdf"); 

jrxmlファイルで、私はパラメータtableSourceを作成したが(そのタイプがリストである)、二つのフィールドaccountNameを追加しましたそしてaccountCode、またテーブルのプロパティで

​​

を作成し、 'テーブル' レポート要素を追加し、フル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="report1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="6fa4b189-7e18-456b-9307-710a8d6972c1"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="20"/> 
    <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> 
    <style name="table 1"> 
     <box> 
      <pen lineWidth="1.0" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table 1_TH" mode="Opaque" backcolor="#F0F8FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table 1_CH" mode="Opaque" backcolor="#BFE1FF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <style name="table 1_TD" mode="Opaque" backcolor="#FFFFFF"> 
     <box> 
      <pen lineWidth="0.5" lineColor="#000000"/> 
     </box> 
    </style> 
    <subDataset name="Table Dataset 1" uuid="6d5cf195-8b52-4dfe-9f53-9e3eb5be5db3"> 
     <field name="accountCode" class="java.lang.String"/> 
     <field name="accountName" class="java.lang.String"/> 
    </subDataset> 
    <parameter name="tableSource" class="java.util.List"/> 
    <field name="accountCode" class="java.lang.String"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="79" splitType="Stretch"/> 
    </title> 
    <pageHeader> 
     <band height="35" splitType="Stretch"/> 
    </pageHeader> 
    <columnHeader> 
     <band height="61" splitType="Stretch"/> 
    </columnHeader> 
    <detail> 
     <band height="125" splitType="Stretch"> 
      <componentElement> 
       <reportElement key="table 1" style="table 1" x="108" y="30" width="450" height="50" uuid="c7628262-8e54-4c62-b977-175f6aea984e"/> 
       <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 1" uuid="8beea930-93ae-4fa8-826b-cebfebef3a86"> 
         <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{tableSource})]]></dataSourceExpression> 
        </datasetRun> 
        <jr:column width="90" uuid="0155325f-f82b-4b89-849c-dff724c771a9"> 
         <jr:tableHeader style="table 1_TH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="30" uuid="ea43a2ac-624e-4c44-a53c-60f79a2a4cd3"/> 
           <text><![CDATA[Account Code]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:detailCell style="table 1_TD" height="30" rowSpan="1"> 
          <textField isStretchWithOverflow="true"> 
           <reportElement x="0" y="0" width="90" height="20" uuid="28ac521c-37bf-4cfc-80ad-35a380e32d9a"/> 
           <textElement> 
            <font fontName="Arial" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/> 
           </textElement> 
           <textFieldExpression><![CDATA[$F{accountCode}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
        <jr:column width="90" uuid="9249d41a-f7af-4abf-9163-0a15d0a621a8"> 
         <jr:tableHeader style="table 1_TH" height="30" rowSpan="1"> 
          <staticText> 
           <reportElement x="0" y="0" width="90" height="30" uuid="81274afc-cb28-4251-8e9d-8ffe2466d2dc"/> 
           <text><![CDATA[Account Name]]></text> 
          </staticText> 
         </jr:tableHeader> 
         <jr:detailCell style="table 1_TD" height="30" rowSpan="1"> 
          <textField isStretchWithOverflow="true"> 
           <reportElement x="0" y="0" width="90" height="20" uuid="5876bb0e-cc9d-4d34-a2ba-483016846752"/> 
           <textElement> 
            <font fontName="Arial" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/> 
           </textElement> 
           <textFieldExpression><![CDATA[$F{accountName}]]></textFieldExpression> 
          </textField> 
         </jr:detailCell> 
        </jr:column> 
       </jr:table> 
      </componentElement> 
     </band> 
    </detail> 
    <columnFooter> 
     <band height="45" splitType="Stretch"/> 
    </columnFooter> 
    <pageFooter> 
     <band height="54" splitType="Stretch"/> 
    </pageFooter> 
    <summary> 
     <band height="42" splitType="Stretch"/> 
    </summary> 
</jasperReport> 
私はそれが次のように一つのテーブルを生成する期待

Account Code Account Name 
abc   test 
abc   test 

Account Code Account Name 
abc   test 
abc   test 

を生成した2つの同じテーブルがある理由:

Account Code Account Name 
abc   test 
abc   test 

しかし、実際の結果は、2つのテーブルがあるでは、次のように生成されましたか?

私はあなたがDetailsバンドであなたのTableを入れているiReportは5.6.0、6.2.2 jasperreport

+0

メインレポートには2回の繰り返しがありますバンド) –

+2

新しいJREmptyDataSource(1)をレポートに渡します。 –

+0

@PetterFriberg、あなたのヒントありがとう、それは、なぜ私はJRCollectionDataSourceではなくJREmptyDataSourceを渡す必要があります尋ねることがありますか?jrxmlでテーブルコンポーネントを使用する場合、私は常にJREmptyDataSourceを渡すことを意味ですか? – frank

答えて

1

あなたはJasperFillManager

JasperPrint print = JasperFillManager.fillReport(report , params, new JREmptyDataSource(1)); 

理由にJREmptyDataSource 1でレコードを渡す必要がありますか?ジャスパーレポートは、反復

は、したがって、それはあなたのJRBeanCollectionDataSource beans内のレコードのように多くの詳細バンドを作成し、あなたがJasperFillManagerに渡すデータソース上のdetailバンドです。あなたの場合は、<jr:table>コンポーネントが使用するパラメータとしてこのデータソースを渡しているので、これは必要ありません。あなたの設定は、パラメータとして渡されたデータソースで繰り返し実行されるjr:tableで詳細バンドを表示することです(1レコードを取得する最も簡単な方法はnew JREmptyDataSource(1)です)

0

を使用しています。

Detailsバンドは、結果のすべての行に対して生成されます。 2行のデータがあるので、2つのテーブルも取得します。

TableSummary,Column Footerなどの別のバンドに移動してみてください。

+0

あなたの答えをありがとう、私は別の部分にテーブルを移動しようとしましたが、オーバーフローがいくつかの時間が発生します。データリストのサイズが20である場合 – frank

+0

オーバーフロー?私はあなたが2つのテーブルを取ると思った? – tobi6

+0

データリストのサイズが10の場合は1つのテーブルだけですが、データリストのサイズが20の場合はオーバーフロー例外がスローされます。 – frank

関連する問題