-1

我使用 PDF Clown 库中的“Annotation.getBox”方法来获取文本中高亮的位置。通过这种方式,还可以检索螺栓或斜体文本的位置。如何避免这种情况?我只想从真正的亮点中获得 Retancle2D。

4

1 回答 1

1

不幸的是,OP 未能分享示例 PDF。他也仅仅提供了一个很小的代码片段。因此,以下只能推测...

OP 在评论中提供的代码片段如下所示:

PageAnnotations annotations = page.getAnnotations();
for (Annotation annotation : annotations)
{
    highlightArea = annotation.getBox();
}

因此,他将变量设置为给定页面注释的最后一个元素highlightAreaBox值。

highlightArea可能包含其他内容(有时在 OP 的情况下为粗体或斜体文本)而不是突出显示的文本的可能原因:

  • 最后的注释可能完全不是高亮注释,而是其他类型的注释。
  • 假设最终注解为高亮注解,并非其框内的所有内容都显示为高亮显示,而仅是QuadPoints注解字典条目中的四边形或注解的外观流定义的一些自定义区域。

对于后一种情况,请参阅 PDF 规范中的第 12.5.6.10 节“文本标记注释”:

QuadPoints数组(必需)一个 8 × n数字的数组,指定默认用户空间中n 个四边形的坐标。每个四边形应包含注释下的文本中的一个单词或一组连续单词。每个四边形的坐标应按顺序给出

x 1 y 1 x 2 y 2 x 3 y 3 x 4 y 4

按逆时针顺序指定四边形的四个顶点(参见图 64)。文本应相对于边缘连接点 ( x 1 , y 1 ) 和 ( x 2 , y 2 ) 定向。

注释字典的AP条目(如果存在)应优先于QuadPoints;请参见表 168 和 12.5.5,“外观流”。</p>

但请注意,Adobe Reader 不会按照指定的顺序对顶点进行排序,而且它也不会按照指定的顺序正确显示带有坐标的高光。授予 stackoverflow 问答“PDF 规范与 Acrobat 创建(QuadPoints)”,它很旧,但仍适用于当前的 Adob​​e Acrobat 版本。


如果您annotation是 的一个实例,您可以使用该方法TextMarkup轻松检索四边形。TextMarkupgetMarkupBoxes

Annotation此外,您可以使用方法检索外观流getAppearance。但是,确定外观流突出显示的区域可能并非易事。

于 2016-08-09T08:12:34.137 回答