public bool CreateReport()
        {
            LoadPotentialCategories();
            _TotalIncome = new ReportObject.Snapshot();
            bool isSuccessful = false;

            iTextSharp.text.Document document = new iTextSharp.text.Document(PageSize.LEGAL);

            try
            {
                //set up RunReport event overrides & create doc
                string reportFileName = Path.GetFullPath(reportObject.ReportTempFileFullName);
                if (!Directory.Exists(Path.GetDirectoryName(reportFileName)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(reportFileName));
                }
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(reportFileName, FileMode.Create));
                writer.PageEvent = this;

                PdfPTable table = new PdfPTable(_Columns);
                Image     gif   = Image.GetInstance(Resources.logo, BaseColor.WHITE);
                gif.ScalePercent(35);

                _reportFont = FontFactory.GetFont("Arial", 8, iTextSharp.text.Font.NORMAL);

                document.AddTitle(reportObject.ReportTitle);

                document.SetPageSize(PageSize.LETTER);
                document.SetMargins(-50, -55, 10, 45);

                table.HeaderRows = 2;
                PrintReportHeader(table, gif);
                PrintReportDetailHeader(table);
                table.SetWidths(new float[] { 1.5f, 2, 1, 1, 1.5f });
                foreach (PotentialCategoryInfo categoryInfo in _PotentialCategories)
                {
                    PrintReportDetail(table, categoryInfo);
                }
                PrintReportDetailDisclaimer(table);

                document.Open();
                document.Add(table);
                document.Close();

                isSuccessful = true;
            }
            catch (DocumentException de)
            {
                reportObject.ReportError      = de.Message;
                reportObject.ReportErrorLevel = (int)LogLevel.ERROR;
            }
            catch (IOException ioe)
            {
                reportObject.ReportError      = ioe.Message;
                reportObject.ReportErrorLevel = (int)LogLevel.ERROR;
            }

            return(isSuccessful);
        }
        private void PrintReportDetail(PdfPTable table, PotentialCategoryInfo categoryInfo)
        {
            ReportObject.Snapshot snapshotData = GetSnapshotData(categoryInfo);

            if (categoryInfo.SequenceNumber >= 8 && categoryInfo.SequenceNumber < 9 && categoryInfo.SequenceNumber != 8.7)
            {
                _TotalIncome.Amount += snapshotData.Amount;
                _TotalIncome.Count  += snapshotData.Count;
            }

            string[] values;
            if (categoryInfo.SequenceNumber == 0)
            {
                values = new string[] { categoryInfo.Category, string.Empty, string.Empty };
            }
            else if (categoryInfo.SequenceNumber == 8.7)
            {
                values = new string[] { categoryInfo.Category, (snapshotData.Amount / 100).ToString("0.00%"), string.Empty };
            }
            else if (categoryInfo.SequenceNumber == 6.2 ||
                     categoryInfo.SequenceNumber == 6.4 ||
                     (categoryInfo.SequenceNumber >= 8 && categoryInfo.SequenceNumber <= 8.6) ||
                     (categoryInfo.SequenceNumber > 8.7 && categoryInfo.SequenceNumber < 8.8))

            {
                values = new string[] { categoryInfo.Category, string.Empty, snapshotData.Amount.ToString("c") };
            }
            else if (categoryInfo.SequenceNumber == 9)
            {
                values = new string[] { categoryInfo.Category, string.Empty, _TotalIncome.Amount.ToString("c") };
            }
            else
            {
                values = new string[] { categoryInfo.Category, snapshotData.Count.ToString(), snapshotData.Amount.ToString("c") };
            }

            if (categoryInfo.SequenceNumber == 9)
            {
                PrintReportDetailValues(table, string.Empty, string.Empty, "---------------", 0);
            }

            PrintReportDetailValues(table, values[0], values[1], values[2], categoryInfo.Tabs);
        }