PDF 中的媒体批注
Contents
[
Hide
]
PDF 中的媒体批注通常包括嵌入或链接的多媒体内容,如音频片段、屏幕播放区域、富媒体容器和 3D 模型。
添加富媒体批注
当 PDF 页面需要嵌入视频内容并使用自定义播放器、海报图像和皮肤时,请使用此示例。
- 创建一个新的 PDF Document 并添加一个页面。
- 创建一个 RichMediaAnnotation,配置播放器资产、海报和内容流。
- 将批注添加到页面并保存输出文档。
public static void richMediaAnnotationsAdd(Path mediaDir, Path outputFile) throws Exception {
String pathToAdobeApp = "C:\\Program Files (x86)\\Adobe\\Acrobat 2017\\Acrobat\\Multimedia Skins";
try (Document document = new Document()) {
Page page = document.getPages().add();
String videoName = "file_example_MP4_480_1_5MG.mp4";
String posterName = "file_example_MP4_480_1_5MG_poster.jpg";
String skinName = "SkinOverAllNoFullNoCaption.swf";
RichMediaAnnotation richMediaAnnotation = new RichMediaAnnotation(
page,
new Rectangle(100, 500, 300, 600, true));
String playerPath = pathToAdobeApp + "\\Players\\Videoplayer.swf";
richMediaAnnotation.setCustomPlayer(new FileInputStream(playerPath));
richMediaAnnotation.setCustomFlashVariables("source=" + videoName + "&skin=" + skinName);
String skinPath = pathToAdobeApp + "\\" + skinName;
richMediaAnnotation.addCustomData(skinName, new FileInputStream(skinPath));
Path posterPath = mediaDir.resolve(posterName);
richMediaAnnotation.setPoster(new FileInputStream(posterPath.toString()));
Path videoPath = mediaDir.resolve(videoName);
try (FileInputStream videoStream = new FileInputStream(videoPath.toString())) {
richMediaAnnotation.setContent(videoName, videoStream);
}
richMediaAnnotation.setType(RichMediaAnnotation.ContentType.Video);
richMediaAnnotation.setActivateOn(RichMediaAnnotation.ActivationEvent.Click);
richMediaAnnotation.update();
page.getAnnotations().add(richMediaAnnotation);
document.save(outputFile.toString());
}
}
删除富媒体批注
此示例从页面中删除已有的富媒体批注。
- 打开源 PDF Document。
- 收集指定类型的批注 AnnotationType.
RichMedia。 - 删除已收集的批注并保存更新后的文档。
public static void richMediaAnnotationsDelete(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page = document.getPages().get_Item(1);
List<Annotation> toDelete = new ArrayList<>();
for (Annotation annotation : page.getAnnotations()) {
if (annotation.getAnnotationType() == AnnotationType.RichMedia) {
toDelete.add(annotation);
}
}
for (Annotation annotation : toDelete) {
page.getAnnotations().delete(annotation);
}
document.save(outputFile.toString());
}
}
获取多媒体批注
使用此示例检查页面上已存在的屏幕、声音和富媒体批注。
- 打开源 PDF Document。
- 定义您想要检测的多媒体批注类型集合。
- 遍历页面批注,并为每个匹配项打印其类型和矩形。
public static void multimediaAnnotationsGet(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
Set<AnnotationType> targetTypes = Set.of(
AnnotationType.Screen,
AnnotationType.Sound,
AnnotationType.RichMedia);
for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
if (targetTypes.contains(annotation.getAnnotationType())) {
System.out.println(annotation.getAnnotationType() + " [" + annotation.getRect() + "]");
}
}
}
}
添加 3D 批注
本示例添加了一个交互式 3D 模型视图,具有预定义的视角和渲染选项。
- 创建一个新的 PDF Document。
- 将模型加载到 PDF3DContent 并配置一个 PDF3DArtwork。
- 创建 PDF3DAnnotation, 将其添加到页面,并保存文档。
public static void annotation3dAdd(Path modelFile, Path outputFile) {
try (Document document = new Document()) {
PDF3DContent pdf3dContent = new PDF3DContent(modelFile.toString());
PDF3DArtwork pdf3dArtwork = new PDF3DArtwork(document, pdf3dContent);
pdf3dArtwork.setLightingScheme(new PDF3DLightingScheme(LightingSchemeType.CAD));
pdf3dArtwork.setRenderMode(new PDF3DRenderMode(RenderModeType.Solid));
Matrix3D topMatrix = new Matrix3D(
1, 0, 0,
0, -1, 0,
0, 0, -1,
0.10271, 0.08184, 0.273836);
Matrix3D frontMatrix = new Matrix3D(
0, -1, 0,
0, 0, 1,
-1, 0, 0,
0.332652, 0.08184, 0.085273);
pdf3dArtwork.getViewArray().add(new PDF3DView(document, topMatrix, 0.188563, "Top"));
pdf3dArtwork.getViewArray().add(new PDF3DView(document, frontMatrix, 0.188563, "Left"));
Page page = document.getPages().add();
PDF3DAnnotation pdf3dAnnotation = new PDF3DAnnotation(
page,
new Rectangle(100, 500, 300, 700, true),
pdf3dArtwork);
pdf3dAnnotation.setBorder(new com.aspose.pdf.Border(pdf3dAnnotation));
pdf3dAnnotation.setDefaultViewIndex(1);
pdf3dAnnotation.setFlags(AnnotationFlags.NoZoom);
pdf3dAnnotation.setName(modelFile.getFileName().toString());
page.getAnnotations().add(pdf3dAnnotation);
document.save(outputFile.toString());
}
}
添加屏幕批注
当页面需要通过屏幕播放区域引用媒体文件时,请使用此示例。
- 创建一个新的 PDF Document 并添加一个页面。
- 创建一个 ScreenAnnotation 用于媒体文件和目标矩形。
- 将批注添加到页面并保存文档。
public static void screenAnnotationWithMediaAdd(Path mediaFile, Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
ScreenAnnotation screenAnnotation = new ScreenAnnotation(
page,
new Rectangle(170, 190, 470, 380, true),
mediaFile.toString());
page.getAnnotations().add(screenAnnotation);
document.save(outputFile.toString());
}
}
添加声音批注
此示例在页面上放置一个声音批注,并将其关联到 WAV 文件。
- 打开源 PDF Document。
- 创建一个 SoundAnnotation 用于目标音频文件并配置其元数据。
- 将批注添加到页面并保存输出文档。
public static void soundAnnotationAdd(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page = document.getPages().get_Item(1);
Path mediaFile = inputFile.getParent().resolve("file_example_WAV_1MG.wav");
SoundAnnotation soundAnnotation = new SoundAnnotation(
page,
new Rectangle(20, 700, 60, 740, true),
mediaFile.toString());
soundAnnotation.setColor(Color.getBlue());
soundAnnotation.setTitle("John Smith");
soundAnnotation.setSubject("Sound Annotation demo");
soundAnnotation.setPopup(new PopupAnnotation(
page,
new Rectangle(20, 700, 60, 740, true)));
page.getAnnotations().add(soundAnnotation);
document.save(outputFile.toString());
}
}