【问题标题】:How get acrofield custom attributes with iTextSharp如何使用 iTextSharp 获取 acrofield 自定义属性
【发布时间】:2020-06-22 17:08:57
【问题描述】:

我有一个带有 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}、...的值?

【问题讨论】:

    标签: c# pdf itext acrofields


    【解决方案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 查看器/签名者/验证器相关的更新,这些添加是否仍然不会干扰它们的操作...

    【讨论】:

    • 非常感谢您的回答。这些属性仅供内部使用,并与第三方组件 (xyzmo) 一起插入。现在我想使用pdfStamper.AddAnnotation(sig, pageNumber); 对iTextSharp 做同样的事情,其中​​PdfFormField sig = PdfFormField.CreateSignature(pdfStamper.Writer); 但如何插入自定义键(例如:/SSBio、/uid、 ...) 在sig 对象中?
    • 找到了!这是添加任意键的代码(例如:uid)PdfDictionary merged = new PdfDictionary(); merged.Put(new PdfName("uid"), new PdfString("my uid")); sig.Merge(merged);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2017-09-19
    • 2013-01-13
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多