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
Was this ever submitted as a bug? I've noticed this same behavior in v2009.1, which was just recently released. I also just submitted a support request today related to this same issue. I'm hoping that this is already in the list of known bugs and that it is already being worked on. Having the ability to determine the number of pages so that I can add content afterwards is key to the project that I am working on.
Hi,
This issue was never brought to Developer Support by the first customer in this thread. We figured this scenario was no longer an issue. However, I have sent this to Developer Support myself so that they created an incident. This has to go through development to see why this happens and if they can do something about it. I understand how the document engine works very well and one thing I can speak to is that the design of the engine is pretty much that of a "linear" execution model. This means that the code (both internal and external to the engine) executes top-down. There are no collections or accessible objects as we know them in OOP land, however, this model offers much greater performance and a much more tighter code base.
In the meantime while this is being looked at, as a work-around, you may want to try and use logic similar to the following:
Execute your code until it reaches the point where you need to determine the number of pages. Once you determine that number, discard the report and then start over again and then go PAST the point where you discovered the page count. This way you can create your document from start to finish on the second pass with knowledge of how many pages you have.
Here is the case number for the incident that was submitted for you:
CAS-26127-CB532K
You can use that number to refer to your case / incident when going through Developer Support:
http://www.infragistics.com/support/default.aspx#Overview