基于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();
相关推荐
怡人蝶梦1 小时前
Java后端技术栈问题排查实战:Spring Boot启动慢、Redis缓存击穿与Kafka消费堆积
java·jvm·redis·kafka·springboot·prometheus
瓯雅爱分享1 小时前
MES管理系统:Java+Vue,含源码与文档,实现生产过程实时监控、调度与优化,提升制造企业效能
java·mysql·vue·软件工程·源代码管理
纪元A梦2 小时前
Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!
pdf·办公软件·windows软件·acrobat pro dc·pdf软件·acrobat 底层
江湖有缘2 小时前
【Docker项目实战篇】Docker部署PDF查看器PdfDing
docker·eureka·pdf
鬼多不菜2 小时前
一篇学习CSS的笔记
java·前端·css
深色風信子2 小时前
Eclipse 插件开发 5.3 编辑器 监听输入
java·eclipse·编辑器·编辑器 监听输入·插件 监听输入
Blossom.1183 小时前
人工智能在智能健康监测中的创新应用与未来趋势
java·人工智能·深度学习·机器学习·语音识别
shangjg33 小时前
Kafka 如何保证不重复消费
java·分布式·后端·kafka
无处不在的海贼3 小时前
小明的Java面试奇遇之互联网保险系统架构与性能优化
java·面试·架构