PDF Tooltip с использованием Python
Добавление всплывающей подсказки к найденному тексту путем добавления невидимой кнопки
Этот код демонстрирует, как добавить всплывающие подсказки к определенным фрагментам текста в PDF-документе с использованием Aspose.PDF. Всплывающие подсказки отображаются, когда курсор мыши находится над соответствующим текстом.
Следующий фрагмент кода покажет вам, как реализовать эту функциональность:
import aspose.pdf as ap
document = ap.Document()
document.pages.add().paragraphs.add(
ap.text.TextFragment("Переместите курсор мыши сюда, чтобы отобразить всплывающую подсказку")
)
document.pages[1].paragraphs.add(
ap.text.TextFragment(
"Переместите курсор мыши сюда, чтобы отобразить очень длинную всплывающую подсказку"
)
)
document.save(output_pdf)
# Открыть документ с текстом
document = ap.Document(output_pdf)
# Создать объект TextAbsorber, чтобы найти все фразы, соответствующие регулярному выражению
absorber = ap.text.TextFragmentAbsorber(
"Переместите курсор мыши сюда, чтобы отобразить всплывающую подсказку"
)
# Применить абсорбер к страницам документа
document.pages.accept(absorber)
# Получить извлеченные текстовые фрагменты
text_fragments = absorber.text_fragments
# Перебрать фрагменты
for fragment in text_fragments:
# Создать невидимую кнопку на позиции текстового фрагмента
field = ap.forms.ButtonField(fragment.page, fragment.rectangle)
# alternate_name будет отображаться как всплывающая подсказка приложением просмотра
field.alternate_name = "Подсказка для текста."
# Добавить поле кнопки в документ
document.form.add(field)
# Далее будет пример очень длинной всплывающей подсказки
absorber = ap.text.TextFragmentAbsorber(
"Переместите курсор мыши сюда, чтобы отобразить очень длинную всплывающую подсказку"
)
document.pages.accept(absorber)
text_fragments = absorber.text_fragments
for fragment in text_fragments:
field = ap.forms.ButtonField(fragment.page, fragment.rectangle)
# Установить очень длинный текст
field.alternate_name = (
"Lorem ipsum dolor sit amet, consectetur adipiscing elit,"
" sed do eiusmod tempor incididunt ut labore et dolore magna"
" aliqua. Ut enim ad minim veniam, quis nostrud exercitation"
" ullamco laboris nisi ut aliquip ex ea commodo consequat."
" Duis aute irure dolor in reprehenderit in voluptate velit"
" esse cillum dolore eu fugiat nulla pariatur. Excepteur sint"
" occaecat cupidatat non proident, sunt in culpa qui officia"
" deserunt mollit anim id est laborum."
)
document.form.add(field)
# Сохранить документ
document.save(output_pdf)
Создание скрытого текстового блока и его отображение при наведении мыши
Этот фрагмент кода на Python показывает, как добавить всплывающий текст в PDF-документ, который появляется при наведении курсора мыши на определенную область.
Сначала создается новый PDF-документ, и в него добавляется абзац с текстом “Переместите курсор мыши сюда, чтобы отобразить всплывающий текст”. Затем документ сохраняется.
Далее, сохраненный документ снова открывается, и создается объект TextAbsorber для поиска ранее добавленного текстового фрагмента. Этот текстовый фрагмент затем используется для определения позиции и характеристик всплывающего текстового поля.
Создается объект TextBoxField для представления всплывающего текстового поля, и его свойства, такие как позиция, значение, статус только для чтения и видимость, устанавливаются соответствующим образом. Кроме того, полю присваиваются уникальное имя и характеристики внешнего вида.
Всплывающее текстовое поле добавляется в форму документа, и на позиции исходного текстового фрагмента создается невидимое кнопочное поле. HideAction события назначены полю кнопки, указывая, что плавающее текстовое поле должно появляться, когда курсор мыши входит в его окрестность, и исчезать, когда курсор выходит.
Наконец, поле кнопки добавляется в форму документа, и измененный документ сохраняется.
Этот фрагмент кода предоставляет метод для создания интерактивных плавающих текстовых элементов в PDF-документе с использованием Aspose.PDF для Python.
import aspose.pdf as ap
document = ap.Document()
document.pages.add().paragraphs.add(
ap.text.TextFragment("Переместите курсор мыши сюда, чтобы отобразить плавающий текст")
)
document.save(output_pdf)
# Открыть документ с текстом
document = ap.Document(output_pdf)
# Создать объект TextAbsorber для поиска всех фраз, соответствующих регулярному выражению
absorber = ap.text.TextFragmentAbsorber(
"Переместите курсор мыши сюда, чтобы отобразить плавающий текст"
)
# Применить абсорбер для страниц документа
document.pages.accept(absorber)
# Получить первый извлеченный фрагмент текста
text_fragments = absorber.text_fragments
fragment = text_fragments[1]
# Создать скрытое текстовое поле для плавающего текста в указанном прямоугольнике страницы
floating_field = ap.forms.TextBoxField(
fragment.page, ap.Rectangle(100.0, 700.0, 220.0, 740.0, False)
)
# Установить текст для отображения в качестве значения поля
floating_field.value = 'Это "плавающее текстовое поле".'
# Мы рекомендуем сделать поле "только для чтения" для этого сценария
floating_field.read_only = True
# Установить флаг "скрыто", чтобы сделать поле невидимым при открытии документа
floating_field.flags |= ap.annotations.AnnotationFlags.HIDDEN
# Установка уникального имени поля не обязательна, но разрешена
floating_field.partial_name = "FloatingField_1"
# Установка характеристик внешнего вида поля не обязательна, но улучшает его
floating_field.default_appearance = ap.annotations.DefaultAppearance(
"Helv", 10, ap.Color.blue.to_rgb()
)
floating_field.characteristics.background = ap.Color.light_blue.to_rgb()
floating_field.characteristics.border = ap.Color.dark_blue.to_rgb()
floating_field.border = ap.annotations.Border(floating_field)
floating_field.border.width = 1
floating_field.multiline = True
# Добавить текстовое поле в документ
document.form.add(floating_field)
# Создать невидимую кнопку на позиции текстового фрагмента
button_field = ap.forms.ButtonField(fragment.page, fragment.rectangle)
# Создать новое действие скрытия для указанного поля (аннотации) и флаг невидимости.
# (Вы также можете ссылаться на плавающее поле по имени, если вы указали его выше.)
# Добавить действия при входе/выходе курсора на невидимое поле кнопки
button_field.actions.on_enter = ap.annotations.HideAction(
floating_field.partial_name, False
)
button_field.actions.on_exit = ap.annotations.HideAction(
floating_field.partial_name
)
# Добавить поле кнопки в документ
document.form.add(button_field)
# Сохранить документ
document.save(output_pdf)