Интерактивные аннотации с использованием Python
В этой статье показано, как работать с интерактивными аннотациями в PDF‑документах с использованием Aspose.PDF for Python via .NET.
Пример скрипта демонстрирует несколько общих рабочих процессов:
- добавить аннотацию ссылки к существующему тексту
- получить прямоугольники ссылочных аннотаций со страницы
- удалить аннотации ссылок
- создать кнопки навигации
- создать кнопку печати
Аннотация ссылки
Добавление аннотацию ссылки
Этот пример ищет фрагмент текста на первой странице "file" и размещает кликабельную аннотацию ссылки над соответствующей областью текста. Когда пользователь нажимает на аннотацию, PDF открывает указанный веб‑адрес.
Загрузить документ и найти целевой текст
Создать Document объект и использовать TextFragmentAbsorber для поиска текста, который станет интерактивным.
document = ap.Document(infile)
text_fragment_absorber = ap.text.TextFragmentAbsorber("file")
document.pages[1].accept(text_fragment_absorber)
phone_number_fragment = text_fragment_absorber.text_fragments[1]
Создание аннотацию ссылки
Создать LinkAnnotation используя прямоугольник найденного фрагмента текста и назначая для него действие URI.
link_annotation = ap.annotations.LinkAnnotation(
document.pages[1], phone_number_fragment.rectangle
)
link_annotation.action = ap.annotations.GoToURIAction("https://www.aspose.com")
Добавление аннотацию и сохранить PDF
Добавьте аннотацию на страницу и сохраните обновлённый файл.
document.pages[1].annotations.append(link_annotation)
document.save(outfile)
Полный пример
def link_add(infile, outfile):
document = ap.Document(infile)
text_fragment_absorber = ap.text.TextFragmentAbsorber("file")
document.pages[1].accept(text_fragment_absorber)
phone_number_fragment = text_fragment_absorber.text_fragments[1]
link_annotation = ap.annotations.LinkAnnotation(
document.pages[1], phone_number_fragment.rectangle
)
link_annotation.action = ap.annotations.GoToURIAction("https://www.aspose.com")
document.pages[1].annotations.append(link_annotation)
document.save(outfile)
Получение аннотацию ссылки
Чтобы просмотреть существующие интерактивные ссылки, отфильтруйте коллекцию аннотаций на первой странице и оставьте только элементы, тип которых LINK. Затем пример выводит прямоугольник для каждой соответствующей аннотации.
Загрузить PDF и собрать аннотации ссылок
document = ap.Document(infile)
link_annotations = [
a
for a in document.pages[1].annotations
if (a.annotation_type == ap.annotations.AnnotationType.LINK)
]
Прочитать прямоугольники аннотаций
Переберите отфильтрованные аннотации и выведите координаты каждой области ссылки.
for link_annotation in link_annotations:
print(link_annotation.rect)
Полный пример
def link_get(infile, outfile):
document = ap.Document(infile)
link_annotations = [
a
for a in document.pages[1].annotations
if (a.annotation_type == ap.annotations.AnnotationType.LINK)
]
for link_annotation in link_annotations:
print(link_annotation.rect)
Удаление аннотацию ссылки
Этот рабочий процесс удаляет все аннотации ссылок с первой страницы и сохраняет очищенный PDF в новый файл.
Найти аннотации ссылок для удаления
document = ap.Document(infile)
link_annotations = [
a
for a in document.pages[1].annotations
if (a.annotation_type == ap.annotations.AnnotationType.LINK)
]
Удаление каждую аннотацию ссылки
for link_annotation in link_annotations:
document.pages[1].annotations.delete(link_annotation)
Сохранение обновлённого документа
document.save(outfile)
Полный пример
def link_delete(infile, outfile):
document = ap.Document(infile)
link_annotations = [
a
for a in document.pages[1].annotations
if (a.annotation_type == ap.annotations.AnnotationType.LINK)
]
for link_annotation in link_annotations:
document.pages[1].annotations.delete(link_annotation)
document.save(outfile)
Виджет-аннотация
Добавление кнопку навигации
Кнопки навигации полезны в многостраничных PDF, когда вы хотите, чтобы читатели перемещались между страницами без использования интерфейса просмотрщика. Этот пример добавляет Previous Page и Next Page кнопки к каждой странице.
Определить настройки кнопки
Сохраните подписи кнопок, их позиции и предопределённые действия в простой список конфигурации.
button_config = [
("Previous Page", 120.0, ap.annotations.PredefinedAction.PREV_PAGE),
("Next Page", 230.0, ap.annotations.PredefinedAction.NEXT_PAGE),
]
Загрузить PDF и убедиться, что существует несколько страниц
Пример открывает исходный документ и добавляет ещё одну страницу, чтобы навигационные действия имели как минимум две страницы для работы.
document = ap.Document(infile)
document.pages.add()
Создание кнопки на каждой странице
Для каждой страницы создайте ButtonField, установить его текст и цвета, назначить предопределённое действие навигации и добавить его в форму.
for page in document.pages:
for name, x_pos, action in button_config:
rect = ap.Rectangle(x_pos, 10.0, x_pos + 100, 40.0, True)
button = ap.forms.ButtonField(page, rect)
button.partial_name = name
button.value = name
button.characteristics.border = ap.Color.red.to_rgb()
button.characteristics.background = ap.Color.orange.to_rgb()
button.actions.on_release_mouse_btn = ap.annotations.NamedAction(action)
document.form.add(button)
Сохранение результат
document.save(outfile)
Полный пример
def navigation_buttons_add(infile, outfile):
button_config = [
("Previous Page", 120.0, ap.annotations.PredefinedAction.PREV_PAGE),
("Next Page", 230.0, ap.annotations.PredefinedAction.NEXT_PAGE),
]
document = ap.Document(infile)
document.pages.add()
for page in document.pages:
for name, x_pos, action in button_config:
rect = ap.Rectangle(x_pos, 10.0, x_pos + 100, 40.0, True)
button = ap.forms.ButtonField(page, rect)
button.partial_name = name
button.value = name
button.characteristics.border = ap.Color.red.to_rgb()
button.characteristics.background = ap.Color.orange.to_rgb()
button.actions.on_release_mouse_btn = ap.annotations.NamedAction(action)
document.form.add(button)
document.save(outfile)
Добавление кнопку печати
Этот пример создает новый одностраничный PDF и размещает кнопку печати возле верхней части страницы. Нажатие кнопки вызывает предопределённое действие печати в совместимом просмотрщике PDF.
Создание нового PDF и добавление страницы
document = ap.Document()
page = document.pages.add()
Создание и настроить кнопку
Определите прямоугольник кнопки, создайте ButtonField, установите его подпись и прикрепите действие печати.
rect = ap.Rectangle(72, 748, 164, 768, True)
print_button = ap.forms.ButtonField(page, rect)
print_button.alternate_name = "Print current document"
print_button.color = ap.Color.black
print_button.partial_name = "printBtn1"
print_button.value = "Print Document"
print_button.actions.on_release_mouse_btn = ap.annotations.NamedAction(
ap.annotations.PredefinedAction.FILE_PRINT
)
Установка стили границы и фона
Пример определяет сплошную рамку и применяет пользовательские цвета, чтобы сделать кнопку видимой в документе.
border = ap.annotations.Border(print_button)
border.style = ap.annotations.BorderStyle.SOLID
border.width = 2
print_button.border = border
print_button.characteristics.border = ap.Color.blue.to_rgb()
print_button.characteristics.background = ap.Color.light_blue.to_rgb()
Добавление кнопку и сохранить PDF
document.form.add(print_button)
document.save(outfile)
Полный пример
def print_button_add(infile, outfile):
document = ap.Document()
page = document.pages.add()
rect = ap.Rectangle(72, 748, 164, 768, True)
print_button = ap.forms.ButtonField(page, rect)
print_button.alternate_name = "Print current document"
print_button.color = ap.Color.black
print_button.partial_name = "printBtn1"
print_button.value = "Print Document"
print_button.actions.on_release_mouse_btn = ap.annotations.NamedAction(
ap.annotations.PredefinedAction.FILE_PRINT
)
border = ap.annotations.Border(print_button)
border.style = ap.annotations.BorderStyle.SOLID
border.width = 2
print_button.border = border
print_button.characteristics.border = ap.Color.blue.to_rgb()
print_button.characteristics.background = ap.Color.light_blue.to_rgb()
document.form.add(print_button)
document.save(outfile)