C# 将Acrofield移到其他页面

C# 将Acrofield移到其他页面,c#,pdf,itextsharp,acrofields,C#,Pdf,Itextsharp,Acrofields,类似于但没有声誉,我不能在那里写评论 如何将RadioButtonItem移动到其他页面? 我尝试过几种方法,包括使用内部方法“ForcePage”、属性“PlaceInPage”或将PdfName.P设置为新页面,但都没有成功: PdfReader pdfr = new PdfReader(docdata); var mspdf = new MemoryStream(); var pdfstamper = new PdfStamper(pdfr, mspdf); var _field

类似于但没有声誉,我不能在那里写评论

如何将RadioButtonItem移动到其他页面? 我尝试过几种方法,包括使用内部方法“ForcePage”、属性“PlaceInPage”或将PdfName.P设置为新页面,但都没有成功:

 PdfReader pdfr = new PdfReader(docdata);
 var mspdf = new MemoryStream();
 var pdfstamper = new PdfStamper(pdfr, mspdf);

 var _field = pdfstamper.AcroFields.GetFieldItem("gender");

 //accessing the internal "ForcePage" Method
 System.Reflection.BindingFlags bindingFlags = System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic;
 System.Reflection.MethodInfo minfo = _field.GetType().GetMethod("ForcePage", bindingFlags);
 minfo.Invoke(_field, new Object[] { 0, 2 });

 //trying to set it manually
 _field.GetWidget(0).Put(PdfName.P, (PdfObject)pdfstamper.Writer.GetPageReference(2));
这不会以任何方式影响结果PDF中的字段位置,而另一个SO问题中的示例适用于在当前页面中移动无线电场:

 PdfArray rect = _field.GetWidget(0).GetAsArray(PdfName.RECT);
 rect[0] = new PdfNumber(20);
以不同的尝试创建具有旧无线电场值的新无线电场:

 PdfFormField radiogroup = null;
 for (int i = 0; i < _field.Size ; i++)
 {
     object onValue = _field.GetWidget(i).GetAsDict(PdfName.AP).GetAsDict(PdfName.N).Keys.First();
     RadioCheckField radio = new RadioCheckField(pdfstamper.Writer, pdfstamper.AcroFields.GetFieldPositions("gender")[i].position, "genderNew", PdfName.DecodeName(name.ToString()));

     if (radiogroup == null)
     {         
        radiogroup = radio.GetRadioGroup(true, true);
        radiogroup.FieldName = "genderNew";
     }         

     var radiofield = radio.RadioField;
     page = pdfstamper.AcroFields.GetFieldPositions("gender")[i].page;
     radiofield.Page = page;
     ((PdfAnnotation)radiofield).PlaceInPage = page;
     radiogroup.AddKid(radiofield);
 }
 pdfstamper.AddAnnotation(radiogroup, 1);
 pdfstamper.AcroFields.RemoveField("gender");
令人惊讶的是,在Acrobat中检查单选按钮属性时,现在选中了“一致选择具有相同名称和选项的按钮”复选框,但它的操作仍然不一致

在所有目标页面上放置多个具有相同字段名(“性别”)的放射组(在“AddAnnotation”-方法中设置页码),这些放射组显示在正确的位置,但不一致(例如,在第2页选择“男性”,尽管在“GetRadioGroup”中设置了“Radiosinuson”-参数,但会取消选择第1页的放射组-(方法)


当将所有无线电场添加到一个放射组时,行为与预期一致,但我们无法将无线电场拆分到不同的页面上,正如您在上面看到的那样。

我们找到了一个不同的解决方案,因此现在不再需要移动无线电场。如果有人在同一个“多页radiobutton unison”中,以下方法可以解决这个问题:-将文档拆分为多页。-阅读每一页并用新的单选按钮替换单选按钮(保持相同的名称并在GetRadioGroup方法中设置RadioInuson参数。-将所有页面按相同的顺序重新合并在一起,瞧:单选按钮组已正确合并为一个unison组。干杯
 pdfstamper.AcroFields.SetFieldProperty("gender", "setfflags", PdfFormField.FF_RADIOSINUNISON, null);