c# - 如何使用 iTextSharp 获取 acrofield 自定义属性
问题描述
我有一个带有 6 个 acrofield ... 4 个单选按钮和 2 个签名字段的 PDF( vs1 (dopo).pdf )。签名字段有一些我想阅读的自定义属性,但我不知道如何阅读。这是我用来检索字段的代码:
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));
}
}
对于签名字段,这将返回:
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 查看器/签名者/验证器相关的更新,这些添加是否仍然不会干扰它们的操作......
推荐阅读
- javascript - Javascript - 预定义的颜色渐变
- haskell - 通过替代统一具有不同成分的涂抹器
- python - PyQGis 与 QWebEngineView 崩溃
- c++ - 为什么我的指针的 static_cast 失败了?
- c# - 将 JSON 数组中的项目分配给 CheckedListBox C# 并引用它们
- c# - 简单的线程池管理器
- swift - ARMeshAnchor – SceneKit SCNView 渲染器 EXC_BAD_ACCESS
- javascript - d3.select() 不返回任何东西
- microservices - 微服务与 Lambda 与无服务器函数的差异
- xcode - 反应原生 IOS 构建问题