如何使用HashMap输入传递我的参数

时间:2016-05-03 04:43:56

标签: java jasper-reports

我创建了报告它仅适用于一个输入。如果我想打印多张发票。如何通过使用HashMap输入传递参数并循环它们来生成

主要报告:

<?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="esr-design-40" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" >
<property name="com.jasperassistant.designer.GridHeight" value="12"/>
<property name="com.jasperassistant.designer.GridWidth" value="12"/>
<property name="com.jasperassistant.designer.SnapToGrid" value="false"/>
<property name="com.jasperassistant.designer.Grid" value="false"/>
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="16"/>
<property name="ireport.y" value="0"/>
<scriptlet name="esrgenerator" class="dk.comtalk.billing.server.util.ESRGenerator"/>
<parameter name="printAmount" class="java.lang.String"/>
<parameter name="invoiceId" class="java.lang.Integer"/>
<parameter name="customerId" class="java.lang.String"/>
<parameter name="entityName" class="java.lang.String"/>
<parameter name="entityAddress" class="java.lang.String"/>
<parameter name="entityCity" class="java.lang.String"/>
<parameter name="entityProvince" class="java.lang.String"/>
<parameter name="entityPostalCode" class="java.lang.String"/>
<parameter name="customerName" class="java.lang.String"/>
<parameter name="customerAddress" class="java.lang.String"/>
<parameter name="customerCity" class="java.lang.String"/>
<parameter name="customerProvince" class="java.lang.String"/>
<parameter name="customerPostalCode" class="java.lang.String"/>
<parameter name="entityLogo" class="java.io.File"/>
<parameter name="countryCode" class="java.lang.String"/>
<parameter name="balance" class="java.lang.String"/>
<parameter name="carriedBalance" class="java.lang.String"/>
<parameter name="invoiceDueDate" class="java.lang.String"/>
<parameter name="totalWithTax" class="java.lang.String"/>
<parameter name="newStatusId" class="java.lang.Integer"/>
<parameter name="invoiceDate" class="java.lang.String"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA["D:\\Ravi Workspace\\Openbrm\\open-brm-openbrm-2.0\\resources\\designs\\"]]></defaultValueExpression>
</parameter>
<queryString>
    <![CDATA[select count(*) from payment_invoice p where p.invoice_id=$P{invoiceId};]]>
</queryString>
<field name="payment_count" class="java.lang.Integer"/>
<group name="invoice_total">
    <groupFooter>
        <band/>
    </groupFooter>
</group>
<title>
    <band height="430">
        <image>
            <reportElement x="8" y="0" width="185" height="48" />
            <imageExpression><![CDATA[$P{entityLogo}]]></imageExpression>
        </image>
        <textField>
            <reportElement x="57" y="120" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerName}]]> </textFieldExpression>
        </textField>
        <textField>
            <reportElement x="57" y="148" width="294" height="14" />
            <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="57" y="162" width="211" height="14" />
            <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="57" y="134" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="384" y="103" width="200" height="28" />
            <textElement>
                <font size="11" isBold="true"/>
            </textElement>
            <text><![CDATA[1. opomena za neizmireni racun]]></text>
        </staticText>
        <staticText>
            <reportElement x="405" y="173" width="179" height="14" />
            <text><![CDATA[Wangen b. Brüttisellen, 13.12.2015]]></text>
        </staticText>
        <staticText>
            <reportElement x="36" y="201" width="328" height="19" />
            <text><![CDATA[Postovani gospodine/postovana gospodjo,]]></text>
        </staticText>
        <staticText>
            <reportElement x="36" y="220" width="544" height="35" />
            <text><![CDATA[Dozvolite da Vas podsetimo da je, po podacima naseg knjigovodstva od danasnjeg dana, sledeci telefonski racun jos otvoren:]]></text>
        </staticText>
        <staticText>
            <reportElement x="35" y="317" width="549" height="34" />
            <text><![CDATA[Ukoliko je Vasa uplata za ovde navedeni racun u medjuvremenu vec izvrsena, nemojte uzimati ovu opomenu u obzir. Ukoliko jos nije, molimo Vas da izvrsite uplatu izvrsite odmah.]]></text>
        </staticText>
        <staticText>
            <reportElement x="35" y="351" width="557" height="69" />
            <text><![CDATA[Imajte u vidu da se kod opomena, uz regularni racun, placa administrativna taksa za obradu u visini od Fr. 20.00. Ev.deaktivacija servisa se, takodje, naplacuje, dodatnih Fr. 20.00. Molimo Vas stoga za postovanje nasih rokova uplate.

  Najlepse hvala.]]></text>
        </staticText>
        <subreport>
            <reportElement x="36" y="268" width="559" height="60" />
            <subreportParameter name="invoiceId">
                <subreportParameterExpression><![CDATA[$P{invoiceId}]]></subreportParameterExpression>
            </subreportParameter>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "ageing-esr-40-srpski-subreport.jasper"]]></subreportExpression>
        </subreport>
    </band>
