如何使用iTextSharp获取Acrofield自定义属性

时间:2020-06-22 17:08:57

标签: c# pdf itext acrofields

我有一个PDF(vs1 (dopo).pdf),其中包含6个acrofield ... 4个单选按钮和2个签名字段。签名字段具有一些我想阅读的自定义属性,但我不知道如何做。 这是我用来检索字段的代码:

PdfReader pdfReader = new PdfReader (inputPDFPath);
AcroFields pdfFormFields = pdfReader.AcroFields;
            
foreach (KeyValuePair <string, AcroFields.Item> kvp in pdfFormFields.Fields)
{
     string fieldName = kvp.Key.ToString ();
     string fieldValue = pdfFormFields.GetField (kvp.Key.ToString ());
     Console.WriteLine (fieldName + "" + fieldValue);
}

pdfReader.Close ();

签名字段具有以下属性:

kvp.Value.GetValue(0).Keys

[Count = 12
    [0]: {/F}
    [1]: {/FT}
    [2]: {/Ff}
    [3]: {/MK}
    [4]: {/P}
    [5]: {/Rect}
    [6]: {/SSCbio}
    [7]: {/SSCreq}
    [8]: {/Subtype}
    [9]: {/T}
    [10]: {/sq}
    [11]: {/uid}]

如何获取 {/ uid} {/ SSCbio} ,...的值?

1 个答案:

答案 0 :(得分:1)

您检查了kvp.Value.GetValue(0).Keys,所以您几乎已经在那里! kvp.Value.GetValue(0)PdfDictionary,您可以查询以下值:

foreach (KeyValuePair<string, AcroFields.Item> kvp in pdfFormFields.Fields)
{
    string fieldName = kvp.Key.ToString();
    string fieldValue = pdfFormFields.GetField(kvp.Key.ToString());
    Console.WriteLine(fieldName + " - " + fieldValue);
    PdfDictionary merged = kvp.Value.GetValue(0);
    foreach (PdfName key in merged.Keys)
    {
        Console.WriteLine("    {0}: {1}", key, merged.GetDirectObject(key));
    }
}

对于签名字段,它返回:

Firme statiche (1) - 
    /F: 4
    /FT: /Sig
    /Ff: 0
    /MK: Dictionary
    /P: Dictionary of type: /Page
    /Rect: [392.4, 125.016, 505.632, 153.324]
    /SSCbio: 1
    /SSCreq: 1
    /Subtype: /Widget
    /T: Firme statiche (1)
    /sq: -1
    /uid: Firme statiche
Firme statiche (2) - 
    /F: 4
    /FT: /Sig
    /Ff: 0
    /MK: Dictionary
    /P: Dictionary of type: /Page
    /Rect: [231.12, 87.576, 301.89, 115.884]
    /SSCbio: 1
    /SSCreq: 1
    /Subtype: /Widget
    /T: Firme statiche (2)
    /sq: -1
    /uid: Firme statiche

顺便说一句, SSCbio SSCReq sq uid PDF规范。此外,它们没有注册的前缀,也没有声明开发人员扩展。因此,这些PDF仅应在您的组织内部使用,而绝不要白白花掉。

我还希望您建立了一个过程来检查组织中每个相关的PDF查看器/签名者/验证者的更新是否仍然不影响其操作...