public void GenerateWinnerReport(System.IO.Stream stream, string sailNumber) { // Raw data needed TrophyDataSet.TrophyWinnersDataTable winners; using (TrophyDataSetTableAdapters.TrophyWinnersTableAdapter ad = new TrophyWinnersTableAdapter()) { winners = ad.GetData(sailNumber); } Document doc = CreateDocument(); int pageNumber = 0; pageNumber++; Page page = new Page(A4Portrait.Width, A4Portrait.Height); doc.Pages.Content.Add(page); Siberix.PDF.Layout.Table.Table table; table = CreateTrophyWinnersTable(page, sailNumber, winners.Rows.Count); int rowIndex = 0; foreach (TrophyDataSet.TrophyWinnersRow winner in winners.Select("TRUE", "[fldYear] ASC, [fldTrophyName] ASC")) { AddTrophyWinnerRow(table, winner); /* Table needs to be measured, if it's too tall, then we need to remove this row, * draw it on the current page, add a new page, create a new table, and the row to it */ table.Measure(page.Graphics); if ((table.Top + table.Height + Px(5)) > (page.Height - Margin)) { table.Rows.Remove(rowIndex, 0); // Draw the winners, and the footer, increment the page number table.Measure(page.Graphics); table.Draw(page.Graphics); DrawFooter(page, pageNumber); page.Graphics.Flush(); pageNumber++; // New page page = new Page(A4Portrait.Width, A4Portrait.Height); doc.Pages.Content.Add(page); table = CreateTrophyWinnersTable(page, sailNumber, winners.Rows.Count); AddTrophyWinnerRow(table, winner); rowIndex = 0; } rowIndex++; } table.Measure(page.Graphics); table.Draw(page.Graphics); DrawFooter(page, pageNumber); page.Graphics.Flush(); doc.Generate(stream); }