Reputation: 246
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
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
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