Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# iTextSharp-移动Acrofield_C#_.net_Itextsharp_Acrofields - Fatal编程技术网

C# iTextSharp-移动Acrofield

C# iTextSharp-移动Acrofield,c#,.net,itextsharp,acrofields,C#,.net,Itextsharp,Acrofields,我有一个将内容表插入现有Acroform的过程,并且我能够跟踪需要从哪里开始内容。但是,我在该点下有现有字段,需要根据插入的表的高度向上或向下移动。有了它,我如何改变Acrofield的位置?下面是我可以用来“获得”这个职位的代码…但现在我还需要能够“设置”它 //**需要在此处为字段明确设置新位置 //assuming a call to "RegenerateField" will be required fields.RegenerateF

我有一个将内容表插入现有Acroform的过程,并且我能够跟踪需要从哪里开始内容。但是,我在该点下有现有字段,需要根据插入的表的高度向上或向下移动。有了它,我如何改变Acrofield的位置?下面是我可以用来“获得”这个职位的代码…但现在我还需要能够“设置”它

//**需要在此处为字段明确设置新位置

            //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));