Skip to content

水印

福昕 PDF SDK 安卓版通过 Core SDK 提供了完整的水印 API,支持创建文本水印、图片水印和页面水印,并将其作为页面内容或注释插入到指定页面。此外还支持平铺水印(Tiled Watermark),可将水印以网格形式铺满整个页面。

核心类

说明
Watermark水印对象,支持文本、Bitmap、Image 和 PDFPage 四种来源
WatermarkSettings水印通用设置:位置、偏移、缩放、旋转、透明度、标志位
WatermarkTextProperties文本水印属性:字体、字号、颜色、样式、行距、对齐方式
TiledWatermarkSettings平铺水印设置:行间距、列间距、旋转、透明度、缩放

创建水印

Watermark 提供了四种构造方式,分别对应不同的水印来源:

java
// 文本水印
Watermark(PDFDoc document, String text, WatermarkTextProperties properties, WatermarkSettings settings)

// Bitmap 水印
Watermark(PDFDoc document, Bitmap bitmap, WatermarkSettings settings)

// Image 水印(支持多帧图片)
Watermark(PDFDoc document, Image image, int frame_index, WatermarkSettings settings)

// 页面水印(以另一个 PDFPage 作为水印内容)
Watermark(PDFDoc document, PDFPage page, WatermarkSettings settings)

标志位常量

常量说明
e_FlagASPageContents0x0000作为页面内容插入
e_FlagASAnnot0x0001作为注释插入
e_FlagOnTop0x0002置于页面内容之上
e_FlagNoPrint0x0004不可打印
e_FlagInvisible0x0008不可见
e_FlagShareImageStream0x0010多页共享图片流
e_FlagShareTextStream0x0020多页共享文本流
e_FlagSharePageStream0x0040多页共享页面流

示例:添加文本水印

java
PDFDoc doc = new PDFDoc(filePath);
doc.load(null);

WatermarkSettings settings = new WatermarkSettings();
settings.setPosition(CommonDefines.e_PosCenter);
settings.setOffset_x(0);
settings.setOffset_y(0);
settings.setFlags(WatermarkSettings.e_FlagASPageContents | WatermarkSettings.e_FlagOnTop);
settings.setScale_x(1.0f);
settings.setScale_y(1.0f);
settings.setRotation(-45.0f);
settings.setOpacity(50);

WatermarkTextProperties textProps = new WatermarkTextProperties();
textProps.setFont(new Font(Font.e_StdIDCourier));
textProps.setFont_size(48.0f);
textProps.setColor(0xFF0000);
textProps.setFont_style(WatermarkTextProperties.e_FontStyleNormal);
textProps.setLine_space(1);
textProps.setAlignment(CommonDefines.e_AlignmentCenter);

Watermark watermark = new Watermark(doc, "CONFIDENTIAL", textProps, settings);
watermark.insertToPage(doc.getPage(0));

doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);

检查与移除水印

java
boolean hasWatermark = page.hasWatermark();
page.removeAllWatermarks();

平铺水印

平铺水印会以网格形式将水印重复铺满页面。通过 PDFDoc.startAddTiledWatermark() 添加,支持文本、图片文件、图片流和 PDFPage 四种来源。

示例:添加文本平铺水印

java
TiledWatermarkSettings tiledSettings = new TiledWatermarkSettings();
tiledSettings.setRow_space(100.0f);
tiledSettings.setCol_space(100.0f);
tiledSettings.setRotation(-45.0f);
tiledSettings.setOpacity(30);
tiledSettings.setScale(100);

WatermarkTextProperties textProps = new WatermarkTextProperties();
textProps.setFont(new Font(Font.e_StdIDCourier));
textProps.setFont_size(24.0f);
textProps.setColor(0xCCCCCC);

Range pageRange = new Range(0, doc.getPageCount() - 1);

Progressive progressive = doc.startAddTiledWatermark(
    "DRAFT", tiledSettings, textProps, pageRange, null);

int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
    state = progressive.resume();
}

doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);

API 参考

WatermarkWatermarkSettingsWatermarkTextPropertiesTiledWatermarkSettings 的完整接口说明请参阅 API 手册