Обновить ссылки PDF в Python
Update LinkAnnotation Text Color
В этом примере показано, как обнаружить все аннотации ссылок на первой странице PDF с помощью Aspose.PDF for Python, а затем выделить текст рядом с каждой ссылкой, изменив цвет его шрифта на красный. Для поиска и изменения близлежащего текста используется TextFragmentAbsorber с слегка расширенной областью вокруг каждого прямоугольника ссылки.
Это может быть использовано для:
- Визуальная маркировка ссылок в документе
- Повышение доступности за счёт выделения связанного контента
- Предварительная обработка PDF‑файлов перед просмотром или экспортом
Для каждой из этих ссылочных аннотаций скрипт получает её прямоугольную границу и слегка расширяет эту область, чтобы включить соседний текст, позволяя более широкую визуальную идентификацию. Затем он применяет TextFragmentAbsorber к этому расширенному участку, чтобы извлечь любые находящиеся внутри фрагменты текста. Полученные фрагменты модифицируются путем изменения их цвета шрифта на красный, эффективно отмечая окружающий текст для выделения и обзора. После применения всех этих обновлений модифицированный документ сохраняется по пути вывода, сохраняя подсвеченные аннотации и их связанный текст.
import aspose.pdf as ap
import sys
from os import path
from aspose.pycore import cast, is_assignable
def link_annotation_update_text_color(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 la in link_annotations:
ta = ap.text.TextFragmentAbsorber()
rect = la.rect
rect.llx -= 2
rect.lly -= 2
rect.urx += 2
rect.ury += 2
ta.text_search_options = ap.text.TextSearchOptions(rect)
ta.visit(document.pages[1])
for textFragment in ta.text_fragments:
textFragment.text_state.foreground_color = ap.Color.red
document.save(outfile)
Обновить границу
Скрипт ориентируется на первую страницу Document и фильтрует все аннотации, выбирая только те, которые имеют тип LINK — они обычно представляют интерактивные элементы, такие как гиперссылки или триггеры навигации. Для каждой из этих link annotations код приводит их к типу LinkAnnotation и обновляет их свойство color до красного, визуально выделяя их, чтобы они отличались от другого контента. После того как все link annotations были изменены, обновлённый Document сохраняется в указанное место вывода, сохраняя новое оформление.
import aspose.pdf as ap
import sys
from os import path
from aspose.pycore import cast, is_assignable
def link_annotation_update_border(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 la in link_annotations:
link_annotation = cast(ap.annotations.LinkAnnotation, la)
link_annotation.color = ap.Color.red
document.save(outfile)
Обновить веб‑назначение
Как только пути настроены, оригинальный документ загружается с использованием библиотеки Aspose.PDF, делая его содержание доступным для модификации. Затем скрипт фокусируется на первой странице документа, отфильтровывая все аннотации и выбирая только те, которые являются ссылками, обычно представляющими кликабельные области или гиперссылки. Чтобы избежать ошибок типов и обеспечить безопасную обработку, каждая аннотация проверяется с помощью is_assignable и затем приводится к соответствующему типу LinkAnnotation. Если ссылка связана с GoToURIAction, что означает указание на веб‑адрес, скрипт обновляет этот URI, перенаправляя пользователей на “https://www.aspose.com”. Наконец, после применения всех желаемых изменений, изменённый документ сохраняется по указанному пути вывода.
import aspose.pdf as ap
import sys
from os import path
from aspose.pycore import cast, is_assignable
def link_annotation_update_web_destination(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 la in link_annotations:
if is_assignable(la, ap.annotations.LinkAnnotation):
annotation = cast(ap.annotations.LinkAnnotation, la)
if is_assignable(annotation.action, ap.annotations.GoToURIAction):
action = cast(ap.annotations.GoToURIAction, annotation.action)
action.uri = "https://www.aspose.com"
document.save(outfile)