<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.16</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
package test03;
import java.awt.*;
import java.awt.image.BufferedImage;
public class FontImage {
public static BufferedImage createWatermarkImage(String text, String dateFormat, String color) {
String[] textArray = text.split(",");
Font font = new Font("microsoft-yahei", Font.PLAIN, 20);
int width = 600;
int height = 200;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
image = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g.dispose();
g = image.createGraphics();
g.setColor(new Color(Integer.parseInt(color.substring(1), 16)));
g.setFont(font);
g.shear(0.1, -0.26);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int y = 100;
for (String s : textArray) {
g.drawString(s, 0, y);
y = y + font.getSize();
}
g.dispose();
return image;
}
}
package test03;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.imageio.ImageIO;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class WatermarkTest {
public static void main(String[] args) {
try {
String path = "D:\\1.xlsx";
String path2 = "D:\\2.xlsx";
FileInputStream fis = new FileInputStream(new File(path));
FileOutputStream out = new FileOutputStream(path2);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheetAt(0);
BufferedImage image = FontImage.createWatermarkImage("测试水印","yyyy-MM-dd","#C5CBCF");
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
int pictureIdx = workbook.addPicture(os.toByteArray(), Workbook.PICTURE_TYPE_PNG);
String rID = sheet.addRelation(null, XSSFRelation.IMAGES, workbook.getAllPictures().get(pictureIdx)).getRelationship().getId();
sheet.getCTWorksheet().addNewPicture().setId(rID);
fis.close();
workbook.write(out);
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}