В двух словах
Я работал над программой, которая получает PDF, выделяет некоторые слова (через pdfbox Mark Annotation obj) и сохраняет новый PDF.
Я бы хотел, чтобы мои выделенные слова отображали всплывающую подсказку с небольшим описанием, например подсказкой.
Например, я хочу, чтобы в моем PDF-файле выделенное слово активировалось показывает всплывающую подсказку найденное важное слово , когда я останавливаю на нем указатель мыши.
Этот является исходным тестовым pdf.
My Код
С парой абстракций, в двух словах, у меня есть:
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 с пометками пометок, как показано ниже на слове , активировано :
Что я хочу
Теперь я хочу добавить всплывающую подсказку, как и при добавлении гиперссылки, как показано ниже, но вместо этого со свободным текстом. У меня может быть всплывающая подсказка, только если она прикреплена к URL, даже если я добавлю нужную строку, pdfbox внутренне создаст из нее uri ...
К вашему сведению: это код ссылки аннотации:
PDAnnotationLink link = new PDAnnotationLink();
link.setAction("www.stackoverflow.com");
link.setRectangle(pdRectangle);
link.setQuadPoints(quads); annotations.add(link);
Что я пробовал и чем еще не удовлетворен
1) Я попытался добавить ссылку для аннотации, как показано выше, но с описанием вместо URL, например найдено важное слово . Результат не очень хороший, всплывающая подсказка преобразуется во что-то вроде: file: /// Users / myproject / root / важное слово найдено .
Также эта аннотация ссылки не является рекомендуемым способом go, так как в некоторых случаях я хотел бы иметь и URL, и всплывающую подсказку. Но если бы я мог изменить это, это было бы реальным соображением.
2) Я попытался добавить контент к моей аннотации отметки, которая работает как всплывающее окно, как показано ниже:
Это работает ... когда я нахожу на него курсор мыши, моё описание всплывающей подсказки прекрасно отображается. Тем не менее, вы можете увидеть этот значок пузыря чуть выше слова. Это единственная проблема с этим решением, эти пузыри довольно раздражают и в конечном итоге перекрывают важную часть текста и загрязняют PDF. Если бы я мог спрятать их или что-то еще, я бы тоже остался доволен.
здесь - это do c с этой аннотацией.
И код для добавления этого всплывающего окна было просто добавить строку ниже:
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 ... и попытался сохранить его в сосуществовании с txtMark.setTitlePopup .
К сожалению, все это никак не повлияло на мой код. Только когда я установил setOpen (true) плюс setRectangle, я мог видеть что-то: абсолютно пустое всплывающее окно над каждой из моих заметок с текстовыми метками.