</title>
<pageHeader>
    <band height="117">
        <staticText>
            <reportElement x="36" y="101" width="576" height="16" />
            <text><![CDATA[Symphonica AG | Hegnaustrasse 17 | 8602 Wangen b. Brüttisellen | Telefon 0840 988 988 | Fax 043 536 05 43]]></text>
        </staticText>
        <staticText>
            <reportElement x="35" y="8" width="243" height="26" />
            <text><![CDATA[S postovanjem,
     BALKATEL | Symphonica A.D.]]></text>
        </staticText>
    </band>
</pageHeader>
<summary>
    <band height="294">
        <textField>
            <reportElement x="5" y="56" width="123" height="14" />
            <textFieldExpression><![CDATA[$P{entityName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="5" y="68" width="153" height="14" />
            <textFieldExpression><![CDATA[$P{entityAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="5" y="81" width="226" height="14" />
            <textFieldExpression><![CDATA[$P{entityPostalCode}+ " " + $P{entityCity}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="5" y="26" width="100" height="15" />
            <text><![CDATA[6301 Zug]]></text>
        </staticText>
        <staticText>
            <reportElement x="179" y="26" width="100" height="15" />
            <text><![CDATA[6301 Zug]]></text>
        </staticText>
        <textField>
            <reportElement x="179" y="56" width="123" height="14" />
            <textFieldExpression><![CDATA[$P{entityName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="179" y="68" width="149" height="14" />
            <textFieldExpression><![CDATA[$P{entityAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="179" y="81" width="226" height="14" />
            <textFieldExpression><![CDATA[$P{entityPostalCode}+ " " + $P{entityCity}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="97" y="110" width="100" height="14" />
            <text><![CDATA[01-2653-5]]></text>
        </staticText>
        <staticText>
            <reportElement x="272" y="110" width="100" height="16" />
            <text><![CDATA[01-2653-5]]></text>
        </staticText>
        <textField>
            <reportElement x="169" y="236" width="640" height="30" />
            <textElement textAlignment="Left">
                <font fontName="SansSerif" size="13"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.generateCodeline($P{printAmount}.split("\\s+")[1],"01",">","971786","+","0126535",">",$P{invoiceId})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="132" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="144" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="158" width="294" height="14" />
            <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="193" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerName}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="205" width="181" height="14" />
            <textFieldExpression><![CDATA[$P{customerAddress}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="218" width="251" height="14" />
            <textFieldExpression><![CDATA[$P{customerPostalCode}+ " " + $P{customerCity}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="172" width="211" height="14" />
            <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="230" width="194" height="14" />
            <textFieldExpression><![CDATA[$P{countryCode}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="353" y="92" width="424" height="19" />
            <textElement>
                <font fontName="SansSerif" size="11" isBold="true"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.getReferenceNumber("971786",$P{invoiceId})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="8" y="172" width="186" height="16" />
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.getReferenceNumber("971786",$P{invoiceId})]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="132" y="142" width="47" height="15" />
            <textElement>
                <font fontName="SansSerif" size="11"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[1])]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="301" y="142" width="40" height="15" />
            <textElement>
                <font fontName="SansSerif" size="11"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[1])]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="2" y="142" width="105" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="11"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[0]).trim()]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="173" y="142" width="105" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="11"/>
             </textElement>
            <textFieldExpression> <![CDATA[$P{esrgenerator_SCRIPTLET}.splitAmount($P{printAmount}.split("\\s+")[1].split("\\.")[0]).trim()]]></textFieldExpression>
        </textField>
    </band>
 </summary>
 </jasperReport>

档案subreport.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="ageing-esr-40-srpski-subreport" pageWidth="595" pageHeight="70" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" >
<property name="com.jasperassistant.designer.GridHeight" value="12"/>
<property name="com.jasperassistant.designer.GridWidth" value="12"/>
<property name="com.jasperassistant.designer.SnapToGrid" value="false"/>
<property name="com.jasperassistant.designer.Grid" value="false"/>
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<parameter name="customerId" class="java.lang.String"/>
<parameter name="invoiceDate" class="java.lang.String"/>
<parameter name="invoiceId" class="java.lang.Integer"/>
<parameter name="invoiceDueDate" class="java.lang.String"/>
<parameter name="newStatusId" class="java.lang.Integer"/>
<parameter name="printAmount" class="java.lang.String"/>
<parameter name="balance" class="java.lang.String"/>
<title>
    <band height="30">
        <staticText>
            <reportElement x="2" y="14" width="65" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Racun od]]></text>
        </staticText>
        <staticText>
            <reportElement x="83" y="14" width="65" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Nacin pl.]]></text>
        </staticText>
        <staticText>
            <reportElement x="164" y="14" width="85" height="14" />
            <textElement textAlignment="Left">
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Broj racuna]]></text>
        </staticText>
        <staticText>
            <reportElement x="262" y="14" width="85" height="14" />
            <textElement textAlignment="Left">
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Rok istekao]]></text>
        </staticText>
        <staticText>
            <reportElement x="375" y="14" width="48" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Iznos]]></text>
        </staticText>
        <staticText>
            <reportElement x="437" y="14" width="58" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Otvoreno]]></text>
        </staticText>
        <staticText>
            <reportElement x="504" y="14" width="52" height="14" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Step.nap]]></text>
        </staticText>
    </band>
