我在使用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的存在和价值?
答案 0 :(得分:1)
我最终得到了这个解决方案。
它需要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;
答案 1 :(得分:0)
如果我没弄错,您希望获得pdf文件元数据的自定义属性。 如果是,你可以这样做:
PdfReader reader = new PdfReader(inFile);
string myProperty = reader.Info.Where(x => x.Key == "MyProperty").Select(x => x.Value).FirstOrDefault();