从Delphi应用程序读取PDF(/ A)元数据的最简单方法?

时间:2011-08-20 06:57:42

标签: delphi pdf metadata

对于在其嵌入式元数据中包含其他信息(如条形码数据)的PDF/A文档,是否有一种从Delphi应用程序访问此信息的简单方法 - 而不是使用功能齐全的PDF阅读器/编写器应用程序图书馆? (例如,开源命令行工具)

1 个答案:

答案 0 :(得分:2)

据我所知,PDF元数据只能在PDF / A文档中以纯文本形式提供。

因此,您可以在文件中搜索<x:xmpmeta模式,然后在此处提供整个元数据,直到</x:xmpmeta>。然后检索XML内容。

function ExtractPDFMetadata(const aPDFFileName: TFileName): UTF8String;
var tmp: RawByteString;
    i: integer;
begin
  with TFileStream.Create(aPDFFileName,fmOpenRead) do 
  try
    SetLength(tmp,Size);
    Read(tmp[1],Size);
  finally
    Free;
  end;
  result := '';
  i := pos('<x:xmpmeta',tmp);
  if i=0 then exit;
  delete(tmp,1,i-1);
  i := pos('</x:xmpmeta>',tmp);
  if i=0 then exit;
  result := copy(tmp,1,i+12);
end;

然后可以像往常一样使用此UTF8String来解析XML内容。

您还可以使用PDF目录中的“元数据”类型条目找到此XML内容:这将更快(没有解析文件),但需要额外的编码。