</title>
<pageHeader>
    <band height="19">
        <textField>
            <reportElement x="495" y="3" width="34" height="12" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression class="java.lang.Integer"><![CDATA[$P{newStatusId}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="356" y="3" width="67" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{printAmount}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="262" y="3" width="100" height="14" />
            <textFieldExpression><![CDATA[$P{invoiceDueDate}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="164" y="3" width="75" height="14" />
            <textFieldExpression class="java.lang.Integer"><![CDATA[$P{invoiceId}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="83" y="3" width="77" height="14" />
            <textElement>
                <font size="10" isBold="false"/>
            </textElement>
            <text><![CDATA[Racun]]></text>
        </staticText>
        <textField>
            <reportElement x="2" y="3" width="75" height="14" />
            <textFieldExpression><![CDATA[$P{invoiceDate}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="423" y="2" width="67" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{printAmount}]]></textFieldExpression>
        </textField>
    </band>
</pageHeader>
<summary>
    <band height="20">
        <staticText>
            <reportElement x="266" y="0" width="163" height="15" />
            <textElement>
                <font size="10" isBold="true"/>
            </textElement>
            <text><![CDATA[Ukupno CHF. . . . . . . . . . . . . . . .]]></text>
        </staticText>
        <textField>
            <reportElement x="423" y="0" width="67" height="15" />
            <textElement textAlignment="Right">
                <font fontName="SansSerif" size="9"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{printAmount}]]></textFieldExpression>
        </textField>
    </band>
</summary>
</jasperReport>

通过使用此JAVA代码,我只能打印一个发票详细信息

public static JasperPrint generateAgeingESRFile(InvoiceDTO invoice, Integer userId, Integer entityId , Integer newStatusId) throws FileNotFoundException,
        SessionInternalError {

    try {

     ContactDTOEx to=null;
     ContactDTOEx from=null;

        // This is needed for JasperRerpots to work, for some twisted XWindows issue
        System.setProperty("java.awt.headless", "true");
    /*
        String designFile = com.sapienter.jbilling.common.Util.getSysProp("base_dir")
                            + "designs/" + "ageing-esr-" + entityId + ".jasper";
    */

        String design = "ageing-esr-" + entityId;

    String designFile = getAgeingESRDesignFile(design, invoice);

        File compiledDesign = new File(designFile);
        LOG.debug("Generating paper esr with design file : " + designFile +  "The Ageing Step is " + newStatusId);
        FileInputStream stream = new FileInputStream(compiledDesign);
        Locale locale = (new UserBL(userId).getLocale());

    ContactBL contact = new ContactBL();
        contact.setInvoice(invoice.getId());
        to = contact.getDTO();

        entityId = invoice.getBaseUser().getEntity().getId();
        Date lastStatusChangeDate = invoice.getBaseUser().getLastStatusChange();
        contact.setEntity(entityId);
        from = contact.getDTO();

    //LOG.debug("The ageing step is " + newStatusId);
        // add all the invoice data


    HashMap<String, Object> parameters = new HashMap<String, Object>();
        parameters.put("invoiceNumber", invoice.getPublicNumber());
        parameters.put("invoiceId", invoice.getId());
    parameters.put("newStatusId", newStatusId);
    parameters.put("totalWithTax", Util.formatMoney(invoice.getTotal(),
        invoice.getUserId(), invoice.getCurrency().getId(), false));
        parameters.put("customerId", invoice.getUserId().toString());
        parameters.put("invoiceDate", Util.formatDate(invoice.getCreateDatetime(), invoice.getUserId()));
        parameters.put("invoiceDueDate", Util.formatDate(invoice.getDueDate(), invoice.getUserId()));
        parameters.put("invoiceGeneratedDate", Util.formatDate(invoice.getCreateTimestamp(), invoice.getUserId()));
        parameters.put("statusChangeDate", Util.formatDate(lastStatusChangeDate, invoice.getUserId()));

    parameters.put("entityName", printable(from.getOrganizationName()));
        parameters.put("entityAddress", printable(from.getAddress1()));
        parameters.put("entityAddress2", printable(from.getAddress2()));
        parameters.put("entityPostalCode", printable(from.getPostalCode()));
        parameters.put("entityCity", printable(from.getCity()));
        parameters.put("entityProvince", printable(from.getStateProvince()));
        parameters.put("entityPhoneCountryCode", printable(from.getPhoneCountryCode().toString()));
    parameters.put("entityPhoneAreaCode", printable(from.getPhoneAreaCode().toString()));
    parameters.put("entityPhoneContry", printable(from.getPhoneNumber().toString()));

        parameters.put("customerOrganization", printable(to.getOrganizationName()));
        parameters.put("customerName", printable(to.getFirstName(), to.getLastName()));
        parameters.put("customerAddress", printable(to.getAddress1()));
        parameters.put("customerAddress2", printable(to.getAddress2()));
        parameters.put("customerPostalCode", printable(to.getPostalCode()));
        parameters.put("customerCity", printable(to.getCity()));
        parameters.put("customerProvince", printable(to.getStateProvince()));
        parameters.put("countryCode", printable(to.getCountryCode()));            
        parameters.put("carriedBalance", Util.formatMoney(invoice.getCarriedBalance(),
        invoice.getUserId(), invoice.getCurrency().getId(), false));

    Collection invoicePaymentMaps = invoice.getPaymentMap();
    List list = new ArrayList(invoicePaymentMaps);
    if(list==null || list.isEmpty()){
    LOG.debug("invoicePaymentMaps is null, so pass totalWithTax as param ");
    parameters.put("printAmount", Util.formatMoney(invoice.getTotal(),
            invoice.getUserId(), invoice.getCurrency().getId(), false));
    }else{
    LOG.debug("invoicePaymentMaps is not null, so pass balance as param ");
    parameters.put("printAmount", Util.formatMoney(invoice.getBalance(),
            invoice.getUserId(), invoice.getCurrency().getId(), false));
   }

        // the logo is a file
        File logo = new File(com.sapienter.jbilling.common.Util
                .getSysProp("base_dir")
                + "logos/entity-" + entityId + ".jpg");
        parameters.put("entityLogo", logo);

        BigDecimal taxTotal = new BigDecimal(0);
        int taxItemIndex = 0;
        // set report locale
        parameters.put(JRParameter.REPORT_LOCALE, locale);

        // at last, generate the report
        JasperPrint report = null;
        report = JasperFillManager.fillReport(stream, parameters, new JREmptyDataSource());

        stream.close();

        return report;
} catch (Exception e) {
        LOG.error("Exception generating ESR receipt", e);
        return null;
    }
}  

enter image description here

1 个答案:

答案 0 :(得分:0)

看起来您需要表格格式的数据,这是我的输入

  1. 在您的jasper报告中创建一个表(如果您正在使用iReport,则来自pallete),标题为Racun od,Nacin Pl等
  2. 在报告中创建一个参数,说&#34;发票&#34;和参数类为java.util.List
  3. 在您的案例中创建一个POJO,InvoiceDTO并将所有属性(您希望在报告上打印),也创建getter。
  4. 创建InvoiceDTO列表。
  5. 在您的表格中(在步骤1中制作),添加一行。每个标题(InvoiceDTO的属性)都代表一列。为每一列添加该行的文本字段。
  6. 将每个文本字段表示为$ F {InvoiceDTO中属性的名称}
  7. 在java代码中创建这样的地图: Map map = new HashMap&lt;&gt;(); map.put(&#34; Invoices&#34;,你的InvoiceDto列表);

  8. 将这行代码放在java中: JasperFillManager.fillReport(stream,map,new JREmptyDataSource());