在 PDFBox 中,是否可以向标记注释添加工具提示(提示)?
In PDFBox, Is it possible to add a tooltip (hint) to a mark annotation?
一言以蔽之
我一直在开发一个获取 pdf 的程序,突出显示一些单词(通过 pdfbox Mark Annotation obj)并保存新的 pdf。
我希望我突出显示的词显示一个工具提示,上面有一些小的描述,就像一个提示。
例如,我希望在我的 pdf 中,突出显示的单词 activated 在我停止鼠标时显示工具提示 important word found超过它。
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 带有如下标记注释 activated:
我想要的
现在我想在上面添加一个工具提示,就像我添加 hyperlink 时所做的那样,如下所示,但使用的是自由文本。如果它附加到 url,我只能有这样的工具提示,即使我添加了我需要的字符串,pdfbox 也会在内部创建一个 uri...
仅供参考:这是注释 link 代码:
PDAnnotationLink link = new PDAnnotationLink();
link.setAction("www.whosebug.com");
link.setRectangle(pdRectangle);
link.setQuadPoints(quads); annotations.add(link);
我尝试过的以及为什么我还不满意
1) 我已尝试添加注释 link,如上所示,但使用的是描述而不是 url,例如 important word found[=105] =].结果不好,工具提示被转换为类似:file:///Users/myproject/root/important word found。
此外,此 link 注释不是推荐的方式,因为在某些情况下我会希望同时拥有 URL 和工具提示。但如果我能扭转它,那将是一个真正的考虑。
2) 我尝试将内容添加到我的标记注释中,它像弹出窗口一样工作,如下所示:
它有效...当我将鼠标悬停在它上面时,我的工具提示描述显示得很漂亮。但是,您可以在单词上方看到气泡图标。这是此解决方案的唯一问题,这些气泡非常烦人,最终会重叠文本的重要部分并污染 pdf。如果我能把它们藏起来什么的我也很满意了。
here 是带有此注释的文档。
添加此弹出窗口的代码很简单,只需添加以下行:
txtMark.setContents("Important word found");
结论
任何有关添加工具提示或删除注释气泡的提示都将不胜感激。提前致谢。
编辑
正如@Tilman Hausherr 在评论中所建议的那样,我在我的代码中添加了以下行:
txtMark.setTitlePopup("Important word found");
不设置内容。我不再有烦人的气泡了,但现在我需要双击我的注释,然后会出现一个不太好看或不实用的弹出窗口:
这有点帮助,因为它是迄今为止我得到的最好的。
编辑 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 参数,例如 setOpen、setRectangle... 并尝试使其与 [=87= 共存]txtMark.setTitlePopup.
不幸的是,none 以任何方式影响了我的代码。只有当我设置 setOpen(true) 加上 setRectangle 时,我才能看到一些东西:我的每个文本标记注释上都有一个完全空的弹出窗口。
所以我最终接受了@Tilman 的建议,在我的标记中添加了一个 setTitlePopup 而没有设置内容。为了让某些查看器可以看到注释及其工具提示,例如 pdf.js,还需要调用 constructAppearances 方法:
txtMark.setTitlePopup("Important word found");
txtMark.constructAppearances(new PDHighlightAppearanceHandler(txtMark, pdDocument));
虽然这并不完美,因为它需要双击注释才能显示,并且只有功能更强大的 pdf 阅读器(如 Adobe)才能看到它,但它是迄今为止我能找到的最佳解决方案并且足够了。如果你用 pdf.js 包装 pdf,它也完全符合我的期望,如下所示:
一言以蔽之
我一直在开发一个获取 pdf 的程序,突出显示一些单词(通过 pdfbox Mark Annotation obj)并保存新的 pdf。
我希望我突出显示的词显示一个工具提示,上面有一些小的描述,就像一个提示。
例如,我希望在我的 pdf 中,突出显示的单词 activated 在我停止鼠标时显示工具提示 important word found超过它。
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 带有如下标记注释 activated:
我想要的
现在我想在上面添加一个工具提示,就像我添加 hyperlink 时所做的那样,如下所示,但使用的是自由文本。如果它附加到 url,我只能有这样的工具提示,即使我添加了我需要的字符串,pdfbox 也会在内部创建一个 uri...
仅供参考:这是注释 link 代码:
PDAnnotationLink link = new PDAnnotationLink();
link.setAction("www.whosebug.com");
link.setRectangle(pdRectangle);
link.setQuadPoints(quads); annotations.add(link);
我尝试过的以及为什么我还不满意
1) 我已尝试添加注释 link,如上所示,但使用的是描述而不是 url,例如 important word found[=105] =].结果不好,工具提示被转换为类似:file:///Users/myproject/root/important word found。
此外,此 link 注释不是推荐的方式,因为在某些情况下我会希望同时拥有 URL 和工具提示。但如果我能扭转它,那将是一个真正的考虑。
2) 我尝试将内容添加到我的标记注释中,它像弹出窗口一样工作,如下所示:
它有效...当我将鼠标悬停在它上面时,我的工具提示描述显示得很漂亮。但是,您可以在单词上方看到气泡图标。这是此解决方案的唯一问题,这些气泡非常烦人,最终会重叠文本的重要部分并污染 pdf。如果我能把它们藏起来什么的我也很满意了。
here 是带有此注释的文档。
添加此弹出窗口的代码很简单,只需添加以下行:
txtMark.setContents("Important word found");
结论
任何有关添加工具提示或删除注释气泡的提示都将不胜感激。提前致谢。
编辑
正如@Tilman Hausherr 在评论中所建议的那样,我在我的代码中添加了以下行:
txtMark.setTitlePopup("Important word found");
不设置内容。我不再有烦人的气泡了,但现在我需要双击我的注释,然后会出现一个不太好看或不实用的弹出窗口:
这有点帮助,因为它是迄今为止我得到的最好的。
编辑 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 参数,例如 setOpen、setRectangle... 并尝试使其与 [=87= 共存]txtMark.setTitlePopup.
不幸的是,none 以任何方式影响了我的代码。只有当我设置 setOpen(true) 加上 setRectangle 时,我才能看到一些东西:我的每个文本标记注释上都有一个完全空的弹出窗口。
所以我最终接受了@Tilman 的建议,在我的标记中添加了一个 setTitlePopup 而没有设置内容。为了让某些查看器可以看到注释及其工具提示,例如 pdf.js,还需要调用 constructAppearances 方法:
txtMark.setTitlePopup("Important word found");
txtMark.constructAppearances(new PDHighlightAppearanceHandler(txtMark, pdDocument));
虽然这并不完美,因为它需要双击注释才能显示,并且只有功能更强大的 pdf 阅读器(如 Adobe)才能看到它,但它是迄今为止我能找到的最佳解决方案并且足够了。如果你用 pdf.js 包装 pdf,它也完全符合我的期望,如下所示: