我有一个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} ,...的值?
答案 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查看器/签名者/验证者的更新是否仍然不影响其操作...