#!/usr/bin/env jython # from net.sf.dynamicreports.report.builder.DynamicReports import * import java.math.BigDecimal as BigDecimal import java.util.Calendar as Calendar import java.util.Date as Date import java.io.FileOutputStream as FileOutputStream import net.sf.dynamicreports.examples.Templates as Templates import net.sf.dynamicreports.jasper.builder.JasperReportBuilder as JasperReportBuilder import net.sf.dynamicreports.report.builder.component.SubreportBuilder as SubreportBuilder import net.sf.dynamicreports.report.exception.DRException as DRException import net.sf.jasperreports.engine.JRDataSource as JRDataSource import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource as JRBeanCollectionDataSource class CollectionDatasourceReport(object): def build(self): subreport = cmp.subreport(self.createSubreport()).setDataSource(exp.subDatasourceBeanCollection("subData")) try: foo = report().setTemplate(Templates.reportTemplate).columns( col.column("Item", "item",type.stringType()), col.column("Qty", "qty", type.integerType()), col.column("Unit price", "unitPrice", type.bigDecimalType())).title(Templates.createTitleComponent("CollectionDatasource")).detailFooter( cmp.horizontalList(cmp.horizontalGap(150), subreport, cmp.horizontalGap(150)), cmp.line()).pageFooter(Templates.footerComponent).setDataSource(self.createDataSource()) except DRException: print "exception occurred" else: print "report generated, saving." foo.toPdf(FileOutputStream("/tmp/foo11.pdf")) print "saving done." def createSubreport(self): report_ = report() report_.setTemplate(Templates.reportTemplate).title(cmp.text("SubData").setStyle(Templates.boldCenteredStyle)).columns( col.column("Order date", "orderDate", type.dateType()), col.column("Quantity", "quantity", type.integerType())) return report_ def createDataSource(self): data = [] subData = [] subData.append(self.SubData(self.toDate(2011, 0, 10), 2)) subData.append(self.SubData(self.toDate(2011, 0, 15), 3)) data.append(self.Data("DVD", 5, BigDecimal(30), subData)) subData = [] subData.append(self.SubData(self.toDate(2011, 0, 11), 1)) subData.append(self.SubData(self.toDate(2011, 0, 12), 3)) subData.append(self.SubData(self.toDate(2011, 0, 16), 4)) data.append(self.Data("Book", 8, BigDecimal(11), subData)) subData = [] subData.append(self.SubData(self.toDate(2011, 0, 9), 1)) subData.append(self.SubData(self.toDate(2011, 0, 18), 1)) data.append(self.Data("PDA", 2, BigDecimal(15), subData)) return JRBeanCollectionDataSource(data) def toDate(self, year, month, day): c = Calendar.getInstance() c.set(Calendar.YEAR, year) c.set(Calendar.MONTH, month-1) c.set(Calendar.DAY_OF_MONTH, day) return c.getTime() class Data(object): def __init__(self, item, quantity, unitPrice, subData): self.item = item self.quantity = quantity self.unitPrice = unitPrice self.subData = subData def getItem(): return self.item def setItem(item): self.item = item def getQuantity(): return self.quantity def setQuantity(quantity): self.quantity = quantity def getUnitPrice(): return self.unitPrice def setUnitPrice(unitPrice): self.unitPrice = unitPrice def getSubData(): return self.subData def setSubData(subData): self.subData = subData class SubData(object): def __init__(self, orderDate, quantity): self.orderDate = orderDate self.quantity = quantity def getOrderDate(): return self.orderDate def setOrderDate(orderDate): self.orderDate = orderDate def getQuantity(): return self.quantity def setQuantity(quantity): self.quantity = quantity if __name__ == '__main__': print "creating..." new = CollectionDatasourceReport() new.build()