我正在尝试使用iText for .NET(v7.0.4)将签名表单字段放在特定页面的给定位置。我正在处理的代码如下:
public static void test()
{
using (PdfDocument pdfDoc = new PdfDocument(new PdfWriter(@"c:\temp\pippo.pdf")))
{
//Add some blank pages
pdfDoc.AddNewPage();
pdfDoc.AddNewPage();
pdfDoc.AddNewPage();
//Instantiate a Signature Form Field using factory
PdfSignatureFormField sgnField =
PdfFormField.CreateSignature(pdfDoc, new Rectangle(100, 100, 200, 100));
//setting name and page
sgnField.SetFieldName("pluto");
sgnField.SetPage(1);
//Adding to AcroForm
PdfAcroForm.GetAcroForm(pdfDoc, true).AddField(sgnField);
}
}
输出文档(pippo.pdf)在第一页中有签名字段,这是预期的行为。问题是我甚至可以在最后一页(在这种情况下是第三页)中看到签名字段。
此外,如果我通过调用pdfDoc.RemovePage(3);
删除最后一页,则签名字段甚至会从第一页消失。
问题是:如何在最后一页中复制签名表单字段?任何建议都被广泛接受!
答案 0 :(得分:0)
方法AddField(PdfFormField field)
记录为
* This method adds the field to the last page in the document.
* If there's no pages, creates a new one.
因此,您首先使用
将字段分配到第一页sgnField.SetPage(1)
然后也使用
到最后一个PdfAcroForm.GetAcroForm(pdfDoc, true).AddField(sgnField);
您应该使用AddField(PdfFormField field, PdfPage page)
代替:
PdfAcroForm.GetAcroForm(pdfDoc, true).AddField(sgnField, pdfDoc.GetFirstPage());
@iText DEV:当使用PDF2时,应该阻止这种情况。
答案 1 :(得分:0)
mkl的回答很好
还适用于您尝试添加到PDF页面的其他组件,例如PdfTextFormField
:
我认为最简单的方法是应用getPage
作为参数,以确保我得到的正是预期的结果。
示例:
PdfAcroForm
.getAcroForm(pdfDoc, true)
.addField(myTextArea, pdfDoc.getPage(pageCount));