簡體   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