iTextSharp PdfStamper.PartialFormFlatten仅展平部分而非全部字段

iTextSharp PdfStamper.PartialFormFlatten仅展平部分而非全部字段,itext,Itext,下面的代码正确地将值“foo”赋给了命名字段,但该字段没有被“展平”。我一定是忽略了一步,但我不知道那是什么。请告知。谢谢 public byte[] FlattenSpecifiedFormFields(byte[] b, List<string> fieldNames2Flatten) { PdfReader reader = new PdfReader(b); using (var ms = new MemoryStream())

下面的代码正确地将值“foo”赋给了命名字段,但该字段没有被“展平”。我一定是忽略了一步,但我不知道那是什么。请告知。谢谢

public byte[] FlattenSpecifiedFormFields(byte[] b, List<string> fieldNames2Flatten)
    {
        PdfReader reader = new PdfReader(b);
        using (var ms = new MemoryStream())
        {
            var stamper = new iTextSharp.text.pdf.PdfStamper(reader, ms);               
            foreach (string name in fieldNames2Flatten)
            {

                stamper.AcroFields.SetField(name, "foo");
                stamper.PartialFormFlattening(name);
            }

            stamper.Close();
            return ms.ToArray();
        };
    }
public byte[]指定字段(byte[]b,List fieldNames2Flatten)
{
PDF阅读器=新PDF阅读器(b);
使用(var ms=new MemoryStream())
{
var stamper=new iTextSharp.text.pdf.PdfStamper(阅读器,ms);
foreach(fieldNames2Flatten中的字符串名称)
{
stamper.AcroFields.SetField(名称“foo”);
母版。局部成形(名称);
}
压模关闭();
返回ToArray女士();
};
}

即使在部分展平表单时,
PdfStamper
formflatting
属性也必须设置为
true
。即:

var stamper = new PdfStamper(reader, ms);
stamper.FormFlattening = true;

foreach (string name in fieldNames2Flatten)
{
    stamper.AcroFields.SetField(name, "foo");
    stamper.PartialFormFlattening(name);
}

获取
PdfStamper
实例后,调用
PartialFormFlattening()
(在
foreach
块之外):
stamper.formflatting=true
@kuujinbo将此作为答案,以便答案可以被接受和投票;-)