基于Aspose依赖添加自定义文本水印——Word、Pdf、Cell
- 所需依赖
- Word水印
- 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水印
InputStream in = new FileInputStream("E:/demo/demo.docx");
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 存在找不到字体的问题)
InputStream in = new FileInputStream("E:/demo/demo.pdf");
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();
private static String getFontName(String font){
switch (font.trim().toLowerCase()){
case "宋体":
return "simsun";
case "微软雅黑":
return "simhei";
default:
return font;
}
}
Excel水印
InputStream in = new FileInputStream("E:/demo/demo.xls");
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();