我刚刚开始探索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引发了异常
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()
答案 0 :(得分:1)
您这样做
//footer
table.Rows.Add(new PdfPRow(new PdfPCell[itemNumber]));
即您基于未设置任何值的新PdfPRow
数组创建新的PdfPCell
,因此该数组中的所有条目均为null
。
当iText尝试在doc.Add(table)
期间布置该表时,它最终也会尝试布置该行,并且偶然发现了所有这些null
单元格。