水印
福昕 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_FlagASPageContents | 0x0000 | 作为页面内容插入 |
e_FlagASAnnot | 0x0001 | 作为注释插入 |
e_FlagOnTop | 0x0002 | 置于页面内容之上 |
e_FlagNoPrint | 0x0004 | 不可打印 |
e_FlagInvisible | 0x0008 | 不可见 |
e_FlagShareImageStream | 0x0010 | 多页共享图片流 |
e_FlagShareTextStream | 0x0020 | 多页共享文本流 |
e_FlagSharePageStream | 0x0040 | 多页共享页面流 |
示例:添加文本水印
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 参考
Watermark、WatermarkSettings、WatermarkTextProperties、TiledWatermarkSettings 的完整接口说明请参阅 API 手册。