我要如何插入一个表格与iTextSharp的PDF文档? [英] How do I insert a table into a PDF document with iTextSharp?

查看:230
本文介绍了我要如何插入一个表格与iTextSharp的PDF文档?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要插入一个表格到现有的PDF文档。



我是遵循有关将图像成PDF后,但我得到一个空引用尝试添加表时异常错误。



下面是我当前的代码

 公共静态的byte [] InsertTable(字节[] PDF,DataTable的DT,INT页次,诠释的x,INT Y,INT列,诠释行,诠释[]列宽,浮动的rowHeight)
{
使用(VAR inputPDF =新的MemoryStream(PDF))使用
(VAR outputPDF =新的MemoryStream())
{
变种读卡器=新PdfReader(inputPDF);
变种模子=新PdfStamper(读卡器,outputPDF);
VAR pdfContentByte = stamper.GetOverContent(页次);


表T =新表(列,行);
t.SetWidths(列宽);

的foreach(在dt.Rows的DataRow DR)
的foreach(对象o在dr.ItemArray)
{
细胞C =新的细胞();
c.Add(新组块(o.ToString()));
t.AddCell(三);
}
pdfContentByte.PdfDocument.Add(T);
pdfContentByte.PdfDocument.Close();
返回outputPDF.ToArray();
}
}


解决方案

确定我更新到5.0.6,然后拿到了表插入。现在,一切都越来越呈现,虽然在第一页上。

 公共静态的byte [] InsertTable(字节[] PDF,DataTable的DT ,INT页次,浮法X,浮法Y,诠释列,诠释行,浮法[]列宽,浮动的rowHeight)
{
使用使用(VAR inputPDF =新的MemoryStream(PDF))
( VAR outputPDF =新的MemoryStream())
{
//加载现有
变种读卡器=新PdfReader(inputPDF);
文档的文档=新的文件();
PdfWriter写= PdfWriter.GetInstance(DOC,outputPDF);
doc.Open();
PdfContentByte帆布= write.DirectContent;
PdfImportedPage页;
的for(int i = 1; I< = reader.NumberOfPages;我++){
页面= write.GetImportedPage(读者,我);
canvas.AddTemplate(页面,1F,0,0,1,0,0);
}

//加入我的表
PdfPTable T =新PdfPTable(列);
t.SetTotalWidth(列宽);

的foreach(在dt.Rows的DataRow DR)
的foreach(对象o在dr.ItemArray)
{
PdfPCell C =新PdfPCell();
c.AddElement(新组块(o.ToString()));
t.AddCell(三);
}
doc.Add(T);
doc.Close();
返回outputPDF.ToArray();
}
}


I want to insert a table into my existing PDF document.

I was following a post about inserting an image into a PDF but I'm getting an null reference exception error when trying to add the table.

Here is my current code

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();
    }
}

解决方案

Ok, I updated to 5.0.6 And I got the table inserted. Right now everything is getting rendered on the first page though.

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();
    }
}

这篇关于我要如何插入一个表格与iTextSharp的PDF文档?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