如何使用 iTextSharp 获取 acrofield 自定义属性
How get acrofield custom attributes with iTextSharp
我有一个 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}, ...的值?
您检查过 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));
}
}
对于签名字段,此 returns:
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 查看器/签名器/验证器更新是否这些添加仍然不会干扰他们的操作...
我有一个 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}, ...的值?
您检查过 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));
}
}
对于签名字段,此 returns:
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 查看器/签名器/验证器更新是否这些添加仍然不会干扰他们的操作...