C# 复制到新文件中,并在iText7 c中填写表格#

C# 复制到新文件中,并在iText7 c中填写表格#,c#,itext,itext7,C#,Itext,Itext7,我一直在努力掌握ITEXT7c#,但运气不佳 我的目标是: 以表单(多个字段)作为模板加载pdf(一页) 填写表格,展平并将填写的表格页面复制到新文档中 使用不同的数据重复2次 保存到内存流 我有不同的部分工作,但我不能让它一起工作 var memoryStream = new MemoryStream(); PdfReader reader = new PdfReader("untitled-1.pdf"); //Iput PdfWriter writer = new PdfWriter(me

我一直在努力掌握ITEXT7c#,但运气不佳

我的目标是:

  • 以表单(多个字段)作为模板加载pdf(一页)
  • 填写表格,展平并将填写的表格页面复制到新文档中
  • 使用不同的数据重复2次
  • 保存到内存流
  • 我有不同的部分工作,但我不能让它一起工作

    var memoryStream = new MemoryStream();
    PdfReader reader = new PdfReader("untitled-1.pdf"); //Iput
    PdfWriter writer = new PdfWriter(memoryStream); //output
    PdfDocument pdfDoc = new PdfDocument(reader, writer);
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
    var fields = form.GetFormFields();
    if(fields.ContainsKey("address")) { 
         fields["address"].SetValue("first\nlast");
    }
    form.FlattenFields();
    pdfDoc.Close();
    byte[] b = memoryStream.ToArray();
    File.WriteAllBytes(@"t.pdf", b);
    
    克隆页面:

    // create clone page x times
    PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output.pdf").SetSmartMode(true));
    pdfDoc.InitializeOutlines();
    PdfDocument srcDoc;
    for (int i = 0; i<5; i++) {
        srcDoc = new PdfDocument(new PdfReader("untitled-1.pdf"));
        // copy content to the resulting PDF
        srcDoc.CopyPagesTo(1, srcDoc.GetNumberOfPages(), pdfDoc);
    }
    pdfDoc.Close();
    
    //创建克隆页面x次
    PdfDocument pdfDoc=新的PdfDocument(新的PdfWriter(“output.pdf”).SetSmartMode(true));
    pdfDoc.InitializeOutlines();
    PDF文档srcDoc;
    
    for(inti=0;我写了这个问题后就有了一个想法

    使用名为address的表单和文本字段创建pdf文件以用作模板,另存为untitled1 pdf

    此代码将创建一个空文档,然后为用户中的每个用户加载并填充该用户的字段地址

    然后,填写的表格将被展平并复制到新文档中。 完成所有操作后,文档将保存为result.pdf

    //b

    static void Main(字符串[]args)
    {
    列表用户=新列表{“彼得”、“约翰”、“卡尔”};
    byte[]result=createPdf(用户,“untitled-1.pdf”);
    writealBytes(@“result.pdf”,result);
    }
    公共静态字节[]createPdf(列出用户,字符串模板文件)
    {
    //为用户中的每个用户创建克隆页
    使用(MemoryStream MemoryStream=new MemoryStream())
    {
    PdfDocument pdfDoc=新的PdfDocument(新的PdfWriter(memoryStream).SetSmartMode(true));
    pdfDoc.InitializeOutlines();
    PDF文档srcDoc;
    foreach(用户中的var u)
    {
    MemoryStream m=新的MemoryStream(fillForm(u,templateFile));
    srcDoc=新PDF文档(新PDF阅读器(m));
    //将内容复制到生成的PDF
    srcDoc.CopyPagesTo(1,srcDoc.GetNumberOfPages(),pdfDoc);
    }
    pdfDoc.Close();
    返回memoryStream.ToArray();
    }
    }
    公共静态字节[]填充形式(字符串用户、字符串模板文件)
    {
    使用(var memoryStream=new memoryStream())
    {
    PdfReader reader=新PdfReader(模板文件);//Iput
    PdfWriter writer=新的PdfWriter(memoryStream);//输出
    PdfDocument pdfDoc=新PdfDocument(读写器);
    PdfAcroForm form=PdfAcroForm.GetAcroForm(pdfDoc,true);
    var fields=form.GetFormFields();
    if(fields.ContainsKey(“地址”))
    {
    字段[“地址”]。设置值(用户);
    }
    form.flattfields();
    pdfDoc.Close();
    字节[]b=内存流.ToArray();
    返回b;
    }
    }
    
    static void Main(string[] args)
        {
            List<string> users = new List<string> { "Peter", "john", "Carl" };
            byte[] result = createPdf(users, "untitled-1.pdf");
            File.WriteAllBytes(@"result.pdf", result);
        }
    
        public static byte[] createPdf(List<string> users,string templateFile)
        {
            // create clone page for each user in users
            using (MemoryStream memoryStream = new MemoryStream())
            {
                PdfDocument pdfDoc = new PdfDocument(new PdfWriter(memoryStream).SetSmartMode(true));
                pdfDoc.InitializeOutlines();
                PdfDocument srcDoc;
                foreach (var u in users)
                {
                    MemoryStream m = new MemoryStream(fillForm(u,templateFile));
                    srcDoc = new PdfDocument(new PdfReader(m));
                    // copy content to the resulting PDF
                    srcDoc.CopyPagesTo(1, srcDoc.GetNumberOfPages(), pdfDoc);
                }
                pdfDoc.Close();
    
                return memoryStream.ToArray();
            }
        }
    
        public static byte[] fillForm(string user,string templateFile)
        {
            using (var memoryStream = new MemoryStream())
            {
                PdfReader reader = new PdfReader(templateFile); //Iput
                PdfWriter writer = new PdfWriter(memoryStream); //output
                PdfDocument pdfDoc = new PdfDocument(reader, writer);
                PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, true);
                var fields = form.GetFormFields();
    
                if (fields.ContainsKey("address"))
                {
                    fields["address"].SetValue(user);
                }
    
                form.FlattenFields();
                pdfDoc.Close();
                byte[] b = memoryStream.ToArray();
                return b;
            }
        }