在 Java 中向演示文稿添加水印
关于水印
水印 在演示文稿中是用于幻灯片或整个演示文稿的文本或图像标记。通常,水印用于表明演示文稿是草稿(例如 “Draft” 水印),包含机密信息(例如 “Confidential” 水印),标明所属公司(例如 “Company Name” 水印),识别演示文稿作者等。水印通过指示演示文稿不应被复制,帮助防止版权侵犯。水印可用于 PowerPoint 和 OpenOffice 演示文稿格式。在 Aspose.Slides 中,您可以向 PowerPoint PPT、PPTX 和 OpenOffice ODP 文件格式添加水印。
在 Aspose.Slides 中,有多种方式可以在 PowerPoint 或 OpenOffice 文档中创建水印并修改其设计和行为。共同点是,要添加文本水印,应使用 ITextFrame 接口;要添加图像水印,则使用 PictureFrame 类或用图像填充水印形状。PictureFrame 实现了 IShape 接口,允许您使用形状对象的所有灵活设置。由于 ITextFrame 不是形状且设置受限,它被包装为一个 IShape 对象。
水印的应用方式有两种:对单个幻灯片或对所有幻灯片。使用幻灯片母版(Slide Master)可将水印应用于所有幻灯片——水印被添加到幻灯片母版,在母版上完成全部设计,并自动应用到所有幻灯片,而不会影响对单个幻灯片上水印的修改权限。
水印通常被视为不允许其他用户编辑。为防止水印(或更确切地说其父形状)被编辑,Aspose.Slides 提供了形状锁定功能。可以在普通幻灯片或幻灯片母版上锁定特定形状。当在幻灯片母版上锁定水印形状时,它将在所有演示文稿幻灯片上被锁定。
您可以为水印设置名称,以便将来想要删除时,可通过名称在幻灯片的形状集合中找到它。
水印的设计方式多种多样;然而,水印通常具有一些共通特征,如居中对齐、旋转、置于前面等。下面的示例将说明如何在实际代码中使用这些特性。
文本水印
向幻灯片添加文本水印
要在 PPT、PPTX 或 ODP 中添加文本水印,首先在幻灯片上添加一个形状,然后向该形状添加文本框。文本框由 ITextFrame 接口表示。该类型未继承自 IShape,后者拥有丰富的属性,可灵活定位水印。因此,ITextFrame 对象被包装在 IAutoShape 对象中。要向形状添加水印文本,使用下面示例中的 addTextFrame 方法。
String watermarkText = "CONFIDENTIAL";
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
IAutoShape watermarkShape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 40);
ITextFrame watermarkFrame = watermarkShape.addTextFrame(watermarkText);
presentation.dispose();
向整个演示文稿添加文本水印
如果希望一次性为整个演示文稿(即所有幻灯片)添加文本水印,请将其添加到 MasterSlide。其余逻辑与向单个幻灯片添加水印相同——创建一个 IAutoShape 对象,然后使用 addTextFrame 方法将水印添加进去。
String watermarkText = "CONFIDENTIAL";
Presentation presentation = new Presentation();
IMasterSlide masterSlide = presentation.getMasters().get_Item(0);
IAutoShape watermarkShape = masterSlide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 40);
ITextFrame watermarkFrame = watermarkShape.addTextFrame(watermarkText);
presentation.dispose();
另见
设置水印形状透明度
默认情况下,矩形形状带有填充颜色和线条颜色。下面的代码行将形状设为透明。
watermarkShape.getFillFormat().setFillType(FillType.NoFill);
watermarkShape.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
为文本水印设置字体
您可以按下面示例更改文本水印的字体。
IPortionFormat textFormat = watermarkFrame.getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat();
textFormat.setLatinFont(new FontData("Arial"));
textFormat.setFontHeight(50);
设置水印文本颜色
要设置水印文本的颜色,请使用以下代码:
int alpha = 150, red = 200, green = 200, blue = 200;
IFillFormat fillFormat = watermarkFrame.getParagraphs().get_Item(0).getParagraphFormat().getDefaultPortionFormat().getFillFormat();
fillFormat.setFillType(FillType.Solid);
fillFormat.getSolidFillColor().setColor(new Color(red, green, blue, alpha));
居中文本水印
可以将水印居中显示在幻灯片上,方法如下:
Dimension2D slideSize = presentation.getSlideSize().getSize();
float watermarkWidth = 400;
float watermarkHeight = 40;
float watermarkX = ((float)slideSize.getWidth() - watermarkWidth) / 2;
float watermarkY = ((float)slideSize.getHeight() - watermarkHeight) / 2;
IAutoShape watermarkShape = slide.getShapes().addAutoShape(
ShapeType.Rectangle, watermarkX, watermarkY, watermarkWidth, watermarkHeight);
ITextFrame watermarkFrame = watermarkShape.addTextFrame(watermarkText);
下图展示了最终效果。

