java 给图片、pdf、docx、doc、wps、xlsx、xls添加水印(均测试通过)

这篇博客介绍了如何使用Java为图片、PDF、DOCX、DOC、WPS、XLSX和XLS文件添加水印。作者提到了具体使用的库,如iTextPDF和Apache POI,并提供了相关资源的下载链接,所有方法都经过了作者的亲自测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值