首先是有关字段及其在一页或多页上的表示的一些信息。 PDF 表单可以包含多个字段。字段具有唯一的名称,即具有一个特定名称的特定字段具有一个和一个值。字段是使用定义的字段字典.
每个字段在文档中可以有零个、一个或多个表示。这些视觉表示被称为小部件注释它们是使用注释词典.
知道这一点,你的问题需要重新表述:如何更改特定字段的特定小部件注释的位置?
我用 Java 制作了一个名为改变字段位置 http://itextpdf.com/sandbox/acroforms/ChangeFieldPosition回答这个问题。将其移植到 C# 取决于您(也许您可以在此处发布 C# 答案以供进一步参考)。
您已经拥有了AcroFields
实例:
AcroFields form = stamper.getAcroFields();
你现在需要的是Item
特定字段的实例(在我的示例中:对于名称为"timezone2"
):
Item item = form.getFieldItem("timezone2");
该位置是小部件注释的属性,因此您需要询问item
为其小部件。在下面的行中,我获取第一个小部件注释的注释字典(索引为0
):
PdfDictionary widget = item.getWidget(0);
在大多数情况下,只有一个小部件注释:每个字段只有一种视觉表示。
注释的位置是一个数组,有四个值:llx、lly、urx 和 ury。我们可以这样得到这个数组:
PdfArray rect = widget.getAsArray(PdfName.RECT);
在下面的行中,我更改了右上角的 x 值(索引2
与 urx 对应):
rect.set(2, new PdfNumber(rect.getAsNumber(2).floatValue() - 10f));
结果,字段的宽度缩短了 10pt。