【发布时间】:2014-01-16 06:21:38
【问题描述】:
我有一个 pdf 文件,其中使用 CAM::PDF 的 listimages.pl 什么都不返回,但使用 PDF::GetImages 会提取图像。使用以下代码,我可以找到图像对象,但我不知道如何将其提取到文件中。而且我无法弄清楚为什么命令行工具不起作用。
#!/usr/bin/perl -w
use strict;
use Cwd;
use File::Basename;
use Data::Dumper;
use CAM::PDF;
use CAM::PDF::PageText;
use CAM::PDF::Renderer::Images;
my $file = shift @ARGV || die "Usage: get-pdf-images /path/to/file.pdf \n";
my $pdf = CAM::PDF->new($file) || die "$CAM::PDF::errstr\n";
#print $pdf->toString();
foreach my $p ( 1 .. $pdf->numPages() ) {
my $page = $pdf->getPageContentTree($p);
my $str = $pdf->getPageText($p);
if (defined $str) {
# CAM::PDF->asciify(\$str);
print $str;
}
print "-------------------------------\n";
my $gs = $page->findImages();
my @imageNodes = @{$gs->{images}};
print "Found " . scalar @imageNodes . " images on page $p\n";
print Data::Dumper->Dump([\@imageNodes],['imageNodes']);
}
如果我运行 `pdfinfo.pl`,它会报告:
$ pdfinfo.pl test.pdf
File: test.pdf
File Size: 4599 bytes
Pages: 1
Author: þÿadmin01
CreationDate: Fri Jan 3 03:48:53 2014
Creator: þÿPDFCreator Version 1.7.2
Keywords:
ModDate: Fri Jan 3 03:48:53 2014
Producer: GPL Ghostscript 9.10
Subject:
Title: þÿVision6Card
Page Size: variable
Optimized: no
PDF version: 1.4
Security
Passwd: none
Print: yes
Modify: yes
Copy: yes
Add: yes
test.pdf文件可以从这里下载:http://imaptools.com:8080/dl/test.pdf
【问题讨论】:
-
所讨论的图像是一个 3x10 像素的图像,它被编码为内联图像。也许 listimages.pl 只识别 xobject 图像?在分析内部 PDF 结构时,Adobe Acrobat Preflight 还会显示此图像的“PDFEngine 错误:严重性:4,系统:0,错误:3”。因此,也许图像嵌入被破坏了并且 listimages.pl 出于这个原因没有找到它?此外,当显示 PDF 时,我看不到该图像。也许 listimages.pl 只提取可见图像?
-
我也收到了来自pdf-tools.com/pdf/validate-pdfa-online.aspx 的错误,但我认为这不是问题,因为 PDF::GetImages 和命令行工具 pdfimages 都成功地提取了图像。我正在使用 CAM::PDF 来提取其他信息,并希望使用它来提取图像。