以pdf格式输出С#iTextSharp

时间:2019-03-11 15:28:56

标签: c# itext

我刚刚开始探索itextsharp C#库,并且遇到了异常。 这种异常的类型是特定于该库的。

有以下代码构成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(); 

        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;

            }           

          }
        }

    }
}

在try块中,iTextSharp的DocumenException引发了异常

enter image description here

doc,表格不为空 请帮助,谢谢

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

1 个答案:

答案 0 :(得分:1)

您这样做

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

即您基于未设置任何值的新PdfPRow数组创建新的PdfPCell,因此该数组中的所有条目均为null

当iText尝试在doc.Add(table)期间布置该表时,它最终也会尝试布置该行,并且偶然发现了所有这些null单元格。