C# iTextSharp-移动Acrofield
我有一个将内容表插入现有Acroform的过程,并且我能够跟踪需要从哪里开始内容。但是,我在该点下有现有字段,需要根据插入的表的高度向上或向下移动。有了它,我如何改变Acrofield的位置?下面是我可以用来“获得”这个职位的代码…但现在我还需要能够“设置”它 //**需要在此处为字段明确设置新位置C# iTextSharp-移动Acrofield,c#,.net,itextsharp,acrofields,C#,.net,Itextsharp,Acrofields,我有一个将内容表插入现有Acroform的过程,并且我能够跟踪需要从哪里开始内容。但是,我在该点下有现有字段,需要根据插入的表的高度向上或向下移动。有了它,我如何改变Acrofield的位置?下面是我可以用来“获得”这个职位的代码…但现在我还需要能够“设置”它 //**需要在此处为字段明确设置新位置 //assuming a call to "RegenerateField" will be required fields.RegenerateF
//assuming a call to "RegenerateField" will be required
fields.RegenerateField(txt_footer);
//捕获字段位置的辅助方法
私有静态AcroFields.FieldPosition GetFieldPosition(AcroFields字段,字符串字段)
{
////////////////////////////////////////////////////////////////////////////////////
//获取页面的左边距,以及起始位置的“顶部”位置
//使用“关于线”字段作为基础
IList fieldPositions=fields.GetFieldPositions(field_nm);
AcroFields.FieldPosition pos=fieldPositions[0];
返回pos;
}
首先是关于字段及其在一个或多个页面上的表示形式的一些信息。PDF表单可以包含多个字段。字段具有唯一的名称,即具有一个特定名称的特定字段具有一个和一个值。字段是使用字段字典定义的
每个字段在文档中可以有零个、一个或多个表示形式。这些可视化表示称为小部件注释,它们是使用注释字典定义的
知道了这一点,您的问题需要重新表述:如何更改特定字段的特定小部件注释的位置
为了回答这个问题,我用Java制作了一个名为的示例。将由您将其移植到C#(也许您可以将C#答案张贴在此处以供进一步参考)
您已经有了AcroFields
实例:
AcroFields form = stamper.getAcroFields();
您现在需要的是特定字段的项
实例(在我的示例中:对于名为“timezone2”
)的字段:
位置是小部件注释的一个属性,因此您需要向项
询问其小部件。在下一行中,我获得了第一个小部件注释的注释字典(索引为0
):
在大多数情况下,只有一个小部件注释:每个字段只有一个可视表示
注释的位置是一个具有四个值的数组:llx、lly、urx和ury。我们可以得到这样的阵列:
PdfArray rect = widget.getAsArray(PdfName.RECT);
在下一行中,我更改右上角的x值(索引2
对应于urx):
因此,场地宽度缩短了10磅。这真是太棒了,布鲁诺!谢谢你,先生!C#版本是一样的,只需要pascal case方法调用,而floatValue是一个属性而不是一个方法。
AcroFields form = stamper.getAcroFields();
Item item = form.getFieldItem("timezone2");
PdfDictionary widget = item.getWidget(0);
PdfArray rect = widget.getAsArray(PdfName.RECT);
rect.set(2, new PdfNumber(rect.getAsNumber(2).floatValue() - 10f));