複数のページItextSharpネストした表は、とNullReferenceExceptionが発生します
-
18-09-2019 - |
質問
以下のコードが実行されると、
私はと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>
解決
しばらくそれで苦労した後、私は最終的にそれは、ライブラリ内の欠陥と判断しました。私が見て、新しいバージョンがあったかどうかを確認するために行ってきました。 Infactはがありました。私は、バージョン4.1.6を使用していました。バージョン5.0.0が用意されました。このコードは、そのバージョンで正常に動作します。
私はまた、追加のdllを交換した後、
mainTable.SplitLate = false;
mainTable.SplitRows = true;
の直後に
private PdfPTable GenerateNestedTableTest()
{
PdfPTable mainTable = new PdfPTable(5);
新しいページ上にあるネストした表の問題を修正します。すべてが今本当によく動作するようです。たぶんこの記事は、古いバージョンの上にある他の誰かを助けるます。
所属していません StackOverflow