如何使用iTextSharp将表格插入PDF文档?

我想在现有的PDF文档中插入一个表格。

我正在关注一个关于将图像插入PDF的post,但是在尝试添加表时我得到一个空引用exception错误。

这是我目前的代码

public static byte[] InsertTable(byte[] pdf, DataTable dt, int pageNum, int x, int y, int columns, int rows, int[] columnWidths, float rowHeight) { using (var inputPDF = new MemoryStream(pdf)) using (var outputPDF = new MemoryStream()) { var reader = new PdfReader(inputPDF); var stamper = new PdfStamper(reader, outputPDF); var pdfContentByte = stamper.GetOverContent(pageNum); Table t = new Table(columns, rows); t.SetWidths(columnWidths); foreach (DataRow dr in dt.Rows) foreach (object o in dr.ItemArray) { Cell c = new Cell(); c.Add(new Chunk(o.ToString())); t.AddCell(c); } pdfContentByte.PdfDocument.Add(t); pdfContentByte.PdfDocument.Close(); return outputPDF.ToArray(); } } 

虽然代码似乎没问题,但我对你的行感到有些困惑

 Table t = new Table(columns, rows); 

你确定那是你想要的而不是PdfPTable 。 您的代码中的其他所有内容似乎都在使用PdfPTable ,而我无法在iTextSharp找到普通的Table

而且巧合的是,我现在正在做类似的事情。

编辑修改后的代码

我已经清理了不再使用的字段了:

 public static byte[] InsertTable(byte[] buffer, DataTable dt, int columns, float[] columnWidths) { using (MemoryStream inputPDF = new MemoryStream(buffer)) using (MemoryStream outputPDF = new MemoryStream()) { PdfReader reader = new PdfReader(inputPDF); iTextSharp.text.Document doc = new iTextSharp.text.Document(); PdfWriter write = PdfWriter.GetInstance(doc, outputPDF); doc.Open(); for (int i = 1; i <= reader.NumberOfPages; i++) { doc.NewPage(); write.DirectContent.AddTemplate(write.GetImportedPage(reader, i), 1f, 0, 0, 1, 0, 0); } //adding my table PdfPTable t = new PdfPTable(columns); t.SetTotalWidth(columnWidths); foreach (DataRow dr in dt.Rows) foreach (object o in dr.ItemArray) { PdfPCell c = new PdfPCell(); c.AddElement(new Chunk(o.ToString())); t.AddCell(c); } doc.NewPage(); doc.Add(t); doc.Close(); write.Close(); reader.Close(); return outputPDF.ToArray(); } } 

希望这能解决你的问题。 我将在接下来的六个小时在线,并会尽力关注这一点,直到我回到家:)

好的,我更新到5.0.6然后我插入了表格。 现在一切都在第一页上呈现。

 public static byte[] InsertTable(byte[] pdf, DataTable dt, int pageNum, float x, float y, int columns, int rows, float[] columnWidths, float rowHeight) { using (var inputPDF = new MemoryStream(pdf)) using (var outputPDF = new MemoryStream()) { //loading existing var reader = new PdfReader(inputPDF); Document doc = new Document(); PdfWriter write = PdfWriter.GetInstance(doc, outputPDF); doc.Open(); PdfContentByte canvas = write.DirectContent; PdfImportedPage page; for (int i = 1; i <= reader.NumberOfPages; i++) { page = write.GetImportedPage(reader, i); canvas.AddTemplate(page, 1f, 0, 0, 1, 0, 0); } //adding my table PdfPTable t = new PdfPTable(columns); t.SetTotalWidth(columnWidths); foreach (DataRow dr in dt.Rows) foreach (object o in dr.ItemArray) { PdfPCell c = new PdfPCell(); c.AddElement(new Chunk(o.ToString())); t.AddCell(c); } doc.Add(t); doc.Close(); return outputPDF.ToArray(); } }