图像水印
向演示文稿添加图像水印
要向演示文稿幻灯片添加图像水印,可按以下步骤操作:
InputStream imageStream = new FileInputStream("watermark.png");
IPPImage image = presentation.getImages().addImage(imageStream);
watermarkShape.getFillFormat().setFillType(FillType.Picture);
watermarkShape.getFillFormat().getPictureFillFormat().getPicture().setImage(image);
watermarkShape.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
锁定水印防止编辑
如果需要防止水印被编辑,请在形状上使用 IAutoShape.getAutoShapeLock 方法。通过此属性,您可以保护形状不被选中、调整大小、重新定位、与其他元素组合、锁定其文本编辑等:
// 锁定水印形状,防止修改
watermarkShape.getAutoShapeLock().setSelectLocked(true);
watermarkShape.getAutoShapeLock().setSizeLocked(true);
watermarkShape.getAutoShapeLock().setTextLocked(true);
watermarkShape.getAutoShapeLock().setPositionLocked(true);
watermarkShape.getAutoShapeLock().setGroupingLocked(true);
将水印置于前面
在 Aspose.Slides 中,可通过 IShapeCollection.reorder 方法设置形状的 Z 顺序。需要从演示文稿的幻灯片列表调用此方法,并传入形状引用及其顺序号。这样即可将形状置于前面或置于后面。当需要将水印放在演示文稿前方时,此功能尤为实用:
int shapeCount = slide.getShapes().size();
slide.getShapes().reorder(shapeCount - 1, watermarkShape);
设置水印旋转角度
以下代码示例演示如何调整水印的旋转角度,使其斜向跨越幻灯片:
double diagonalAngle = Math.atan((slideSize.getHeight() / slideSize.getWidth())) * 180 / Math.PI;
watermarkShape.setRotation((float)diagonalAngle);
为水印设置名称
Aspose.Slides 允许为形状设置名称。使用形状名称,您以后可以通过名称访问并修改或删除它。要为水印形状设置名称,请调用 IAutoShape.setName 方法:
watermarkShape.setName("watermark");
删除水印
要删除水印形状,先使用 IAutoShape.getName 方法在幻灯片形状集合中找到它,然后将该形状传入 IShapeCollection.remove 方法:
IShape[] slideShapes = slide.getShapes().toArray();
for (IShape shape : slideShapes) {
if ("watermark".equals(shape.getName()))
{
slide.getShapes().remove(watermarkShape);
}
}
常见问题
什么是水印,为什么要使用它?
水印是覆盖在幻灯片上的文本或图像,用于保护知识产权、提升品牌识别度或防止演示文稿被未经授权使用。
我可以为演示文稿的所有幻灯片添加水印吗?
可以,Aspose.Slides 允许您以编程方式为演示文稿中的每一张幻灯片添加水印。您可以遍历所有幻灯片并分别应用水印设置。
如何调节水印的透明度?
可以通过修改形状的填充设置(getFillFormat)来调整水印的透明度,从而使水印保持柔和、不会分散幻灯片内容的注意力。
支持哪些图像格式作为水印?
Aspose.Slides 支持多种图像格式,例如 PNG、JPEG、GIF、BMP、SVG 等。
我可以自定义文本水印的字体和样式吗?
可以,您可以选择任意字体、大小和样式,以符合演示文稿的设计风格并保持品牌一致性。
如何更改水印的位置或方向?
可以通过编程方式修改形状的坐标、尺寸以及旋转属性,以调整水印的位置和方向。