【发布时间】:2011-08-20 06:57:41
【问题描述】:
对于在其嵌入式元数据中包含附加信息(如条形码数据)的PDF/A 文档,是否有一种简单的方法可以从 Delphi 应用程序访问这些信息 - 而不是使用功能齐全的 PDF 阅读器/编写器应用程序库? (例如开源命令行工具)
【问题讨论】:
对于在其嵌入式元数据中包含附加信息(如条形码数据)的PDF/A 文档,是否有一种简单的方法可以从 Delphi 应用程序访问这些信息 - 而不是使用功能齐全的 PDF 阅读器/编写器应用程序库? (例如开源命令行工具)
【问题讨论】:
据我所知,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 内容:这样会更快(无需解析文件),但需要更多额外的编码。
【讨论】: