java excel 水印_Java下载文件加文字水印(Excel、PDF、图片)

本文介绍了如何使用Java为Excel、PDF、图片和Word文件添加水印。对于Excel,通过覆盖模板文件实现;PDF水印借助iText库;图片水印利用Graphics2D;Word水印则使用Spire.Doc for Java工具。详细步骤包括引入依赖、关键代码示例和实际操作方法。
摘要由CSDN通过智能技术生成

一、导出Excel加文字水印

方法:通过实现准备一个带有水印的Excel文件,然后将数据覆盖该文件然后输出。

比如我准备了如下的一个带水印的模板,我起名为water.xlsx(网上有如何给Excel加水印)

3b33a9b3bbde9ea3399434e25033a4df.png

我是在原有导出的方法上进行改造,原方法使用的正是POI。

1、改造创建工作簿的方法

this.wb指的就是Workbook类。

/*** 创建一个工作簿*/

public void createWorkbook() throwsException {//获取有水印的excel模板文件

File finalXlsxFile = new File("src/main/resources/static/water.xlsx");//获取excel文件流

FileInputStream inputStream = newFileInputStream(finalXlsxFile);this.wb = newXSSFWorkbook(inputStream);

}

2、改造创建工作表的方法

this.sheet指的就是Sheet类。

//原来创建空的Sheet为方法://this.sheet = wb.createSheet();//现在改为:

this.sheet = wb.getSheetAt(0);

通过以上改造就可导出带有水印的Excel。

二、下载PDF加入文字水印

方法:itext提供了添加水印的方法。

1、首先加入依赖

com.itextpdf

itextpdf

5.2.0

com.itextpdf

itext-asian

5.2.0

2、加入以下代码

/*** 设置文字水印

*

*@paramos 输出流

*@paramsrcFile 源文件

*@paramwaterMarkName 水印文字

*@throwsDocumentException

*@throwsIOException*/

public static void setWordMark(OutputStream os, String srcFile, String waterMarkName) throwsDocumentException, IOException {//如果你想直接输出到某个路径,将os参数改为descFile(具体输出路径)//BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(descFile)));

PdfReader reader= newPdfReader(srcFile);

PdfStamper stamper= newPdfStamper(reader, os);int total = reader.getNumberOfPages() + 1;

PdfContentByte content;

BaseFont base= BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);

PdfGState gs= newPdfGState();for (int i = 1; i < total; i++) {

content= stamper.getOverContent(i); //在内容上方加水印//content = stamper.getUnderContent(i);//在内容下方加水印

gs.setFillOpacity(0.2f); //透明度

content.setGState(gs);

content.beginText();

content.setColorFill(BaseColor.BLACK);

content.setFontAndSize(base,50);

content.setTextMatrix(70, 200);

content.showTextAligned(Element.ALIGN_CENTER, waterMarkName,300, 350, 55);

content.endText();

}

stamper.close();

}

3、直接使用

你下载请求Controller的时候,直接使用,例如:

这里的downloadPath指的是要下载的文件路径,"奥里给"为水印文字。

PDFUtils.setWordMark(response.getOutputStream(), downloadPath, "奥里给");

三、下载图片加文字水印

方法:使用Graphics2D在图片上直接绘画出水印。

1、直接复制以下代码

注意我这里也是用输出流作为参数。

/*** 图片水印处理*/

public classImageUtils {//水印透明度

private static float alpha = 0.5f;//水印横向位置

private static int positionWidth = 150;//水印纵向位置

private static int positionHeight = 300;//水印文字字体

private static Font font = new Font("宋体", Font.BOLD, 72);//水印文字颜色

private static Color color =Color.red;/*** 给图片添加水印文字、可设置水印文字的旋转角度

*

*@paramlogoText 水印文字

*@paramsrcImgPath 源文件路径

*@paramos 输出流

*@paramdegree 设置角度*/

public static voidmarkImageByText(String logoText, String srcImgPath,

OutputStream os, Integer degree) {

InputStream is= null;try{//1、源图片

Image srcImg = ImageIO.read(newFile(srcImgPath));

BufferedImage buffImg= new BufferedImage(srcImg.getWidth(null),

srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);//2、得到画笔对象

Graphics2D g =buffImg.createGraphics();//3、设置对线段的锯齿状边缘处理

g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,

RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g.drawImage(

srcImg.getScaledInstance(srcImg.getWidth(null),

srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,null);//4、设置水印旋转

if (null !=degree) {

g.rotate(Math.toRadians(degree),

(double) buffImg.getWidth() / 2,

(double) buffImg.getHeight() / 2);

}//5、设置水印文字颜色

g.setColor(color);//6、设置水印文字Font

g.setFont(font);//7、设置水印文字透明度

g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,

alpha));//8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)

g.drawString(logoText, positionWidth, positionHeight);//9、释放资源

g.dispose();//10、生成图片

ImageIO.write(buffImg, "JPG", os);

System.out.println("图片完成添加水印文字");

}catch(Exception e) {

e.printStackTrace();

}finally{try{if (null !=is)

is.close();

}catch(Exception e) {

e.printStackTrace();

}try{if (null !=os)

os.close();

}catch(Exception e) {

e.printStackTrace();

}

}

}

}

2、直接调用

“奥里给”为水印文字,downloadPath为 源文件地址,最后一个参数应该是设置角度的,我这里设置为null。

ImageUtils.markImageByText("奥里给", downloadPath, response.getOutputStream(), null);

四、Word加水印

方法:使用工具Spire.Doc for Java(免费版),文档开头会有工具自带的文字水印,付费可以去。

1、在pom.xml文件中配置Maven仓库路径

com.e-iceblue

http://repo.e-iceblue.cn/repository/maven-public/

2、添加依赖

e-iceblue

spire.doc

3.7.2

3、使用示例

import com.spire.doc.*;importcom.spire.doc.documents.WatermarkLayout;import java.awt.*;public classMain {public static voidmain(String[] args) {//加载测试文档

Document document = newDocument();

document.loadFromFile("sample.docx");//插入文本水印

InsertTextWatermark(document.getSections().get(0));//保存文档

document.saveToFile("textwatermark.docx",FileFormat.Docx );

}//自定义方法指定文本水印字样,并设置成水印

private static voidInsertTextWatermark(Section section){

TextWatermark txtWatermark= newTextWatermark();

txtWatermark.setText("内部使用");

txtWatermark.setFontSize(40);

txtWatermark.setColor(Color.red);

txtWatermark.setLayout(WatermarkLayout.Diagonal);

section.getDocument().setWatermark(txtWatermark);

}

}

如果有其他需求的请参考我放的链接,感谢原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值