我创建了报告它仅适用于一个输入。如果我想打印多张发票。如何通过使用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;
}
}
:
答案 0 :(得分:0)
看起来您需要表格格式的数据,这是我的输入
在java代码中创建这样的地图: Map map = new HashMap&lt;&gt;(); map.put(&#34; Invoices&#34;,你的InvoiceDto列表);
将这行代码放在java中: JasperFillManager.fillReport(stream,map,new JREmptyDataSource());