使用 Perl 模块 Image::ExifTool 从 PDF 读取元信息

Bra*_*nko 5 pdf perl

我想使用 Perl 模块Image::ExifTool从 PDF 读取元信息。我需要使用交叉引用流(从 PDF 1.5 开始)处理 PDF,而其他完善的模块(如 PDF::API2 和 CAM::PDF)似乎不支持它们或支持有限。

无论如何,Image::ExifTool 显然读取了许多PDF 标签,但如果我运行以下代码:

use Image::ExifTool qw(:Public);
my $file = 'file.pdf';
my $exifTool = new Image::ExifTool;
$exifTool->ExtractInfo($file);
my @tagList = $exifTool->GetFoundTags('File');
for (@tagList){
    print "$_\n"
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法获得比这些标签更多的内容:

ExifToolVersion
FileName
Directory
FileSize
FileModifyDate
FileAccessDate
FileCreateDate
FilePermissions
FileType
FileTypeExtension
MIMEType
PDFVersion
Linearized
Author
CreateDate
Creator (1)
ModifyDate
Producer (1)
Subject
Title (1)
XMPToolkit
CreateDate (1)
CreatorTool
ModifyDate (1)
MetadataDate
Producer
Format
Title
Description
Creator
DocumentID
InstanceID
PageLayout
PageMode
PageCount
Run Code Online (Sandbox Code Playgroud)

特别是,我想获取 PDF 文档目录(根标签)。然而,运行这样的代码不会返回任何值:

my $tag = 'Root';
my $exifTool = new Image::ExifTool;
my $info = $exifTool->ImageInfo($file, $tag);
for (sort keys %$info) {
        print "$_ => $$info{$_}\n";
}
Run Code Online (Sandbox Code Playgroud)

请帮助 :-)

bol*_*lav 1

要查看解析启用详细模式:$exifTool->Options(Verbose => 1);它表明根确实正在被解析。

  7)  Root (SubDirectory) -->
  + [Root directory with 7 entries]
  | 0)  Metadata (SubDirectory) -->
  | + [Metadata directory with 3 entries]
Run Code Online (Sandbox Code Playgroud)

我不确定您需要从根标签获取哪些数据,但可以使用内部 API 获取:my $roottag = Image::ExifTool::GetTagTable('Image::ExifTool::PDF::Root');

来自Image::ExifTool

导出不是公共 API 的一部分,但由 ExifTool 模块使用: