After adding all the content I need to a report (which will be published as a PDF document) I need to know how many pages the exported PDF document will have. How do I determine the number of pages in my report?
Thanks.
You might look into the following documentation topic the explains how to Add Page numbers to a report.
http://help.infragistics.com/Help/NetAdvantage/NET/2008.1/CLR2.0/html/DocumentEngine_Add_Page_Numbering.html
Thanks for your reply.
This article is helpful for basic page numbering but unfortunately doesn't help me understand how I can make logic decisions in my code based upon the current page count. This count probably isn't available until the report is actually published.
report.Publish(pathAndNameToPdf_FiileSystemPath, Infragistics.Documents.Report.
Is there some type of pre-publish option?
Thanks. -- David
Hey David,
To accomplish your task you can try this:
IProjectionPageCollection pages = report.Generate();
You can get a count from this class. Here is the API reference for your convenience:
http://help.infragistics.com/Help/NetAdvantage/NET/2008.1/CLR2.0/html/Infragistics2.Documents.v8.1~Infragistics.Documents.Report.Projection.IProjectionPageCollection_members.html
**** The following is slightly off topic, but it shows an example on how one can use the IProjectionPageCollection to create graphics objects of each page, draw to them and then save each page to a JPG image file:
{
theBitMap =
page.Draw(infraGraphics);
infraGraphics.DrawString(20, 20,
infraGraphics.DrawString(20, 40,
pageNum ++;
}
Tom,Thanks for this information.After executing the Generate() method the pages that I add to the Report object don’t show up in the PDF. Any thoughts as to why?Thanks.
This is my code:
IProjectionPageCollection pages = report.Generate();bool needTwoAdditionalPage = ((pages.Count % 2) != 0);
Infragistics.Documents.Report.Section.ISection section = report.AddSection();
Infragistics.Documents.Report.Band.IBand band = section.AddBand();
// We want a blank page (front and back) so add a new page if needed in order// to get a double sided blank page.band.AddPageBreak();if (needTwoAdditionalPage){ band.AddPageBreak();}
Infragistics.Documents.Report.Text.IText text = band.AddText();text.Margins.Top = 450;text.Margins.Bottom = 15;
string appPath = MapPath(PATH_STARTING_POINT);text.AddContent(new Infragistics.Documents.Graphics.Image(appPath + "\\Images\\ContactHQ.jpg") , new Infragistics.Documents.Report.Indents(5) , Infragistics.Documents.Report.ImageAlignment.Middle);
-- David
I think you may be experiencing unintended behavior.
I add new pages in a slightly different manner than yours:
theSection.AddPage().AddText(50f, 50f).AddContent(
I do this rather than adding a page break however, both should work similarly.
I notice that whenever I call theReport.Generate( ), anything I add afterwards is not added. It seems that something internal to the Report is causing anything that is added after the Generate( ) method to not be added.
At this point there are 2 things you can do:
1: If you need to make this work right away without any delay, you will have to execute your logic 2 times: First to determine your page count and then a second time to use the page count (without calling Report.Generate() ) to perform your page adding logic.
2: Submit a bug to Developer Support. Use the following code to create a sample based on your particular assembly build:
Create a Web Project and add a WebGrid that is bound to some dummy data. Add a button and handle its Click event handler. Put this code in the Page to make it all work:
theTablePattern.Header.Repeat =
theTablePattern.Row.Cell.Background =
theTable.ApplyPattern(theTablePattern);
theHeaderCell = theTable.Header.AddCell();
theHeaderText = theHeaderCell.AddText();
theHeaderText.AddContent(c.Header.Caption);
theRow = theTable.AddRow();
theRowCell = theRow.AddCell();
theRowText = theRowCell.AddText();
theRowText.AddContent(r.Cells.FromKey(c.Key).Value.ToString());
theSection = theReport.AddSection();
theResponse.Close();
theRequest =
Now David, when you put together your sample for Developer Support, be aware of the code comment I placed in my CreateReport( ) method. If you run the sample without calling the Report.Generate( ) then the resulting PDF is going to have the Rows of data, a blank page and then the Infragistics image on the last page.
If you uncomment the line where it says so, it WILL call the Report.Generate( ) method and therefore cause anything else added to the report (the blank pages and image) to not be included in the PUBLISHED report.
If this is indeed a bug, it will be checked out by a developer and the bug will be associated with your incident and therefore be expedited as quickly as possible. This is why I am asking you to submit the support incident, so that you get the quickest response.
Thanks,
Tom