基于Aspose依赖添加自定义文本水印——Word、Pdf、Cell

基于Aspose依赖添加自定义文本水印------Word、Pdf、Cell

  • 所需依赖
  • Word水印
  • [Pdf水印------( 注意 pdf 存在找不到字体的问题)](#Pdf水印——( 注意 pdf 存在找不到字体的问题))
  • Excel水印

所需依赖

复制代码
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-pdf</artifactId>
        <version>22.11</version>
    </dependency>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-cells</artifactId>
        <version>22.12</version>
    </dependency>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-slides</artifactId>
        <version>22.11</version>
        <classifier>jdk16</classifier>
    </dependency>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-words</artifactId>
        <version>22.12</version>
        <classifier>jdk17</classifier>
    </dependency>

Word水印

java 复制代码
// 先获取文件流 (这边先随意读取文件流)
InputStream in =  new FileInputStream("E:/demo/demo.docx");
// 注意document包,每种类型都有一个document
com.aspose.words.Document doc = new com.aspose.words.Document(in);
TextWatermarkOptions textWatermarkOptions = new TextWatermarkOptions();
textWatermarkOptions.setFontFamily("宋体");
textWatermarkOptions.setFontSize(24f);
textWatermarkOptions.setColor(java.awt.Color.RED);
textWatermarkOptions.setLayout(WatermarkLayout.DIAGONAL);
textWatermarkOptions.isSemitrasparent(false);
doc.getWatermark().setText("水印内容",textWatermarkOptions);
ByteArrayOutputStream out = new ByteArrayOutputStream();
doc.save(out, com.aspose.words.SaveFormat.DOCX);
out.close();
// 输出流用于下载
return out.toByteArray();

Pdf水印------( 注意 pdf 存在找不到字体的问题)

java 复制代码
// 先获取文件流 (这边先随意读取文件流)
InputStream in =  new FileInputStream("E:/demo/demo.pdf");
// 注意document包,每种类型都有一个document
com.aspose.pdf.Document doc = new com.aspose.pdf.Document(in);
FormattedText formattedText = new FormattedText("水印内容", java.awt.Color.RED, FontStyle.HelveticaBold, EncodingType.Identity_h, true, 24f);
for (Page page : doc.getPages()) {
   WatermarkArtifact artifact = new WatermarkArtifact();
   artifact.setText(formattedText);
   artifact.getTextState().setFont(FontRepository.findFont(getFontName("宋体"),true));
   artifact.setArtifactHorizontalAlignment(HorizontalAlignment.Center);
   artifact.setArtifactVerticalAlignment(VerticalAlignment.Center);
   artifact.setRotation(45); // 设置旋转角度
   artifact.setOpacity(0.9); // 设置透明度
   artifact.setBackground (true);
   page.getArtifacts().add(artifact);
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
doc.save(out, com.aspose.pdf.SaveFormat.Pdf);
out.close();
return out.toByteArray();

// 注意 pdf 存在找不到字体的问题 因为字体库是以文件名查找 而不是字体名
private static String getFontName(String font){
    switch (font.trim().toLowerCase()){
        case "宋体":
            return "simsun";
        case "微软雅黑":
            return "simhei";
        default:
            return font;
    }
}

Excel水印

java 复制代码
// 先获取文件流 (这边先随意读取文件流)
InputStream in =  new FileInputStream("E:/demo/demo.xls");
// 注意document包,每种类型都有一个document
Workbook workbook = new Workbook(in);
for(Object worksheet: workbook.getWorksheets()){
	Worksheet sheet = (Worksheet) worksheet;
	int coloums = sheet.getCells().getColumns().getCount();
	int rows = sheet.getCells().getRows().getCount();
	com.aspose.cells.Shape wordart = sheet.getShapes().addTextEffect(MsoPresetTextEffect.TEXT_EFFECT_1,"水印内容",
                        "宋体",24f,true,false,
                        rows,rows/2,coloums/2,0,100,800);
	MsoFillFormat wordArtFormat = wordart.getFillFormat();
	wordArtFormat.setTransparency(0.9);
	int r= java.awt.Color.getRed();
	int g= java.awt.Color.getGreen();
	int b= java.awt.Color.getBlue();
	wordArtFormat.setForeColor(com.aspose.cells.Color.fromArgb(r,g,b));
	wordart.setHasLine(false);
	wordart.setLocked(true);
	wordart.setLockedProperty(ShapeLockType.SELECTION, true);
	wordart.setLockedProperty(ShapeLockType.SHAPE_TYPE, true);
	wordart.setLockedProperty(ShapeLockType.MOVE, true);
	wordart.setLockedProperty(ShapeLockType.RESIZE, true);
	wordart.setLockedProperty(ShapeLockType.TEXT, true);
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
workbook.save(out, com.aspose.cells.SaveFormat.XLSX);
out.close();
return out.toByteArray();
相关推荐
我命由我123456 小时前
Android Studio - Android Studio 自定义预览尺寸
android·java·ide·java-ee·android studio·android-studio·android runtime
咖啡八杯7 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
AIGS0017 小时前
企业AI落地的关键认知:向量空间JBoltAI的本体语义平台
java·人工智能·人工智能ai大模型应用
KaMeidebaby8 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
醉城夜风~9 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
_清风来叙10 小时前
【软件】Word软件不支持显示emoji表情包如何解决
电脑·word
数智化转型推荐官11 小时前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互11 小时前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
大飞记Python12 小时前
Linux命令速查手册(测试开发4年实战总结,附PDF)
linux·网络·pdf
程序员张312 小时前
SpringBoot集成BCrypt密码加密库
java·spring boot·后端