C# 使用Itext进行Pdf表单字段位置检索

C# 使用Itext进行Pdf表单字段位置检索,c#,pdf,itext,C#,Pdf,Itext,使用iTextSharp,我可以检索PDF表单中存在的所有表单字段。我正在使用Adobe acrobat reader编辑PDF,我看到,每个字段都有一个位置属性,表示PDF字段在表单中的位置 所以我的问题是,我能读懂这个值吗 例如,如果我在PDF表单中有一个表单字段名,我可以得到该字段的位置值吗,比如左0.5英寸、右2.5英寸、上2英寸、下2英寸 现在,我正在使用以下代码检索表单字段: string pdfTemplate = @"D:\abc.pdf"; PdfReader reader =

使用iTextSharp,我可以检索PDF表单中存在的所有表单字段。我正在使用Adobe acrobat reader编辑PDF,我看到,每个字段都有一个位置属性,表示PDF字段在表单中的位置

所以我的问题是,我能读懂这个值吗

例如,如果我在PDF表单中有一个表单字段名,我可以得到该字段的位置值吗,比如左0.5英寸、右2.5英寸、上2英寸、下2英寸

现在,我正在使用以下代码检索表单字段:

string pdfTemplate = @"D:\abc.pdf";
PdfReader reader = new PdfReader(pdfTemplate);

var fields = reader.AcroFields;

int ffRadio = 1 << 15;      //Per spec, 16th bit is radio button
int ffPushbutton = 1 << 16; //17th bit is push button
int ff;

//Loop through each field
foreach (var f in fields.Fields)
{
    String type = "";
    String name = f.Key.ToString();
    String value = fields.GetField(f.Key);

    //Get the widgets for the field (note, this could return more than 1, this should be checked)
    PdfDictionary w = f.Value.GetWidget(0);

    //See if it is a button-like object (/Ft == /Btn)
    if (!w.Contains(PdfName.FT) || !w.Get(PdfName.FT).Equals(PdfName.BTN))
    {
        type = "T";
    }
    else
    {
        //Get the optional field flags, if they don't exist then just use zero
        ff = (w.Contains(PdfName.FF) ? w.GetAsNumber(PdfName.FF).IntValue : 0);

        if ((ff & ffRadio) == ffRadio)
        {
            //Is Radio
            type = "R";
        }
        else if (((ff & ffRadio) != ffRadio) && ((ff & ffPushbutton) != ffPushbutton))
        {
            //Is Checkbox
            type = "C";
        }
        else
        {
            //Regular button
            type = "B";
        }
    }

    //MessageBox.Show(type + "=>" + name + "=>" + value);
    FormFields fld = new FormFields(name, type, value, "inputfield" +form_fields.Count);

    form_fields.Add(fld);

    if (type.Equals("T"))
        addContent(form_fields.Count);
}
string pdfTemplate=@“D:\abc.pdf”;
PDF阅读器=新的PDF阅读器(pdfTemplate);
变量字段=reader.AcroFields;

int ffRadio=1我正要结束这个问题,作为的一个重复,但这是一个Java答案,尽管大多数开发人员在将Java转换为C#方面没有问题,但获得C#答案可能对一些开发人员有所帮助

PDF中的字段使用小部件注释可视化。一个字段可以与这些注释中的不同注释相对应。例如,您可以有一个名为
name
的字段,该字段在每个页面上都是可视化的。在这种情况下,此字段的值将显示在每页上

有一个
GetFieldPositions()
方法返回多个位置的列表,每个小部件注释一个位置

这是我从问题答案中复制的一些代码

IList

IList<AcroFields.FieldPosition> fieldPositions = fields.GetFieldPositions("fieldNameInThePDF");
if (fieldPositions == null || fieldPositions.Count <= 0) throw new ApplicationException("Error locating field");
AcroFields.FieldPosition fieldPosition = fieldPositions[0];
left = fieldPosition.position.Left;
right = fieldPosition.position.Right;
top = fieldPosition.position.Top;
bottom = fieldPosition.position.Bottom;