如何使用iTextSharp保存PDF的.MoreInfo属性?

| 我目前正在尝试将以下类的元数据属性哈希表添加到PDF。问题是,即使它似乎已将哈希表分配给了stamper.MoreInfo属性,但一旦关闭了stamper,它似乎就没有保存MoreInfo属性。
    public class PdfEnricher
{
    readonly IFileSystem fileSystem;

    public PdfEnricher(IFileSystem fileSystem)
    {
        this.fileSystem = fileSystem;
    }

    public void Enrich(string pdfFile, Hashtable fields)
    {
        if (!fileSystem.FileExists(pdfFile)) return;

        var newFile = GetNewFileName(pdfFile);
        var stamper = GetStamper(pdfFile, newFile);

        SetFieldsAndClose(stamper, fields);
    }

    string GetNewFileName(string pdfFile)
    {
        return fileSystem.GetDirectoryName(pdfFile) + @\"\\NewFileName.pdf\";
    }

    static void SetFieldsAndClose(PdfStamper stamper, Hashtable fields)
    {
        stamper.MoreInfo = fields;
        stamper.FormFlattening = true;
        stamper.Close();
    }

    static PdfStamper GetStamper(string pdfFile, string newFile)
    {
        var reader = new PdfReader(pdfFile);
        return new PdfStamper(reader, new FileStream(newFile, FileMode.Create));
    }
}
有任何想法吗?     
已邀请:
与往常一样,使用源。 在这种情况下,我很快就发现了一种可能性(Java源btw): public void close()抛出DocumentException,IOException {   如果(!hasSignature){     stamper.close(moreInfo);     返回;   } 该表格是否已经具有某种签名?让我们看看hasSignatures何时为真。 您的消息来源情况并非如此。仅当您通过PdfStamper.createSignature(...)对PDF签名时,才设置hasSignatures,因此显然不是。 错误...您如何检查是否已添加MoreInfo?它不会出现在XMP元数据中。 MoreInfo直接添加到“文档信息”字典中。您可以在Acrobat的“自定义”标签中看到它们(很有可能是Reader,尽管目前我不方便使用)。 您是否绝对确定MoreInfo不为null,并且其所有值都不为null? 字典只是通过引用传递的,因此任何更改(在另一个线程中)都将在PDF编写时反映出来。 遍历文档的“文档信息字典”的正确方法:
PdfReader reader = new PdfReader(somePath);
Map<String, String> info = reader.getInfo();

for (String key : info.keySet()) {
  System.out.println( key + \": \" + info.get(key) );
}
请注意,这将遍历文档信息字典中的所有字段,而不仅仅是自定义字段。还应注意,从
getInfo()
Map
所做的更改不会保留到PDF中。该地图是新建,填充并返回的。     

要回复问题请先登录注册