spacepaste

  1.  
  2. #!/usr/bin/env jython
  3. #
  4. from net.sf.dynamicreports.report.builder.DynamicReports import *
  5. import java.math.BigDecimal as BigDecimal
  6. import java.util.Calendar as Calendar
  7. import java.util.Date as Date
  8. import java.io.FileOutputStream as FileOutputStream
  9. import net.sf.dynamicreports.examples.Templates as Templates
  10. import net.sf.dynamicreports.jasper.builder.JasperReportBuilder as JasperReportBuilder
  11. import net.sf.dynamicreports.report.builder.component.SubreportBuilder as SubreportBuilder
  12. import net.sf.dynamicreports.report.exception.DRException as DRException
  13. import net.sf.jasperreports.engine.JRDataSource as JRDataSource
  14. import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource as JRBeanCollectionDataSource
  15. class CollectionDatasourceReport(object):
  16. def build(self):
  17. subreport = cmp.subreport(self.createSubreport()).setDataSource(exp.subDatasourceBeanCollection("subData"))
  18. try:
  19. foo = report().setTemplate(Templates.reportTemplate).columns(
  20. col.column("Item", "item",type.stringType()),
  21. col.column("Qty", "qty", type.integerType()),
  22. col.column("Unit price", "unitPrice", type.bigDecimalType())).title(Templates.createTitleComponent("CollectionDatasource")).detailFooter(
  23. cmp.horizontalList(cmp.horizontalGap(150), subreport, cmp.horizontalGap(150)),
  24. cmp.line()).pageFooter(Templates.footerComponent).setDataSource(self.createDataSource())
  25. except DRException:
  26. print "exception occurred"
  27. else:
  28. print "report generated, saving."
  29. foo.toPdf(FileOutputStream("/tmp/foo11.pdf"))
  30. print "saving done."
  31. def createSubreport(self):
  32. report_ = report()
  33. report_.setTemplate(Templates.reportTemplate).title(cmp.text("SubData").setStyle(Templates.boldCenteredStyle)).columns(
  34. col.column("Order date", "orderDate", type.dateType()),
  35. col.column("Quantity", "quantity", type.integerType()))
  36. return report_
  37. def createDataSource(self):
  38. data = []
  39. subData = []
  40. subData.append(self.SubData(self.toDate(2011, 0, 10), 2))
  41. subData.append(self.SubData(self.toDate(2011, 0, 15), 3))
  42. data.append(self.Data("DVD", 5, BigDecimal(30), subData))
  43. subData = []
  44. subData.append(self.SubData(self.toDate(2011, 0, 11), 1))
  45. subData.append(self.SubData(self.toDate(2011, 0, 12), 3))
  46. subData.append(self.SubData(self.toDate(2011, 0, 16), 4))
  47. data.append(self.Data("Book", 8, BigDecimal(11), subData))
  48. subData = []
  49. subData.append(self.SubData(self.toDate(2011, 0, 9), 1))
  50. subData.append(self.SubData(self.toDate(2011, 0, 18), 1))
  51. data.append(self.Data("PDA", 2, BigDecimal(15), subData))
  52. return JRBeanCollectionDataSource(data)
  53. def toDate(self, year, month, day):
  54. c = Calendar.getInstance()
  55. c.set(Calendar.YEAR, year)
  56. c.set(Calendar.MONTH, month-1)
  57. c.set(Calendar.DAY_OF_MONTH, day)
  58. return c.getTime()
  59. class Data(object):
  60. def __init__(self, item, quantity, unitPrice, subData):
  61. self.item = item
  62. self.quantity = quantity
  63. self.unitPrice = unitPrice
  64. self.subData = subData
  65. def getItem(): return self.item
  66. def setItem(item): self.item = item
  67. def getQuantity(): return self.quantity
  68. def setQuantity(quantity): self.quantity = quantity
  69. def getUnitPrice(): return self.unitPrice
  70. def setUnitPrice(unitPrice): self.unitPrice = unitPrice
  71. def getSubData(): return self.subData
  72. def setSubData(subData): self.subData = subData
  73. class SubData(object):
  74. def __init__(self, orderDate, quantity):
  75. self.orderDate = orderDate
  76. self.quantity = quantity
  77. def getOrderDate(): return self.orderDate
  78. def setOrderDate(orderDate): self.orderDate = orderDate
  79. def getQuantity(): return self.quantity
  80. def setQuantity(quantity): self.quantity = quantity
  81. if __name__ == '__main__':
  82. print "creating..."
  83. new = CollectionDatasourceReport()
  84. new.build()
  85.