繁体   English   中英

复制到新文档并在iText7 C#中填写表格

[英]Copy into new document and fillout form in iText7 c#

我一直在尝试一点点运气就掌握iText7 c#。

我的目标是:

  1. 加载以表单(多个字段)为模板的pdf(一页)
  2. 填写表格,拼合并将填写的表格页面复制到新文档
  3. 使用不同的数据重复#2 x次
  4. 保存到内存流

我的各个部分都在工作,但我无法让它一起工作

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

在写完这个问题后才有了一个主意。 这是解决这个问题的一种方法

创建一个带有表单和名称为address的文本字段的pdf文件,以用作模板,另存为untitled1-pdf。

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

然后将填写的表格展平并复制到新文档中。 完成后,文档将另存为result.pdf

// 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;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM