在PDFBox中,是否可以将工具提示(提示)添加到标记注释中?

问题描述 投票:1回答:1

简而言之

我一直在研究获取pdf的程序,突出显示一些单词(通过pdfbox Mark Annotation obj)并保存新的pdf。

我希望突出显示的单词显示工具提示,上面带有一些小的描述,如提示。

例如,我要在pdf上将突出显示的单词已激活显示为工具提示找到的重要单词,当我将鼠标停在其上方时。

This是原始测试pdf。

我的代码

简而言之,我有几个抽象:

File file = new File("path/to/myfile/mypdf.pdf");

PDDocument document = PDDocument.load(file);

PDPage page = document.getPage(0);
List<PDAnnotation> annotations = page.getAnnotations();

PDAnnotationTextMarkup txtMark = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT);
txtMark.setRectangle(pdRectangle);
txtMark.setQuadPoints(quadPoints);
txtMark.setColor(getColor());

annotations.add(txtMark);

当前结果

目前,它会在单词已激活上生成带有以下标记注释的pdf文件:

enter image description here

我想要什么

现在,我想在上面添加工具提示,就像我添加超链接时一样,如下所示,但是带有自由文本。如果将它附加到url上,我只能有一个这样的工具提示,即使我添加了我需要的字符串,pdfbox也会在内部从中创建一个uri ...

enter image description here

FYI:这是注释链接代码:

PDAnnotationLink link = new PDAnnotationLink();
link.setAction("www.stackoverflow.com");
link.setRectangle(pdRectangle);
link.setQuadPoints(quads); annotations.add(link);

我尝试过的原因以及为什么我还不满意

1)我尝试添加注释链接,如上所示,但是使用了描述而不是URL,例如找到的重要单词。结果不好,工具提示会转换为类似以下内容:file:/// Users / myproject / root / important word found

此外,也不建议使用此链接注释,因为在某些情况下,我希望同时具有URL和工具提示。但是,如果我可以解决这个问题,那将是一个真正的考虑。

2)我尝试将内容添加到我的标记注释中,它的工作方式类似于弹出窗口,如下所示:

enter image description here

它的工作原理是...当我将鼠标悬停在它上面时,我的工具提示说明会显示得很漂亮。但是,您会在单词上方看到该气泡图标。这是此解决方案的唯一问题,这些气泡很烦人,最终重叠了文本的重要部分并污染了pdf。如果我能把它们藏起来或让我满意的话。

here是带有此批注的文档。

添加该弹出窗口的代码很简单,添加以下行:

txtMark.setContents("Important word found");

结论

任何很好地添加工具提示或删除该注释气泡的提示,我们将不胜感激。预先感谢。

编辑

正如@Tilman Hausherr在评论中建议的那样,我在代码中添加了以下行:

txtMark.setTitlePopup("Important word found");

未设置内容。我没有烦人的气泡了,但是现在我需要双击我的注释,然后会出现一个不太美观或实用的弹出窗口:

enter image description here

这有一点帮助,因为这是我到目前为止取得的最好成绩。

编辑2

我对PDAnnotationPopup的尝试:根据@Tilman的建议,将以下几行添加到我的代码中:

...
PDAnnotationPopup pdAnnotationPopup = new PDAnnotationPopup();
pdAnnotationPopup.setParent(txtMark);
pdAnnotationPopup.setContents("Important word found");

// Just to make sure
pdAnnotationPopup.setInvisible(false);
pdAnnotationPopup.setNoView(false);
pdAnnotationPopup.setNoZoom(false);
pdAnnotationPopup.setLocked(false);
pdAnnotationPopup.setHidden(false);

annotations.add(pdAnnotationPopup);

我还研究了其他PDAnnotationPopup参数,例如setOpensetRectangle ...,并尝试使其与txtMark.setTitlePopup共存。

不幸的是,这些都没有以任何方式影响我的代码。仅当我设置setOpen(true)和setRectangle时,我才能看到一些东西:在每个文本标记注释上完全空白的弹出窗口。

java pdf pdfbox
1个回答
1
投票

因此,我最终得到了@Tilman的建议,在不设置内容的情况下将setTitlePopup添加到了我的标记中。为了使注释及其工具提示可通过pdf.js等某些查看器看到,还需要调用ConstructAppearances方法:

txtMark.setTitlePopup("Important word found");
txtMark.constructAppearances();

虽然这不是完美的,但因为它需要双击注释才能显示,并且只有像Adobe这样的更强大的pdf阅读器才能看到,这是到目前为止我所能找到的最好的解决方案,并且已经足够。如果用pdf.js包裹pdf文件,也可以完全满足我的期望,如下所示:

pdf viewed with pdf.js

© www.soinside.com 2019 - 2024. All rights reserved.