Mam kod który generuje mi z jednego beana jego zawartość do PDFa.
Teraz chcę wydrukować beana który zawiera inne beany. Znalazłem informację, iż robi się to z wykorzystaniem subreportów. Czyli główny bean to główny raport, a beany zawarte w głównych są drukowane w subreportach.
Szablony tworzę w jasper Studio.
- Jak stworzyć subreport do głównego raportu ?
W tym momencie w Jasper Studio dodaję subreport na którym dodaję pole które chcę wydrukować z zagnieżdzonego beana.
W głównym raporcie wskazuję atrybut z encji który przechowuję listę zagnieżdzonych beanów.
<field name="policyHolder" class="java.util.List" />
BŁĄD Z Konsoli to:
net.sf.jasperreports.engine.JRException: Resource not found at : TestPolisaSub.jasper
Wnioskuję, że mam błędnie połączony RAPORT główny z subreportem.
Proszę o pomoc / wskazówki.
public class PrinterDataFromJasper {
private String JASPER_MASTER_TEMPLATE_FILE_JASPER = "/home/pawel/JaspersoftWorkspace/Polisy/TestPolisa.jasper";
private String JASPER_SUB_TEMPLATE_FILE_JASPER = "/home/pawel/JaspersoftWorkspace/Polisy/TestPolisaSub.jasper";
public String CREATED_PDF_DEST_FOLDER_NAME = "/home/pawel/Pulpit/Dokumenty123-Test/Polisy";
public String CREATED_PDF_DEST_FILE_NAME = "/home/pawel/Pulpit/Dokumenty123-Test/Polisy/TestPolisa.pdf";
public static void main(String[] args) throws JRException {
PrinterDataFromJasper main = new PrinterDataFromJasper();
main.start();
}
public PrinterDataFromJasper() throws JRException {
}
private void start() {
try {
File jasperMasterTemplateFile = new File(JASPER_MASTER_TEMPLATE_FILE_JASPER);
FileInputStream jasperMasterTemplateStream = null;
try {
jasperMasterTemplateStream = new FileInputStream(jasperMasterTemplateFile);
} catch (FileNotFoundException e) {
System.out.println("Failed load master file");
}
BufferedInputStream jasperMasterbufferedInputStream = new BufferedInputStream(jasperMasterTemplateStream);
File jasperSubTemplateFile = new File(JASPER_SUB_TEMPLATE_FILE_JASPER);
FileInputStream jasperSubTemplateStream = null;
try {
jasperSubTemplateStream = new FileInputStream(jasperSubTemplateFile);
} catch (FileNotFoundException e) {
System.out.println("Faild to load sub report file");
}
BufferedInputStream jasperSubbufferedInputStream = new BufferedInputStream(jasperSubTemplateStream);
// load jasperMaster file with .jasper format
JasperReport jasperMasterReport = (JasperReport) JRLoader.loadObject(jasperMasterbufferedInputStream);
// load jasperSub file with .jasper format
JasperReport jasperSubReport = (JasperReport) JRLoader.loadObject(jasperSubbufferedInputStream);
List<Insurance> beanList = generateCollection();
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(beanList);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("subreportParameter", jasperSubReport);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperMasterReport, new HashMap(), beanColDataSource);
// Make sure the output directory exists.
File outDir = new File(CREATED_PDF_DEST_FOLDER_NAME);
outDir.mkdirs();
// Export to PDF.
JasperExportManager.exportReportToPdfFile(jasperPrint,
CREATED_PDF_DEST_FILE_NAME);
System.out.println("Done!");
} catch (JRException e) {
e.printStackTrace();
}
}
private String getRandomString() {
return UUID.randomUUID().toString();
}
private static List<Insurance> generateCollection() {
List<Insurance> insuranceList = new ArrayList<Insurance>();
Insurance insurance = new Insurance();
insurance.setInsuranceNumber(INSURANCE_NUMBER);
insurance.setInsuranceDateFROM(INSURANCE_DATE_FROM);
insurance.setInsuranceDateTO(INSURANCE_DATE_TO);
List<PolicyHolder> policyHolderList = new ArrayList<PolicyHolder>();
PolicyHolder policyHolder = new PolicyHolder();
policyHolder.setName("Jan");
policyHolder.setSurname("Nowak");
policyHolder.setPesel("76042512345");
policyHolder.setZipCode("00-915");
policyHolder.setCity("Warszawa");
policyHolder.setStreet("Woronicza");
policyHolder.setStreetNumber("17");
policyHolder.setNameAndSurname("lallaa");
policyHolder.setAddress("bebebeebebe");
policyHolderList.add(policyHolder);
System.out.println(policyHolder.getAddress());
System.out.println(policyHolder.getNameAndSurname());
insurance.setPolicyHolder(policyHolderList);
insuranceList.add(insurance);
return insuranceList ;
}
public static final String INSURANCE_NUMBER = "Polisa / Policy 0012545584223";
public static final String INSURANCE_DATE_FROM = "2015.09.02. 00:00";
public static final String INSURANCE_DATE_TO = "2015.09.09. 24:00";
}
SZABLON GŁÓWNY JASPERA
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0 -->
<!-- 2016-02-19T15:24:51 -->
<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="TestPolisa" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0c6d921a-7bfe-480d-b7be-3cabdad53ea4">
<queryString>
<![CDATA[]]>
</queryString>
<field name="insuranceDateTO" class="java.lang.String"/>
<field name="insuranceNumber" class="java.lang.String"/>
<field name="policyHolder" class="java.util.List"/>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="453" splitType="Stretch">
<textField>
<reportElement x="0" y="80" width="100" height="30" uuid="89bd128f-77a4-440f-9be0-859ea53bd9a3"/>
<textFieldExpression><![CDATA[$F{insuranceDateTO}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="47" width="100" height="30" uuid="1a16c8a1-1d1e-41cc-8333-dc1d4a2bb40a"/>
<text><![CDATA[Some simple text]]></text>
</staticText>
<textField>
<reportElement x="160" y="0" width="240" height="40" uuid="d5883993-9e67-4a40-873b-2db14af402b2"/>
<textElement textAlignment="Center">
<font size="12" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{insuranceNumber}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="3" y="180" width="549" height="169" uuid="2cff0a97-9d13-40fa-8161-a58cff22fa2a"/>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression><![CDATA["TestPolisaSub.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
</jasperReport>