1

當執行下面的代碼時,我得到一個NullReferenceException。我還注意到,當我將代碼寫入主表的時候,嵌套表出現在新頁面上。如果我取出將單元格寫入主表的兩個循環,則不會發生這種情況。多個頁面上的ItextSharp嵌套表導致NullReferenceException

<%@ Page Title="" Language="C#" MasterPageFile="~/Main.master" %> 

<%@ Import Namespace="iTextSharp.text" %> 
<%@ Import Namespace="iTextSharp.text.pdf" %> 

<%@ Import Namespace="System.IO" %> 


<script runat="server"> 

protected void Page_Load(object sender, EventArgs e) 
{ 

    Document doc = new Document(PageSize.LETTER); 

    // Here is some stuff needed to put the pdf into the users response stream 
    Response.Clear(); 
    Response.ContentType = "application/pdf"; 
    MemoryStream memoryStream = new MemoryStream(); 

    PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream); 

    writer.CloseStream = false; // This is important, but it may work without it 

    doc.SetMargins(20, 20, 36, 10); 

    // write stuff to the documents 
    doc.Open(); 

    doc.Add(GenerateNestedTableTest()); 


    doc.Close(); 

    // Now that all writing to the document is done lets send it to the user 
    writer.Flush(); 
    Response.OutputStream.Write(memoryStream.GetBuffer(), 0, memoryStream.GetBuffer().Length); 
    Response.OutputStream.Flush(); 
    Response.OutputStream.Close(); 
    Response.End(); 
} 


private PdfPTable GenerateNestedTableTest() 
{ 
    PdfPTable mainTable = new PdfPTable(5); 

    // test adding cells to mainTable in groups of 5 
    for (int i = 0; i <= 5 * 10; ++i) 
    { 
     PdfPCell mainTableCell = new PdfPCell(new Phrase("Test")); 
     mainTable.AddCell(mainTableCell); 
    } 

    PdfPTable nestedTable = new PdfPTable(3); 

    Font TitleFont = new Font(null, 20, Font.BOLD, Color.BLACK); 

    PdfPCell TitleCell = new PdfPCell(new Phrase("This is the header of the nested table", TitleFont)); 
    TitleCell.Colspan = 3; 

    nestedTable.AddCell(TitleCell); 

    string[] headers = new string[] { "Header1", "Header2", "Header3" }; 

    foreach (string header in headers) 
    { 
     PdfPCell HeaderCell = new PdfPCell(new Phrase(header, new Font(null, 14, Font.BOLD, Color.BLUE))); 
     HeaderCell.HorizontalAlignment = Element.ALIGN_CENTER; 
     nestedTable.AddCell(HeaderCell); 
    } 




    for (int i = 0; i <= 3*556; ++i) 
    { 
     nestedTable.AddCell(new Phrase("Test Cell")); 
    } 


    PdfPCell nestedTableCell = new PdfPCell(nestedTable); 
    nestedTableCell.Colspan = 4; 

    mainTable.AddCell(new PdfPCell()); 
    mainTable.AddCell(nestedTableCell); 


    // test adding cells to mainTable in groups of 5 
    for (int i = 0; i <= 5 * 10; ++i) 
    { 
     PdfPCell mainTableCell = new PdfPCell(new Phrase("Test")); 
     mainTable.AddCell(mainTableCell); 
    } 

    return mainTable; 
} 

</script> 

<asp:Content ID="Content1" ContentPlaceHolderID="PageHeadContentPlaceHolder" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="PageTitleContentPlaceHolder" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content3" ContentPlaceHolderID="PageBodyContentPlaceHolder" Runat="Server"> 
</asp:Content> 
+0

你會在哪一行發生異常? – 2010-02-05 06:34:26

+0

doc.Add(GenerateNestedTableTest()); – 249076 2010-02-05 14:51:09

回答

4

經過一段時間的掙扎後,我終於決定這是圖書館的一個缺陷。我去看看是否有更新的版本。事實上是。我使用的是4.1.6版本。現在有一個5.0.0版本。該代碼在該版本中正確運行。

我更換了dll文件後,我還添加了

mainTable.SplitLate = false; 
mainTable.SplitRows = true; 

private PdfPTable GenerateNestedTableTest() 
{ 
    PdfPTable mainTable = new PdfPTable(5); 

後立即修復嵌套表是一個新的頁面上的問題。現在一切似乎都很順利。也許這篇文章會幫助其他版本的用戶。

+0

FWIW,我將你的代碼複製到了一個測試項目的代碼中,而我沒有得到這個錯誤。我正在使用舊版本的庫(我認爲4.0.3)。真高興你做到了。 – 2010-02-05 16:17:57

+0

我們最近在4.1.6上也有這個相同的問題。嘗試了最新的5.5.9,並沒有發生在那裏。然而,4.1.6以上版本的許可證使得您必須提供源代碼或購買商業許可證以滿足US $ 2,400美元(當前)的要求。 – HK1 2016-03-24 14:16:52

相關問題