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
||  ॐ  ||

Reply via email to