that is sweet, thanks, i'll try it out. Appreciate it. :) Rick
On Wed, Apr 16, 2008 at 9:50 PM, John Krasnay <[EMAIL PROTECTED]> wrote: > It goes something like this. I've left out a bunch of stuff to do with > setting column headings, widths, and styles. > > public interface ReportColumn extends Serializable { > public Object getCellValue(IModel rowModel); > } > > public class ExcelReportGenerator implements ReportGenerator { > public void generate( > OutputStream outputStream, > ReportColumn[] columns, > IDataProvider dataProvider) throws IOException { > > HSSFWorkbook workbook = new HSSFWorkbook(); > HSSFSheet sheet = workbook.createSheet(); > > Iterator iter = dataProvider.iterator(0, dataProvider.size()); > while (iter.hasNext()) { > Object o = iter.next(); > IModel rowModel = dataProvider.model(o); > row = sheet.createRow(rownum++); > for (short i = 0; i < columns.length; i++) { > HSSFCell cell = row.createCell(columnNumber, > HSSFCell.CELL_TYPE_STRING); > Object value = column.getCellValue(rowModel); > cell.setCellValue(new > HSSFRichTextString(value.toString())); > } > } > > workbook.write(outputStream); > } > } > > > We then use a Link with code like this in its onClick method: > > public void onClick() { > final ReportGenerator generator = getReportGenerator(); > > IResourceStream resourceStream = > new AbstractResourceStreamWriter() { > public void write(OutputStream output) { > try { > generator.generate(output, columns, dataProvider); > } catch (IOException e) { > throw new RuntimeException(e); > } > } > public String getContentType() { > return generator.getContentType(); > } > > }; > > getRequestCycle().setRequestTarget( > new ResourceStreamRequestTarget(resourceStream) > .setFileName(getFileName())); > } > > > jk > > On Wed, Apr 16, 2008 at 09:25:41PM -0400, Ricky wrote: > > Can someone post some code on this ? (only rough sketch ... nothing > > elaborate really. > > > > Thanks in advance. > > Rick > > > > On Wed, Apr 16, 2008 at 8:54 PM, John Krasnay <[EMAIL PROTECTED]> wrote: > > > > > Hi RG, > > > > > > You probably want to look at how DataTable in wicket-extensions works. > > > The idea is you set up an array of column objects, each of which knows > > > how to display the data in a particular column, and a data provider, > > > which provides an iterator over the objects represent your rows. The > > > DataTable puts these two together and renders an HTML table. > > > > > > You can tackle your PDF problem in a similar way. Create a different > > > column abstraction that writes to the iText API, then create a > component > > > analagous to DataTable but that writes the PDF out to a stream. > > > Internally, this DataTable-equivalent would create the iText document, > > > iterate over the rows returned by the data provider, and for each row > > > iterate over the columns, asking each column to render its particular > > > cell. > > > > > > We use this approach for generating spreadsheets (using POI instead of > > > iText, of course) and it works like a charm. > > > > > > jk > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Regards Vyas, Anirudh || ॐ ||