我使用 PDF Clown 库中的“Annotation.getBox”方法来获取文本中高亮的位置。通过这种方式,还可以检索螺栓或斜体文本的位置。如何避免这种情况?我只想从真正的亮点中获得 Retancle2D。
1 回答
不幸的是,OP 未能分享示例 PDF。他也仅仅提供了一个很小的代码片段。因此,以下只能推测...
OP 在评论中提供的代码片段如下所示:
PageAnnotations annotations = page.getAnnotations();
for (Annotation annotation : annotations)
{
highlightArea = annotation.getBox();
}
因此,他将变量设置为给定页面注释的最后一个元素highlightArea
的Box
值。
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)”,它很旧,但仍适用于当前的 Adobe Acrobat 版本。
如果您annotation
是 的一个实例,您可以使用该方法TextMarkup
轻松检索四边形。TextMarkup
getMarkupBoxes
Annotation
此外,您可以使用方法检索外观流getAppearance
。但是,确定外观流突出显示的区域可能并非易事。