使用 itextsharp 5.5.9 从 XMP 读取自定义属性值



我使用 itextsharp v. 5.5.9 从 PDF 文件的 XMP 部分读取特定的自定义属性时遇到困难。

当我尝试使用 XmpReader 类时,它被标记为过时,并且它不包含任何似乎对读取目的有用的公共方法。

我可以将元数据部分转换为 XML,然后以某种方式解析它(解决方法包括使用 XmpCore 库,该库具有按名称读取属性的便捷方法),但我确定我错过了一些东西......

我认为应该可以用一个库访问一些属性。

 PdfReader reader = new PdfReader(inFile);
 PdfStamper stamper = new PdfStamper(reader, new FileStream(outFile, FileMode.Create));
 MemoryStream ms = null;
 if (reader.Metadata != null)
   ms = new MemoryStream(reader.Metadata);
 else
 {
     stamper.CreateXmpMetadata();
     ms = new MemoryStream();
 }
XmpWriter xw = new XmpWriter(ms);
xw.XmpMeta.GetPropertyString(XmpConst.NS_DC, "MyProperty"); // -> not found, but it's ok for the first time... 
xw.SetProperty(XmpConst.NS_DC, "MyProperty", "MyValue"); // -> OK
xw.XmpMeta.GetPropertyString(XmpConst.NS_DC, "MyProperty"); // -> OK
xw.Close();
stamper.XmpMetadata = ms.ToArray();
stamper.Close();
reader.Close();

如果我在同一文件上运行程序两次(因此该属性保存在文件中),则仍然找不到该属性。

如何读取 MyProperty 的存在和价值?

我最终得到了这个解决方案。

它需要 XmpCore 库,但它实现起来既简单又快速,避免了许多细节的显式管理,例如编码:

string result = null;
iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(inFile);
if (reader.Metadata != null)
{
    XmpCore.IXmpMeta meta = XmpCore.XmpMetaFactory.ParseFromBuffer(reader.Metadata);
    result = meta.GetPropertyString(XmpConst.NS_DC, "MyProperty");
}
reader.Close();
return result;

如果我没弄错,您想获取pdf文件元数据的自定义属性。如果是,您可以这样做:

PdfReader reader = new PdfReader(inFile);
string myProperty = reader.Info.Where(x => x.Key == "MyProperty").Select(x => x.Value).FirstOrDefault();

最新更新