Вывод в pdf формате

142
21 ноября 2019, 13:10

Имеется следующий код, формирующий pdf документ:

    private static void returnPdf(IEnumerable<object> reportItemList)
    {
        var suggestedFileName = "Sales_By_Payment_Type_Report" + ".pdf";
        using (var doc = new Document(PageSize.A4, 60, 60, 30, 30))
        {
            PdfWriter.GetInstance(doc, new FileStream(suggestedFileName, FileMode.Create));
            doc.Open();
            doc.NewPage();
            //doc.Add();
            //doc.Add(new Element());
            //start & end dates
            var totalList = reportItemList as IEnumerable<ReportItem>;
            if (totalList != null)
            {
              //filter by 14
              var members = typeof(ReportItem).GetMembers().Where(memb =>memb.MemberType == 
                System.Reflection.MemberTypes.Property && memb.GetCustomAttributes(false).Where(att => (att as ReportProperty)?.PropertyName != String.Empty).Count() != 0);
              var itemNumber = members.Count();
              if (itemNumber != 0)
              { 
                PdfPTable table = new PdfPTable(itemNumber);
                PdfPCell[] itemArray = new PdfPCell[itemNumber];
                for (int i = 0; i < itemArray.Length - 1; i++)
                {
                  var customList = members.ElementAt(i).CustomAttributes.Where(t => t.AttributeType == typeof(ReportProperty)).FirstOrDefault()?.ConstructorArguments;
                  if (customList.Count != 0) {
                    itemArray[i] = new PdfPCell();
                    itemArray[i].Phrase = new Phrase(customList[0].Value.ToString());
                  }
                }
                PdfPRow pdfRow = new PdfPRow(itemArray);
                table.Rows.Add(pdfRow);

                for (int i = 0; i < reportItemList.Count() - 1; i++)
                {
                  PdfPCell[] itemArrayRow = new PdfPCell[itemNumber];
                  table.Rows.Add(new PdfPRow(new PdfPCell[itemNumber]));
                }
                //footer
                table.Rows.Add(new PdfPRow(new PdfPCell[itemNumber]));
                try
                {                      
                  **doc.Add(table);**
                }
                catch (DocumentException ex)
                {
                  throw ex;
                }
                catch (Exception)
                {
                  throw;
                }
                //doc.Add(table);
                //doc.Close();
              }
            }
        }
    }

В блоке try генерится исключение DocumenException из iTextSharp

Просьба помочь, спасибо

Answer 1
//footer
table.Rows.Add(new PdfPRow(new PdfPCell[itemNumber]));

Тут кроется ошибка. В PdfPCell массиве, элементы все null.

READ ALSO
Библиотеки для нахождения производных C#

Библиотеки для нахождения производных C#

Подскажите Есть ли библиотеки для нахождения проиводных от функций ? или как можно реализовать по другом ?

123
C++ clr снять mini damp с запущенного C# кода

C++ clr снять mini damp с запущенного C# кода

Как идеологически правильно снять мини дамп с запущенного из C++ (clr hosting) C# кода при возникновении исключения?

110
Почему вызов WinAPI-функции выбрасывает AccessViolationException?

Почему вызов WinAPI-функции выбрасывает AccessViolationException?

При вызове функции SetEntriesInAcl вылетает AccessViolationException: attempted to read or write protected memoryИзолировала этот код и поняла, что если он выполняется под

112
Получить атрибут внешней сборки (c#)

Получить атрибут внешней сборки (c#)

Есть два файла: библиотека и сама программаВ библиотеке находится информация в виде настраиваемого атрибута M (содержится в ещё одной библиотеке...

137