使用PdfStamper插入页面不会导入表单字段

时间:2014-10-24 23:53:05

标签: itextsharp itext

我正在将页面页面插入pdf doc。这些页面最后没有添加或开始需要在某处插入中间(我可以通过书签确定插入位置)。

关键不是松散书签。所以我正在使用PdfStamper来插入页面。问题是正在插入的pdf具有表单字段,而这些字段没有通过。

插入

的代码
for (int pageNum = 1; pageNum <= readerPdfToAdd.NumberOfPages; pageNum++)
{
    PdfImportedPage page = pdfStamper.GetImportedPage(readerPdfToAdd, pageNum);
    pdfStamper.InsertPage(filesByCategory[i].PageOfInsert + pageNum, readerPdfToAdd.GetPageSizeWithRotation(pageNum));

    var rotation = readerPdfToAdd.GetPageRotation(pageNum);
    if (rotation == 90 || rotation == 270) 
    {
        pdfStamper.GetUnderContent(filesByCategory[i].PageOfInsert + pageNum)
                  .AddTemplate(page, 0, -1f, 1f, 0, 0, readerPdfToAdd.GetPageSizeWithRotation(pageNum).Height);                                          
    }
    else 
    {
        pdfStamper.GetUnderContent(filesByCategory[i].PageOfInsert + pageNum).AddTemplate(page, 1f, 0, 0, 1f, 0, 0);


    }
}

我尝试过这样的东西来复制字段,但这并没有完全复制。

foreach (KeyValuePair<string, AcroFields.Item> kvp in pdfFormFields.Fields)
{
    var s = pdfFormFields.GetFieldPositions("Date");

    PdfArray r = kvp.Value.GetWidget(0).GetAsArray(PdfName.RECT);
    var name = kvp.Value.GetWidget(0).GetAsArray(PdfName.NAME);
    Rectangle rr = new Rectangle(r.GetAsNumber(0).FloatValue, r.GetAsNumber(1).FloatValue, r.GetAsNumber(2).FloatValue, r.GetAsNumber(3).FloatValue);
    TextField field = new TextField(pdfStamper.Writer, rr, kvp.Value.GetWidget(0).Get(PdfName.T).ToString());

    if (kvp.Value.GetWidget(0).Get(PdfName.V) != null)
        field.Text = kvp.Value.GetWidget(0).Get(PdfName.V).ToString();
    // add the field here, the second param is the page you want it on
    pdfStamper.AddAnnotation(field.GetTextField(), filesByCategory[i].PageOfInsert + pageNum);

    fields.SetField(kvp.Key, kvp.Value.ToString());
}

有更好的方法吗?我试过在源文档中丢失书签的PdfCopy。

1 个答案:

答案 0 :(得分:0)

请使用PdfCopyPdfSmartCopy汇总文件。如chapter 6 of my book中所述,PdfImportedPage仅复制内容流中的内容。

您可能需要PdfStamper在原始文档上标记一些额外内容,这很好,但您需要将其与PdfCopyPdfSmartCopy结合起来以汇总最终文档。