Roman Ieromenko
Roman Ieromenko

Reputation: 246

Output in pdf format С# iTextSharp

I am just starting to explore itextsharp C# library and have encountered an exception. The type of this exception is specific from this library.

There is the following code that forms the pdf document:

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(); 

        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);                
            //footer
            table.Rows.Add(new PdfPRow(new PdfPCell[itemNumber]));
            try
            {                      

              **doc.Add(table);**

            }
            catch (DocumentException ex)
            {
              throw ex;

            }           

          }
        }

    }
}

In the try block an exception is thrown by a DocumenException from iTextSharp

enter image description here

doc, table are not nulls Please help, thank you

iTextSharp.text.DocumentException:  reference to an object does not indicate an object instance.
    в PdfTesting.Program.returnPdf(IEnumerable`1 reportItemList) в D:\FranPosTest\iconnect-web\PdfTesting\Program.cs:строка 70   
    в PdfTesting.Program.Main(String[] args) в D:\FranPosTest\iconnect-web\PdfTesting\Program.cs:строка 107
    в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    в System.Threading.ThreadHelper.ThreadStart()

Upvotes: 3

Views: 379

Answers (1)

mkl
mkl

Reputation: 95888

You do this

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

I.e. you create a new PdfPRow based on a new PdfPCell array you set no value in, so all entries in that array are null.

When iText attempts to layout that table during doc.Add(table), it eventually tries to layout this row, too, and stumbles over all those null cells.

Upvotes: 1

Related Questions