-
- #!/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()
-