如何从pdf文档中获取字符偏移量信息



我正在尝试在web应用程序中为pdf实现搜索结果突出显示。我有原始的pdf,以及搜索结果中使用的小png版本。本质上,我正在寻找一个类似于的api

pdf_document.find_offsets('somestring')
# => { top: 501, left: 100, bottom: 520, right: 150 }, { ... another box ... }, ...

我知道从pdf中获取这些信息是可能的,因为苹果的Preview.app实现了这一点。

需要在Linux上运行的东西,最好是开源的。我知道你可以在窗户上表演杂技。

CAM::PDF可以很好地完成几何部分,但有时在字符串匹配方面会遇到一些问题。该技术类似于以下经过轻度测试的代码:

use CAM::PDF;
my $pdf = CAM::PDF->new('my.pdf') or die $CAM::PDF::errstr;
for my $pagenum (1 .. $pdf->numPages) {
   my $pagetree = $pdf->getPageContentTree($pagenum) or die;
   my @text = $pagetree->traverse('MyRenderer')->getTextBlocks;
   for my $textblock (@text) {
      print "text '$textblock->{str}' at ",
            "($textblock->{left},$textblock->{bottom})n";
   }
}
package MyRenderer;
use base 'CAM::PDF::GS';
sub new {
   my ($pkg, @args) = @_;
   my $self = $pkg->SUPER::new(@args);
   $self->{refs}->{text} = [];
   return $self;
}
sub getTextBlocks {
   my ($self) = @_;
   return @{$self->{refs}->{text}};
}
sub renderText {
   my ($self, $string, $width) = @_;
   my ($x, $y) = $self->textToDevice(0,0);
   push @{$self->{refs}->{text}}, {
      str => $string,
      left => $x,
      bottom => $y,
      right => $x + $width,
      #top => $y + ???,                                                                                 
   };
   return;
}

输出看起来像这样:

text 'E' at (52.08,704.16)
text 'm' at (73.62096,704.16)
text 'p' at (113.58936,704.16)
text 'lo' at (140.49648,704.16)
text 'y' at (181.19904,704.16)
text 'e' at (204.43584,704.16)
text 'e' at (230.93808,704.16)
text ' N' at (257.44032,704.16)
text 'a' at (294.6504,704.16)
text 'm' at (320.772,704.16)
text 'e' at (360.7416,704.16)
text 'Employee Name' at (56.4,124.56)
text 'Employee Title' at (56.4,114.24)
text 'Company Name' at (56.4,103.92)

从输出中可以看出,字符串匹配会有点乏味,但几何图形很简单(可能除了字体高度)。

尝试查看PdfLib TEThttp://www.pdflib.com/products/tet/

(不是免费的)

Fabrizio

我认为您可以使用Adobe Acrobat SDK来完成此操作,该SDK的Linux版本可以从Adobe免费下载。您可以使用它从PDF中提取文本,然后计算偏移量。然后可以使用Acrobat XML突出显示文件来突出显示PDF。这用于指定哪些单词在哪个位置要突出显示,并按如下方式提供给杂技演员:

http://example.com/a.pdf#xml=http://example.com/highlightfile.xml

最新更新