对于在其嵌入式元数据中包含其他信息(如条形码数据)的PDF/A文档,是否有一种从Delphi应用程序访问此信息的简单方法 - 而不是使用功能齐全的PDF阅读器/编写器应用程序图书馆? (例如,开源命令行工具)
答案 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内容:这将更快(没有解析文件),但需要额外的编码。