使用 itextsharp 5.5.9 从 XMP 读取自定义 属性 值
Read custom property value from XMP with itextsharp 5.5.9
我在使用 itextsharp v. 5.5.9 从 PDF 文件的 XMP 部分读取特定自定义 属性 时遇到困难。
当我尝试使用 XmpReader class 时,它被标记为已过时,并且它不包含任何似乎对阅读有用的 public 方法。
我可以将元数据部分转换为 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 的存在和值?
如果我没记错的话,您想自定义 属性 pdf 文件的元数据。
如果是,你可以这样做:
PdfReader reader = new PdfReader(inFile);
string myProperty = reader.Info.Where(x => x.Key == "MyProperty").Select(x => x.Value).FirstOrDefault();
我最终得到了这个解决方案。
它需要 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;
我在使用 itextsharp v. 5.5.9 从 PDF 文件的 XMP 部分读取特定自定义 属性 时遇到困难。
当我尝试使用 XmpReader class 时,它被标记为已过时,并且它不包含任何似乎对阅读有用的 public 方法。
我可以将元数据部分转换为 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 的存在和值?
如果我没记错的话,您想自定义 属性 pdf 文件的元数据。 如果是,你可以这样做:
PdfReader reader = new PdfReader(inFile);
string myProperty = reader.Info.Where(x => x.Key == "MyProperty").Select(x => x.Value).FirstOrDefault();
我最终得到了这个解决方案。
它需要 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;