如何使用itextsharp为现有表单填充pdf插入表

时间:2012-03-01 13:27:06

标签: itextsharp

我有一个表单填写pdf,我们动态地将文本字段值添加到pdf。添加后我需要在pdf的同一页面中添加表格。 如果我添加表,它只创建新的pdf表。清除所有其他现有数据。 我使用下面的代码:

    private void AddTableToPDF()
    {

        Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 100, 100);
        try
        {
            string pdfFilePath = @"D:\Temp\PDF\Inspection Form - Steel Girder.pdf";

            PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(pdfFilePath, FileMode.Append));

            doc.Open();//Open Document to write           

            System.IO.MemoryStream mStream = new System.IO.MemoryStream();
            PdfWriter writer = PdfWriter.GetInstance(doc, mStream);               

            DataTable dt = GetDataTable();
            DataTable dtHeader = new DataTable();
            dtHeader = GetHeaderDataTable();             


            if (dtHeader != null)
            {
                PdfPTable PdfTable = new PdfPTable(dtHeader.Columns.Count);
                PdfPCell PdfPCell = null;

                for (int rows = 0; rows < dtHeader.Rows.Count; rows++)
                {
                    for (int column = 0; column < dtHeader.Columns.Count; column++)
                    {
                        PdfPCell = new PdfPCell(new Phrase(new Chunk(dtHeader.Rows[rows][column].ToString(), font8)));
                        PdfTable.AddCell(PdfPCell);
                    }
                }               

                doc.Add(PdfTable); // add pdf table to the document

            }

            if (dt != null)
            {                    
                PdfPTable PdfTable = new PdfPTable(dt.Columns.Count);
                PdfPCell PdfPCell = null;


                PdfPCell = new PdfPCell(new Phrase(new Chunk("Reference", font8)));
                PdfTable.AddCell(PdfPCell);

                PdfPCell = new PdfPCell(new Phrase(new Chunk("Remark", font8)));
                PdfTable.AddCell(PdfPCell);

                PdfPCell = new PdfPCell(new Phrase(new Chunk("Description", font8)));
                PdfTable.AddCell(PdfPCell);


                for (int rows = 0; rows < dt.Rows.Count; rows++)
                {
                    for (int column = 0; column < dt.Columns.Count; column++)
                    {
                        PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows][column].ToString(), font8)));
                        PdfTable.AddCell(PdfPCell);
                    }
                }

                doc.Add(PdfTable); // add pdf table to the document                 

            }


        }
        catch (DocumentException docEx)
        {
            Response.Write(docEx.Message);

        }
        catch (IOException ioEx)
        {
            Response.Write(ioEx.Message);

        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);

        }
        finally
        {

            doc.Close();

        }
    }

1 个答案:

答案 0 :(得分:1)

假设您的主PDFm1.pdf命名。您只需创建一个名为PDF的新m2.pdf,其中包含您需要添加的新Table。现在只有merge这两个PDF (m1.pdf & m2.pdf)进入新的MergedNerw.pdf'}

Merge Two PDF请使用以下代码此工作正常我已经测试过了:

protected void BtnMerge_Click(object sender, EventArgs e)
    {
        String[] files = @"d:\m1.pdf,d:\m2.pdf".Split(',');
        MergeFiles(@"d:\MergedNew.pdf", files);
    }

    public void MergeFiles(string destinationFile, string[] sourceFiles)
    {

        if (System.IO.File.Exists(destinationFile))
            System.IO.File.Delete(destinationFile);

        string[] sSrcFile;
        sSrcFile = new string[2];
        string[] arr = new string[2];
        for (int i = 0; i <= sourceFiles.Length - 1; i++)
        {
            if (sourceFiles[i] != null)
            {
                if (sourceFiles[i].Trim() != "")
                   arr[i] = sourceFiles[i].ToString();
            }
        }
        if (arr != null)
        {
            sSrcFile = new string[2];

            for (int ic = 0; ic <= arr.Length - 1; ic++)
            {
                sSrcFile[ic] = arr[ic].ToString();
            }
        }
        try
        {
            int f = 0;
            PdfReader reader = new PdfReader(sSrcFile[f]);
            int n = reader.NumberOfPages;
            //Response.Write("There are " + n + " pages in the original file.");
            Document document = new Document(PageSize.A4);
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
            document.Open();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage page;
            int rotation;
            while (f < sSrcFile.Length)
            {
                int i = 0;
                while (i < n)
                {
                    i++;
                    document.SetPageSize(PageSize.A4);
                    document.NewPage();
                    page = writer.GetImportedPage(reader, i);
                    rotation = reader.GetPageRotation(i);
                    if (rotation == 90 || rotation == 270)
                    {
                        cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
                    }
                    else
                    {
                        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
                    }
                    //Response.Write("\n Processed page " + i);
                }

                f++;
                if (f < sSrcFile.Length)
                {
                    reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]);
                    //get the numnber of pages
                    n = reader.NumberOfPages;
                    //Response.Write("There are " + n + " pages in the original file.");
                }
            }
            //Response.Write("Success");
            document.Close();
        }
        catch (Exception e)
        {
            //Response.Write(e.Message);
        }
    }

希望这能帮到你!