java 添加水印(均亲自测试通过)
前言
本地开发环境:jdk1.8
涉及jar:
1)图片:jdk自带的rt.jar
2)pdf:itextpdf-5.5.9.jar、itext-asian.jar
3)docx、doc、wps:aspectjweaver-1.9.1.jar、aspose-words-14.9.0-jdk16.jar
4)xlsx、xls、et(金山的表格格式):
commons-codec-1.4.jar、
poi-3.14-20160307.jar
poi-examples-3.14-20160307.jar
poi-excelant-3.14-20160307.jar
poi-ooxml-3.14-20160307.jar
poi-ooxml-schemas-3.14-20160307.jar
poi-scratchpad-3.14-20160307.jar
xbean.jar
下载地址:https://pan.baidu.com/s/1iEwcOewDG-vGJLtO1NWMcQ
提取码:7df3
正文
1、给图片、pdf添加水印
package com.xxxxx.waterMark;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
/**
* itextpdf-5.5.9.jar、itext-asian.jar
* @author sunshine
*
*/
public class WaterMarkUtils {
public static String filePath="C:\\Users\\sunshine\\Desktop\\工作\\waterMark\\";
/**
* @param args
* @throws IOException
* @throws DocumentException
*/
public static void main(String[] args) throws DocumentException, IOException {
// 1、给图片添加文字水印
WaterMarkUtils.setWaterMarkToImageByWords("sunshine", WaterMarkWordUtils.filePath+"1.jpg", WaterMarkWordUtils.filePath+"To1.jpg", 45, Color.blue);
//2、PDF添加动态水印
//要输出的pdf文件
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\sunshine\\Desktop\\工作\\waterMark\\To3.pdf")));
// 将pdf文件先加水印然后输出
WaterMarkUtils.setWaterMarkToPdfByWords(bos, "C:\\Users\\sunshine\\Desktop\\工作\\waterMark\\3.pdf", "sunshine");
}
//============================================1、给图片添加文字水印==================================================
/**
* 图片添加文字水印
* @param logoText
* @param srcImgPath
* @param newImagePath
* @param degree
* @param color
*/
public static void setWaterMarkToImageByWords(String logoText, String srcImgPath,String newImagePath,Integer degree,Color color) {
InputStream is = null;
OutputStream os = null;
try {
// 1、源图片
java.awt.Image srcImg = ImageIO.read(new File(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), java.awt.Image.SCALE_SMOOTH), 0, 0, null);
// 4、设置水印旋转
if (null != degree) {
g.rotate(Math.toRadians(degree), buffImg.getWidth()/2,buffImg.getHeight() /2);
}
// 5、设置水印文字颜色
g.setColor(color);
// 6、设置水印文字Font
g.setFont(new java.awt.Font("宋体", java.awt.Font.BOLD, buffImg.getHeight() /2));
// 7、设置水印文字透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.45f));
// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
g.drawString(logoText, buffImg.getWidth()/4 , buffImg.getHeight()/4);
// 9、释放资源
g.dispose();
// 10、图片后缀
String formaName = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1, srcImgPath.length());
// 11、生成图片
os = new FileOutputStream(newImagePath);
ImageIO.write(buffImg, formaName, os);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != is)
is.close();
} catch (Exception e)