在Excel中沒(méi)有直接添加水印的功能,但依舊可以通過(guò)一定方式來(lái)實(shí)現(xiàn)類似水印效果。本文通過(guò)Java程序代碼介紹具體實(shí)現(xiàn)方法??商砑訂我凰⌒Ч此∈且詥蝹€(gè)文本字樣來(lái)呈現(xiàn);也可添加多個(gè)平鋪水印效果,即水印是以多個(gè)文本字樣來(lái)頁(yè)面中平鋪。詳細(xì)內(nèi)容見(jiàn)下文。
程序環(huán)境:
測(cè)試文檔:Office Excel 2013
編譯環(huán)境:IntelliJ IDEA 2018
JDK版本:1.8.0
Excel庫(kù):Java系列free spire.xls.jar 3.9.1
1.單一水印效果
import com.spire.xls.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
public class SingleWatermark {
public static void main(String[] args) {
//加載Excel測(cè)試文檔
Workbook wb = new Workbook();
wb.loadFromFile("test.xlsx");
//設(shè)置文本和字體大小
Font font = new Font("仿宋", Font.PLAIN, 40);
for (int i =0;i<wb.getWorksheets().getCount();i++)
{
Worksheet sheet = wb.getWorksheets().get(i);
//調(diào)用DrawText() 方法插入圖片
BufferedImage imgWtrmrk = drawText("內(nèi)部專用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());
//將圖片設(shè)置為頁(yè)眉
sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);
sheet.getPageSetup().setCenterHeader("&G");
//將顯示模式設(shè)置為L(zhǎng)ayout
sheet.setViewMode(ViewMode.Layout);
}
//保存文檔
wb.saveToFile("SingleWatermark.xlsx", ExcelVersion.Version2013);
}
private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width)
{
//定義圖片寬度和高度
BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);
Graphics2D loGraphic = img.createGraphics();
//獲取文本size
FontMetrics loFontMetrics = loGraphic.getFontMetrics(font);
int liStrWidth = loFontMetrics.stringWidth(text);
int liStrHeight = loFontMetrics.getHeight();
//文本顯示樣式及位置
loGraphic.setColor(backColor);
loGraphic.fillRect(0, 0, (int) width, (int) height);
loGraphic.translate(((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);
loGraphic.rotate(Math.toRadians(-45));
loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2);
loGraphic.setFont(font);
loGraphic.setColor(textColor);
loGraphic.drawString(text, ((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);
loGraphic.dispose();
return img;
}
}
單一水印效果:
2.平鋪水印效果
import com.spire.xls.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
public class TiledWatermark {
public static void main(String[] args) {
//加載Excel測(cè)試文檔
Workbook wb = new Workbook();
wb.loadFromFile("test.xlsx");
//設(shè)置文本和字體大小
Font font = new Font("仿宋", Font.PLAIN, 25);
for (int i =0;i<wb.getWorksheets().getCount();i++)
{
Worksheet sheet = wb.getWorksheets().get(i);
//調(diào)用DrawText() 方法插入圖片
BufferedImage imgWtrmrk = drawText("內(nèi)部專用 內(nèi)部專用 內(nèi)部專用 內(nèi)部專用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());
//將圖片設(shè)置為頁(yè)眉
sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);
sheet.getPageSetup().setCenterHeader("&G");
//將顯示模式設(shè)置為L(zhǎng)ayout
sheet.setViewMode(ViewMode.Layout);
}
//保存文檔
wb.saveToFile("TiledWatermark.xlsx", ExcelVersion.Version2013);
}
private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width)
{
//定義圖片寬度和高度
BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);
Graphics2D loGraphic = img.createGraphics();
//獲取文本size
FontMetrics loFontMetrics = loGraphic.getFontMetrics(font);
int liStrWidth = loFontMetrics.stringWidth(text);
int liStrHeight = loFontMetrics.getHeight();
//文本顯示樣式及位置
loGraphic.setColor(backColor);
loGraphic.fillRect(0, 0, (int) width, (int) height);
loGraphic.translate(((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);
//loGraphic.rotate(Math.toRadians(-45));
loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2);
loGraphic.setFont(font);
loGraphic.setColor(textColor);
loGraphic.drawString(text, ((int) width - liStrWidth) /6 , ((int) height - liStrHeight) /6);
loGraphic.drawString(text,((int) width - liStrWidth) /3, ((int) height - liStrHeight) /3);
loGraphic.drawString(text,((int) width - liStrWidth) /2, ((int) height - liStrHeight) /2);
loGraphic.dispose();
return img;
}
}
平鋪水印效果:
★ 需要注意的是:在添加完水印效果后,查看文檔時(shí),在“普通視圖”水印不可見(jiàn),需在“頁(yè)面布局”模式或“打印預(yù)覽”模式下查看。
以上就是關(guān)于如何使用Java實(shí)現(xiàn)在Excel文件中添加單一水印和平鋪水印的詳細(xì)內(nèi)容,想要了解更多關(guān)于Java的內(nèi)容,請(qǐng)多多關(guān)注W3Cschool相關(guān)文章。