2016-05-25 3 views
0

itextsharp v.5.5.9を使用して、PDFファイルのXMPセクションから特定のカスタムプロパティを読み込むのが難しいです。itextsharp 5.5.9でXMPからカスタムプロパティ値を読み込み

XmpReaderクラスを使用しようとすると、古いものとしてマークされ、読み込みに便利なパブリックメソッドは含まれません。

メタデータセクションをXMLに変換して、それを何らかの方法で解析することができます(名前でプロパティを読み取る便利な方法を持つXmpCoreライブラリを使用することで解決できます)が、何か不足していると確信しています。 ..

私は、ただ1つのライブラリでいくつかのプロパティにアクセスすることができるはずだと思います。

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

それは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; 
0

私が間違っていない場合は、PDFファイルのメタデータのカスタマイズされたプロパティを取得する必要があります。 そうならば、あなたは次のように行うことができます:私はこの解決策になってしまった

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

カスタマイズされたプロパティが 'reader.Info'セクションに配置されていないが、 XMPメタデータセクションでは 'reader.Metadata'は' byte [] 'です。すでに述べたように、この配列をXML文字列に変換して解析するか、そのプロパティを読み取るために別のXMPライブラリを使用することができます。 – BeerBaron

関連する問題