Медийные аннотации в PDF
В этой статье показано, как работать с медиааннотациями в PDF‑документах с использованием Aspose.PDF for Python via .NET.
Пример скрипта демонстрирует несколько мультимедийных рабочих процессов:
- добавить звуковую аннотацию
- создать 3D-аннотацию из модели U3D
- добавить экранную аннотацию из медиафайла
- добавлять и удалять аннотации rich media
- просмотреть существующие мультимедийные аннотации
Добавление звуковые аннотации
Этот пример добавляет звуковую аннотацию на первую страницу существующего PDF и связывает её с WAV‑файлом, хранящимся в директории ввода.
Открытие PDF и определить медиафайл
media_dir = path.dirname(infile)
document = ap.Document(infile)
page = document.pages[1]
media_file = path.join(media_dir, "file_example_WAV_1MG.wav")
Создание и настроить звуковую аннотацию
Установите прямоугольник аннотации, цвет, заголовок и тему. Затем добавьте всплывающую аннотацию, чтобы предоставить дополнительные детали при выборе аннотации.
sound_annotation = ann.SoundAnnotation(
page,
ap.Rectangle(20, 700, 60, 740, True),
media_file,
)
sound_annotation.color = ap.Color.blue
sound_annotation.title = "John Smith"
sound_annotation.subject = "Sound Annotation demo"
sound_annotation.popup = ann.PopupAnnotation(
page,
ap.Rectangle(20, 700, 60, 740, True),
)
Добавление аннотацию и сохранить PDF
page.annotations.append(sound_annotation)
document.save(outfile)
Полный пример
def sound_annotation_add(infile, outfile):
media_dir = path.dirname(infile)
document = ap.Document(infile)
page = document.pages[1]
media_file = path.join(media_dir, "file_example_WAV_1MG.wav")
sound_annotation = ann.SoundAnnotation(
page,
ap.Rectangle(20, 700, 60, 740, True),
media_file,
)
sound_annotation.color = ap.Color.blue
sound_annotation.title = "John Smith"
sound_annotation.subject = "Sound Annotation demo"
sound_annotation.popup = ann.PopupAnnotation(
page,
ap.Rectangle(20, 700, 60, 740, True),
)
page.annotations.append(sound_annotation)
document.save(outfile)
Добавление 3D‑аннотации
Этот рабочий процесс создаёт новый PDF и встраивает 3D‑модель из файла U3D. Он также определяет предустановленные виды и настройки визуализации для 3D‑контента.
Создание PDF‑документ и 3D‑контент
model_file = infile
document = ap.Document()
pdf3d_content = ann.PDF3DContent(model_file)
pdf3d_artwork = ann.PDF3DArtwork(document, pdf3d_content)
pdf3d_artwork.lighting_scheme = ann.PDF3DLightingScheme(type_name="CAD")
pdf3d_artwork.render_mode = ann.PDF3DRenderMode(type_name="Solid")
Определить 3D‑матрицы просмотра
Эти матрицы описывают, как 3D‑модель отображается с разных точек зрения.
top_matrix = ap.Matrix3D(
1,
0,
0,
0,
-1,
0,
0,
0,
-1,
0.10271,
0.08184,
0.273836,
)
front_matrix = ap.Matrix3D(
0,
-1,
0,
0,
0,
1,
-1,
0,
0,
0.332652,
0.08184,
0.085273,
)
Добавление именованные представления к изображению
pdf3d_artwork.view_array.add(ann.PDF3DView(document, top_matrix, 0.188563, "Top"))
pdf3d_artwork.view_array.add(ann.PDF3DView(document, front_matrix, 0.188563, "Left"))
Создание аннотацию и сохранить документ
page = document.pages.add()
pdf3d_annotation = ann.PDF3DAnnotation(
page,
ap.Rectangle(100, 500, 300, 700, True),
pdf3d_artwork,
)
pdf3d_annotation.border = ann.Border(pdf3d_annotation)
pdf3d_annotation.set_default_view_index(1)
pdf3d_annotation.flags = ann.AnnotationFlags.NO_ZOOM
pdf3d_annotation.name = path.basename(model_file)
page.annotations.append(pdf3d_annotation)
document.save(outfile)
Полный пример
def annotation_3d_add(infile, outfile):
model_file = infile
document = ap.Document()
pdf3d_content = ann.PDF3DContent(model_file)
pdf3d_artwork = ann.PDF3DArtwork(document, pdf3d_content)
pdf3d_artwork.lighting_scheme = ann.PDF3DLightingScheme(type_name="CAD")
pdf3d_artwork.render_mode = ann.PDF3DRenderMode(type_name="Solid")
top_matrix = ap.Matrix3D(
1,
0,
0,
0,
-1,
0,
0,
0,
-1,
0.10271,
0.08184,
0.273836,
)
front_matrix = ap.Matrix3D(
0,
-1,
0,
0,
0,
1,
-1,
0,
0,
0.332652,
0.08184,
0.085273,
)
pdf3d_artwork.view_array.add(ann.PDF3DView(document, top_matrix, 0.188563, "Top"))
pdf3d_artwork.view_array.add(
ann.PDF3DView(document, front_matrix, 0.188563, "Left")
)
page = document.pages.add()
pdf3d_annotation = ann.PDF3DAnnotation(
page,
ap.Rectangle(100, 500, 300, 700, True),
pdf3d_artwork,
)
pdf3d_annotation.border = ann.Border(pdf3d_annotation)
pdf3d_annotation.set_default_view_index(1)
pdf3d_annotation.flags = ann.AnnotationFlags.NO_ZOOM
pdf3d_annotation.name = path.basename(model_file)
page.annotations.append(pdf3d_annotation)
document.save(outfile)
Добавление аннотации экрана
Экранные аннотации позволяют прикреплять воспроизводимый медиа‑контент к странице PDF. В этом примере создаётся новый PDF и добавляется экранная аннотация на основе файла SWF.
Создание PDF и страницу
media_file = infile
document = ap.Document()
page = document.pages.add()
Создание аннотацию экрана
screen_annotation = ann.ScreenAnnotation(
page,
ap.Rectangle(170, 190, 470, 380, True),
media_file,
)
Добавление аннотацию и сохранить PDF
page.annotations.append(screen_annotation)
document.save(outfile)
Полный пример
def screen_annotation_with_media_add(infile, outfile):
media_file = infile
document = ap.Document()
page = document.pages.add()
screen_annotation = ann.ScreenAnnotation(
page,
ap.Rectangle(170, 190, 470, 380, True),
media_file,
)
page.annotations.append(screen_annotation)
document.save(outfile)
Аннотации Rich Media
Добавление аннотации Rich Media
Аннотации Rich media могут внедрять продвинутый интерактивный контент, такой как видеоплееры с постерами, скинами и пользовательскими настройками воспроизведения.
Подготовить медиа и ресурсы плеера
Пример загружает видео, постер‑изображение и файлы скина плеера из предопределённых мест.
media_dir = path.dirname(infile)
path_to_adobe_app = (
r"C:\\Program Files (x86)\\Adobe\\Acrobat 2017\\Acrobat\\Multimedia Skins"
)
document = ap.Document()
page = document.pages.add()
video_name = "file_example_MP4_480_1_5MG.mp4"
poster_name = "file_example_MP4_480_1_5MG_poster.jpg"
skin_name = "SkinOverAllNoFullNoCaption.swf"
Создание аннотацию rich media
rich_media_annotation = ann.RichMediaAnnotation(
page,
ap.Rectangle(100, 500, 300, 600, True),
)
Прикрепить пользовательский плеер, скин, постер и видео
player_path = os.path.join(path_to_adobe_app, "Players", "Videoplayer.swf")
rich_media_annotation.custom_player = open(player_path, "rb")
rich_media_annotation.custom_flash_variables = f"source={video_name}&skin={skin_name}"
skin_path = os.path.join(path_to_adobe_app, skin_name)
rich_media_annotation.add_custom_data(skin_name, open(skin_path, "rb"))
poster_path = os.path.join(media_dir, poster_name)
rich_media_annotation.set_poster(open(poster_path, "rb"))
video_path = os.path.join(media_dir, video_name)
with open(video_path, "rb") as video_file:
rich_media_annotation.set_content(video_name, video_file)
Установка поведение воспроизведения и сохранить PDF
Аннотация настроена как видеоконтент и активируется при щелчке пользователя.
rich_media_annotation.type = ann.RichMediaAnnotation.ContentType.VIDEO
rich_media_annotation.activate_on = ann.RichMediaAnnotation.ActivationEvent.CLICK
rich_media_annotation.update()
page.annotations.append(rich_media_annotation)
document.save(outfile)
Полный пример
def rich_media_annotations_add(infile, outfile):
media_dir = path.dirname(infile)
path_to_adobe_app = (
r"C:\\Program Files (x86)\\Adobe\\Acrobat 2017\\Acrobat\\Multimedia Skins"
)
document = ap.Document()
page = document.pages.add()
video_name = "file_example_MP4_480_1_5MG.mp4"
poster_name = "file_example_MP4_480_1_5MG_poster.jpg"
skin_name = "SkinOverAllNoFullNoCaption.swf"
rich_media_annotation = ann.RichMediaAnnotation(
page,
ap.Rectangle(100, 500, 300, 600, True),
)
player_path = os.path.join(path_to_adobe_app, "Players", "Videoplayer.swf")
rich_media_annotation.custom_player = open(player_path, "rb")
rich_media_annotation.custom_flash_variables = (
f"source={video_name}&skin={skin_name}"
)
skin_path = os.path.join(path_to_adobe_app, skin_name)
rich_media_annotation.add_custom_data(skin_name, open(skin_path, "rb"))
poster_path = os.path.join(media_dir, poster_name)
rich_media_annotation.set_poster(open(poster_path, "rb"))
video_path = os.path.join(media_dir, video_name)
with open(video_path, "rb") as video_file:
rich_media_annotation.set_content(video_name, video_file)
rich_media_annotation.type = ann.RichMediaAnnotation.ContentType.VIDEO
rich_media_annotation.activate_on = ann.RichMediaAnnotation.ActivationEvent.CLICK
rich_media_annotation.update()
page.annotations.append(rich_media_annotation)
document.save(outfile)
Удаление аннотации Rich Media
Этот рабочий процесс удаляет все аннотации rich media с первой страницы существующего PDF.
Открытие PDF и собрать аннотации с богатыми медиа
document = ap.Document(infile)
page = document.pages[1]
to_delete = [
annotation
for annotation in page.annotations
if annotation.annotation_type == ann.AnnotationType.RICH_MEDIA
]
Удаление аннотации и сохранить документ
for annotation in to_delete:
page.annotations.delete(annotation)
document.save(outfile)
Полный пример
def rich_media_annotations_delete(infile, outfile):
document = ap.Document(infile)
page = document.pages[1]
to_delete = [
annotation
for annotation in page.annotations
if annotation.annotation_type == ann.AnnotationType.RICH_MEDIA
]
for annotation in to_delete:
page.annotations.delete(annotation)
document.save(outfile)
Получение Multimedia_annotations
Чтобы проверить мультимедийный контент, уже сохранённый в PDF, отфильтруйте коллекцию аннотаций по типам аннотаций screen, sound и rich media.
Открытие документ и определить целевые типы аннотаций
document = ap.Document(infile)
target_types = {
ann.AnnotationType.SCREEN,
ann.AnnotationType.SOUND,
ann.AnnotationType.RICH_MEDIA,
}
Печать прямоугольников мультимедийных аннотаций
for annotation in document.pages[1].annotations:
if annotation.annotation_type in target_types:
print(f"{annotation.annotation_type} [{annotation.rect}]")
Полный пример
def multimedia_annotations_get(infile, outfile):
document = ap.Document(infile)
target_types = {
ann.AnnotationType.SCREEN,
ann.AnnotationType.SOUND,
ann.AnnotationType.RICH_MEDIA,
}
for annotation in document.pages[1].annotations:
if annotation.annotation_type in target_types:
print(f"{annotation.annotation_type} [{annotation.rect}]")