Java實現(xiàn)Excel導(dǎo)出并添加水印
之前的代碼是通過poi包導(dǎo)出xls文件,在poi相關(guān)類里面操作水印,嘗試了好幾次都沒有成功。后來換成poi-ooxml包導(dǎo)出xlsx添加水印成功。下面是導(dǎo)出xlsx添加水印的相關(guān)代碼。
1、添加相關(guān)依賴
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.22</version>
</dependency>
<!-- Apache POI for Excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- Apache POI dependencies -->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>5.1.1</version>
</dependency>2、生成水印代碼
public static ByteArrayOutputStream createWaterMark(String content)
throws IOException {
// 這是水印字體的寬和高,可以調(diào)整這個大小來控制
int width = 200;
int height = 150;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);// 獲取bufferedImage對象
String fontType = "微軟雅黑";
int fontStyle = Font.BOLD;
// 這是水印顯示字體的大小
int fontSize = 20;
Font font = new Font(fontType, fontStyle, fontSize);
Graphics2D g2d = image.createGraphics(); // 獲取Graphics2d對象
image = g2d.getDeviceConfiguration().createCompatibleImage(width,
height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = image.createGraphics();
g2d.setColor(new Color(0, 0, 0, 20)); // 設(shè)置字體顏色和透明度,最后一個參數(shù)為透明度
g2d.setStroke(new BasicStroke(1)); // 設(shè)置字體
g2d.setFont(font); // 設(shè)置字體類型 加粗 大小
g2d.rotate(-0.5, (double) image.getWidth() / 2,
(double) image.getHeight() / 2);// 設(shè)置傾斜度
FontRenderContext context = g2d.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(content, context);
double x = (width - bounds.getWidth()) / 2;
double y = (height - bounds.getHeight()) / 2;
double ascent = -bounds.getY();
double baseY = y + ascent;
// 寫入水印文字原定高度過小,所以累計寫水印,增加高度
g2d.drawString(content, (int) x, (int) baseY);
// 設(shè)置透明度
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
// 釋放對象
g2d.dispose();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
return os;
}目前生成圖片的效果圖如下,如果像調(diào)整誰
3、excel調(diào)用水印代碼
public static void main(String[] args) throws IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
ByteArrayOutputStream byteArrayOutputStream = createWaterMark("水印內(nèi)容");
int pictureIdx = workbook.addPicture(byteArrayOutputStream.toByteArray()
,Workbook.PICTURE_TYPE_PNG);
String rID = sheet.addRelation(null, XSSFRelation.IMAGES,workbook
.getAllPictures().get(pictureIdx)).getRelationship().getId();
sheet.getCTWorksheet().addNewPicture().setId(rID);
// 創(chuàng)建一個行對象
XSSFRow row = sheet.createRow(0); // 第一行
// 在行中創(chuàng)建單元格并設(shè)置值
XSSFCell cell = row.createCell(0); // 第一列
cell.setCellValue("Hello, Excel!");
// 寫入到文件系統(tǒng)
try (FileOutputStream outputStream = new FileOutputStream("Example.xlsx")) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4、輸出效果

到此這篇關(guān)于Java實現(xiàn)Excel導(dǎo)出并添加水印的文章就介紹到這了,更多相關(guān)Java Excel導(dǎo)出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java selenium教程之selenium詳細(xì)介紹
本文主要介紹Java selenium,這里整理了selenium的一些基本資料,此軟件主要用于Web UI自動測試框架,有興趣的同學(xué)可以看一下2016-08-08
Java線程池的幾種實現(xiàn)方法和區(qū)別介紹實例詳解
本篇文章主要介紹了Java線程池的幾種實現(xiàn)方法和區(qū)別,需要的朋友可以參考2017-04-04
Java報錯java.awt.AWTException: AWT的解決方法
在Java圖形用戶界面(GUI)編程中,java.awt.AWTException是一個常見的異常,它通常與AWT(Abstract Window Toolkit)組件相關(guān),這個異??赡茉趪L試進(jìn)行與窗口、圖形環(huán)境或系統(tǒng)剪貼板等操作時拋出,本文將詳細(xì)探討AWTException的成因,并提供多種解決方案2024-12-12
基于SpringBoot和Hutool工具包實現(xiàn)驗證碼的案例
隨著安全性的要求越來越高,目前項目中很多都會使用驗證碼,只要涉及到登錄,絕大多數(shù)都會有驗證的要求,驗證碼的形式也是多種多樣,更復(fù)雜的圖形驗證碼和行為驗證碼已經(jīng)成為了更流行的趨勢,本文給大家介紹了SpringBoot Hutool實現(xiàn)驗證碼的案例,需要的朋友可以參考下2024-05-05
Java中String類(StringBuffer、StringBuilder)相關(guān)(最新推薦)
Java中的String類是不可變的,存儲在字符串常量池中,提供了多種方法用于操作字符串,為了提高效率,可以使用StringBuilder或StringBuffer,本文介紹Java中String類(StringBuffer、StringBuilder)相關(guān)知識,感興趣的朋友跟隨小編一起看看吧2026-01-01

