java实现word,pdf,excel,图片添加水印

gitee项目地址:https://gitee.com/betelnutandwine/meutilswatermark: java实现pdf,word,excel,ppt,图片加水印

jar地址:spire.office.free-5.3.1.jar-Java文档类资源-CSDN下载

spire.office.free官方地址:Spire.Office for Java | 专业的 Java Office 套件 | 创建、修改、转换、打印 Word/PowerPoint/PDF 文档

说明:

基于spire.office.free-5.3.1.jar实现的.

由于是免费版,会有一些官方的水印,ppt,pdf加水印限制为10页

excel的水印在打印的时候再能看到,或者点击页面布局打印预览也可看到

图片加水印不需要spire.office.free-5.3.1.jar支持

gitee上的项目不是maven,可能需要手动导下包

word,pdf,excel,ppt加水印工具类

package com.bingjiu.utils;

import com.spire.doc.*;
import com.spire.doc.FileFormat;
import com.spire.doc.documents.WatermarkLayout;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
import com.spire.presentation.IAutoShape;
import com.spire.presentation.PortionEx;
import com.spire.presentation.Presentation;
import com.spire.presentation.ShapeType;
import com.spire.presentation.drawing.FillFormatType;
import com.spire.xls.ExcelVersion;
import com.spire.xls.ViewMode;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;


import static java.awt.image.BufferedImage.TYPE_INT_ARGB;

/**
 * doc,docx,pdf,ppt 附件加水印
 * 免费版有水印且pdf,ppt只能处理10页
 * @author : Xiewy <br/>
 * @date : 2022/8/16 15:54 <br/>
 */
public class SpireWaterMarkUtils {
    public static void main(String[] args) throws Exception {
        //word加水印
//        wordWatermark("C:\\Users\\BetelNutsAndWine\\Desktop\\文档.docx", "C:\\Users\\BetelNutsAndWine\\Desktop\\文档222.docx", "槟榔与酒的醉人故事");
        //xls加水印
//        setExcelWaterMark("C:\\Users\\BetelNutsAndWine\\Desktop\\exxcel.xlsx", "C:\\Users\\BetelNutsAndWine\\Desktop\\4444.xlsx", "槟榔与酒的醉人故事");
        //ppt加水印
//        setPPTWaterMark("C:\\Users\\BetelNutsAndWine\\Desktop\\与爱同行.pptx", "C:\\Users\\BetelNutsAndWine\\Desktop\\ppt222.pptx", "槟榔与酒的醉人故事");
        //pdf
        setPdfWaterMark("C:\\Users\\BetelNutsAndWine\\Desktop\\pdf4.pdf","C:\\Users\\BetelNutsAndWine\\Desktop\\git444.pdf","槟榔与酒的醉人故事");
    }

    public static final String FOND_ST = "宋体";

    //--word 加水印start-----------------------------------------------------------------------------------------
    /**
     * Word添加文本水印
     * @param originalFilePath 待加水印word的路径 例如:C:\Desktop\textWatermark.docx
     * @param newFilePath 水印word的文件存储路径  例如:C:\Desktop\watermark2.docx
     * @param txtWatermark 文本水印类
     */
    public static Boolean wordWatermark(String originalFilePath, String newFilePath, TextWatermark txtWatermark){
        boolean temp;
        if (txtWatermark == null){
            SpireWaterMarkUtils.getTextWatermark("水印");
        }
        try {
            //加载文档
            Document document = new Document();
            document.loadFromFile(originalFilePath);
            //插入文本水印
            Section section = document.getSections().get(0);
            section.getDocument().setWatermark(txtWatermark);
            //保存水印文档
            document.saveToFile(newFilePath, FileFormat.Docx);
            temp  = true;
        } catch (Exception e) {
            temp  = false;
            e.printStackTrace();
        }
        return temp;
    }
    /**
     * Word添加文本水印
     * @param originalFilePath 待加水印word的路径 例如:C:\Desktop\textWatermark.docx
     * @param newFilePath 水印word的文件存储路径  例如:C:\Desktop\watermark2.docx
     * @param watermarkText 水印内容
     */
    public static Boolean wordWatermark(String originalFilePath, String newFilePath, String watermarkText){
        boolean temp;
        TextWatermark textWatermark = getTextWatermark(watermarkText);
        try {
            //加载文档
            Document document = new Document();
            document.loadFromFile(originalFilePath);
            //插入文本水印
            Section section = document.getSections().get(0);
            section.getDocument().setWatermark(textWatermark);
            //保存水印文档
            document.saveToFile(newFilePath, FileFormat.Docx);
            temp  = true;
        } catch (Exception e) {
            temp  = false;
            e.printStackTrace();
        }
        return temp;
    }

    /**
     * 获取文本水印默认类-word
     * @param watermarkText 水印内容
     * @return TextWatermark
     */
    public static TextWatermark getTextWatermark(String watermarkText){
        TextWatermark txtWatermark = new TextWatermark();
        txtWatermark.setText(watermarkText);
        txtWatermark.setFontSize(25);
        txtWatermark.setColor(Color.red);
        txtWatermark.setLayout(WatermarkLayout.Diagonal);
        return txtWatermark;
    }

    /**
     * 自定义文本水印类-word
     * @param watermarkText 水印内容
     * @param fontSize 字体大小
     * @param color 字体颜色
     * @return TextWatermark
     */
    public static TextWatermark getTextWatermark(String watermarkText,int fontSize,Color color){
        TextWatermark txtWatermark = new TextWatermark();
        txtWatermark.setText(watermarkText);
        txtWatermark.setFontSize(fontSize);
        txtWatermark.setColor(color);
        txtWatermark.setLayout(WatermarkLayout.Diagonal);
        return txtWatermark;
    }

    //--word 加水印end-----------------------------------------------------------------------------------------


    //--excel 加水印start-----------------------------------------------------------------------------------------
    /**
     * excel设置水印
     * Excel 水印在正常模式下不可见,仅在页面布局模式或打印预览模式可见。
     *
     * @param inputPath
     * @param outPath
     * @param markStr
     */
    public static void setExcelWaterMark(String inputPath, String outPath, String markStr) {
        //加载示例文档
        Workbook workbook = new Workbook();
        workbook.loadFromFile(inputPath);
        //设置文本和字体大小
        Font font = new Font(FOND_ST, Font.PLAIN, 30);
        for (Object object : workbook.getWorksheets()) {
            Worksheet sheet = (Worksheet) object;
            //调用DrawText() 方法插入图片
            BufferedImage imgWtrmrk = drawText(markStr, font, Color.RED, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());

            //将图片设置为页眉
            sheet.getPageSetup().setLeftHeaderImage(imgWtrmrk);
            sheet.getPageSetup().setLeftHeader("&G");

            //将显示模式设置为Layout
            sheet.setViewMode(ViewMode.Normal);
        }
        //保存文档
        if (inputPath.substring(inputPath.lastIndexOf(".") + 1, inputPath.length()).equalsIgnoreCase("xls")) {
            workbook.saveToFile(outPath, ExcelVersion.Version97to2003);
        } else {
            workbook.saveToFile(outPath, ExcelVersion.Version2010);
        }
    }

    /**
     * excel- 生成水印图片
     * @param text 水印内容
     * @param font 字体
     * @param textColor 水印内容颜色
     * @param backColor 水印背景颜色
     * @param height 图片高度
     * @param width 图片宽度
     * @return
     */
    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(2, 0, (int) width, (int) height);
        loGraphic.translate(((int) width - liStrWidth) / 2 , ((int) height - liStrHeight) / 2 );
        loGraphic.rotate(Math.toRadians(-25));

        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;
    }
    //--excel 加水印end-----------------------------------------------------------------------------------------


    //--pdf 加水印start-----------------------------------------------------------------------------------------
    /**
     * PDF 设置水印
     * 免费版仅限于10页的PDF,10页以上的pdf加水印,只加10页水印,并且10页以后的也不会显示
     *
     * @param inFile  原文件路径
     * @param outFile 水印文件路径
     * @param watermark 水印内容
     */
    public static void setPdfWaterMark(String inFile, String outFile, String watermark) {
        //创建PdfDocument对象
        PdfDocument pdf = new PdfDocument();
        //加载示例文档
        pdf.loadFromFile(inFile);

        if ( pdf.getPages().getCount() > 10){
            System.out.println("文档大于10页");
        }
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            //insertPdfWatermark
            insertPdfWatermark(pdf.getPages().get(i), watermark);
        }
        //保存文档
        pdf.saveToFile(outFile);
        pdf.close();
    }

    /**
     * 水印设置
     * @param page
     * @param watermark 水印内容
     */
    private static void insertPdfWatermark(PdfPageBase page, String watermark) {
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
        brush.getGraphics().setTransparency(0.3F);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
        brush.getGraphics().rotateTransform(-45);
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font(FOND_ST, Font.PLAIN, 12), true);
        brush.getGraphics().drawString(watermark, font, PdfBrushes.getViolet(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
        brush.getGraphics().restore();
        brush.getGraphics().setTransparency(1);
        Rectangle2D loRect = new Rectangle2D.Float();
        loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
        page.getCanvas().drawRectangle(brush, loRect);
    }
    //--pdf 加水印end-----------------------------------------------------------------------------------------


    //--ppt 加水印start-----------------------------------------------------------------------------------------
    /**
     * PPT设置水印
     * 限制,10页以内可用
     *
     * @param path
     * @param targetpath
     * @param markStr
     * @throws IOException
     */
    public static void setPPTWaterMark(String path, String targetpath, String markStr) throws Exception {
        //创建presentation对象并加载示例文档
        Presentation presentation = new Presentation();
        presentation.loadFromFile(path);
        //限制,10页以内可用,超过10页的有水印
        if (presentation.getSlides().size() > 10) {
            System.out.println("文档大于10页");
        }
        //设置文本水印的宽和高
        int width = 600;
        int height = 300;

        //定义一个长方形区域
        Rectangle2D.Double rect = new Rectangle2D.Double((presentation.getSlideSize().getSize().getWidth() - width) / 2,
                (presentation.getSlideSize().getSize().getHeight() - height) / 2, width, height);

        //添加一个shape到定义区域
        for (int i = 0; i < presentation.getSlides().size(); i++) {
            IAutoShape shape = presentation.getSlides().get(i).getShapes().appendShape(ShapeType.RECTANGLE, rect);

            //设置shape样式
            shape.getFill().setFillType(FillFormatType.NONE);
            shape.getShapeStyle().getLineColor().setColor(Color.white);
            shape.setRotation(-45);
            shape.getLocking().setSelectionProtection(true);
            shape.getLine().setFillType(FillFormatType.NONE);

            //添加文本到shape
            shape.getTextFrame().setText(markStr);
            PortionEx textRange = shape.getTextFrame().getTextRange();

            //设置文本水印样式
            textRange.getFill().setFillType(FillFormatType.SOLID);
            textRange.getFill().getSolidColor().setColor(Color.GRAY);
            textRange.setFontHeight(50);
        }

        //保存文档
        if (path.substring(path.lastIndexOf(".") + 1, path.length()).equalsIgnoreCase("ppt")) {
            presentation.saveToFile(targetpath, com.spire.presentation.FileFormat.PPT);
        } else {
            presentation.saveToFile(targetpath, com.spire.presentation.FileFormat.PPTX_2010);
        }
    }
    //--ppt 加水印end-----------------------------------------------------------------------------------------

}

图片加水印工具类

package com.bingjiu.utils;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;

/**
 * 图片水印工具类
 *  @author : Xiewy <br/>
 *  @date : 2022/8/16 17:54 <br/>
 */
public class ImgWaterMarkUtil {

    /**
     * 水印透明度
     */
    private static float alpha = 0.7f;
    /**
     * 水印横向位置
     */
    private static int positionWidth = 150;
    /**
     * 水印纵向位置
     */
    private static int positionHeight = 300;
    /**
     * 水印文字字体
     */
    private static Font font = new Font("宋体", Font.BOLD, 20);
    /**
     * 水印文字颜色
     */
    private static Color color = Color.red;

    /**
     * 文字水印位置铺满全屏
     */
    private static ArrayList position1;
    private static ArrayList position2;

    /**
     *
     * @param alpha 水印透明度
     * @param positionWidth 水印横向位置
     * @param positionHeight 水印纵向位置
     * @param font 水印文字字体
     * @param color 水印文字颜色
     */
    public static void setImageMarkOptions(float alpha, int positionWidth, int positionHeight, Font font, Color color) {
        if (alpha != 0.0f) {
            ImgWaterMarkUtil.alpha = alpha;
        }
        if (positionWidth != 0) {
            ImgWaterMarkUtil.positionWidth = positionWidth;
        }
        if (positionHeight != 0) {
            ImgWaterMarkUtil.positionHeight = positionHeight;
        }
        if (font != null) {
            ImgWaterMarkUtil.font = font;
        }
        if (color != null) {
            ImgWaterMarkUtil.color = color;
        }
    }

    /**
     * 给图片添加水印图片
     *
     * @param iconPath  水印图片路径
     * @param srcImgPath 源图片路径
     * @param targerPath 目标图片路径
     */
    public static void markImageByIcon(String iconPath, String srcImgPath,String targerPath) {
        markImageByIcon(iconPath, srcImgPath, targerPath, null);
    }

    /**
     * 给图片添加水印图片、可设置水印图片旋转角度
     *
     * @param iconPath 水印图片路径
     * @param srcImgPath 源图片路径
     * @param targerPath 目标图片路径
     * @param degree 水印图片旋转角度
     */
    public static void markImageByIcon(String iconPath, String srcImgPath,String targerPath, Integer degree) {
        OutputStream os = null;
        try {

            Image srcImg = ImageIO.read(new File(srcImgPath));

            BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
                    srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);

            // 1、得到画笔对象
            Graphics2D g = buffImg.createGraphics();

            // 2、设置对线段的锯齿状边缘处理
            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);
            // 3、设置水印旋转
            if (null != degree) {
                g.rotate(Math.toRadians(degree),
                        (double) buffImg.getWidth() / 2,
                        (double) buffImg.getHeight() / 2);
            }

            // 4、水印图片的路径 水印图片一般为gif或者png的,这样可设置透明度
            ImageIcon imgIcon = new ImageIcon(iconPath);

            // 5、得到Image对象。
            Image img = imgIcon.getImage();

            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                    alpha));

            // 6、水印图片的位置
            g.drawImage(img, positionWidth, positionHeight, null);
            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
            // 7、释放资源
            g.dispose();

            // 8、生成图片
            os = new FileOutputStream(targerPath);
            ImageIO.write(buffImg, "JPG", os);

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

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(null != os) {
                    os.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 给图片添加水印文字
     *
     * @param logoText 水印文字
     * @param srcImgPath 源图片路径
     * @param targerPath  目标图片路径
     */
    public static void markImageByText(String logoText, String srcImgPath, String targerPath,int allFlag) {
        markImageByText(logoText, srcImgPath, targerPath, null,allFlag);
    }

    /**
     * 给图片添加水印文字、可设置水印文字的旋转角度
     *
     * @param logoText
     * @param srcImgPath
     * @param targerPath
     * @param degree
     */
    public static void markImageByText(String logoText, String srcImgPath,String targerPath, Integer degree,int allFlag) {
        OutputStream os = null;
        try {
            // 1、源图片
            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), 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)
            if (allFlag == 1){
                int width = srcImg.getWidth(null);
                int height = srcImg.getHeight(null);
                position1 = new ArrayList();
                position2 = new ArrayList();
                position1.add(0);
                position1.add(width/4);
                position1.add(width/2);
                position1.add(width*3/4);
                position1.add(width);
                position2.add(0);
                position2.add(height/4);
                position2.add(height/2);
                position2.add(height*3/4);
                position2.add(height);

                for (Object value : position1) {
                    for (Object o : position2) {
                        g.drawString(logoText, (Integer) value, (Integer) o);
                    }
                }
            }else {
                g.drawString(logoText,positionWidth,positionHeight);
            }

            // 9、释放资源
            g.dispose();
            // 10、生成图片
            os = new FileOutputStream(targerPath);
            ImageIO.write(buffImg, "JPG", os);

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

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (null != os) {
                    os.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        String srcImgPath = "C:\\Users\\BetelNutsAndWine\\Desktop\\a5c693ca2a2d8746583d16353f45c0b3.jpg";
        String logoText = "槟榔与酒的醉人故事";
        String iconPath = "d:/2.jpg";

        String targerTextPath = "C:\\Users\\BetelNutsAndWine\\Desktop\\2.jpg";
        String targerTextPath2 = "C:\\Users\\BetelNutsAndWine\\Desktop\\3.jpg";

        String targerIconPath = "d:/qie_icon.jpg";
        String targerIconPath2 = "d:/qie_icon_rotate.jpg";

        System.out.println("给图片添加水印文字开始...");
        // 给图片添加水印文字
//        markImageByText(logoText, srcImgPath, targerTextPath,0);
        // 给图片添加水印文字,水印文字旋转-45
        markImageByText(logoText, srcImgPath, targerTextPath2, -45,1);
        System.out.println("给图片添加水印文字结束...");

//        System.out.println("给图片添加水印图片开始...");
//        setImageMarkOptions(0.3f, 1, 1, null, null);
//        // 给图片添加水印图片
//        markImageByIcon(iconPath, srcImgPath, targerIconPath);
//        // 给图片添加水印图片,水印图片旋转-45
//        markImageByIcon(iconPath, srcImgPath, targerIconPath2, -45);
//        System.out.println("给图片添加水印图片结束...");

    }

}

效果图展示:

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache POI库来实现Java添加Word文档的水印。以下是一个简单的示例代码: ```java import java.io.*; import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.util.IOUtils; public class AddWatermarkToWord { public static void main(String[] args) { try (XWPFDocument doc = new XWPFDocument(new FileInputStream("input.docx"))) { // 创建水印图片 InputStream is = new FileInputStream("watermark.png"); byte[] bytes = IOUtils.toByteArray(is); doc.createPicture(doc.getNextPicNameNumber(XWPFDocument.PICTURE_TYPE_PNG), doc.getNextPicNameNumber(XWPFDocument.PICTURE_TYPE_PNG), bytes, Units.toEMU(200), Units.toEMU(200)); // 将水印设置为所有页面的背景图像 for (XWPFParagraph p : doc.getParagraphs()) { for (XWPFRun r : p.getRuns()) { if (r.getCTR().getDrawingList().size() > 0) { for (CTDrawing ctDrawing : r.getCTR().getDrawingList()) { if (ctDrawing.getInlineArray().length > 0) { for (CTInline ctInline : ctDrawing.getInlineArray()) { if (ctInline.getGraphic().getGraphicData(). getPic().getBlipFill().getBlip().getEmbed() != null) { String blipId = ctInline.getGraphic().getGraphicData(). getPic().getBlipFill().getBlip().getEmbed(); XWPFPictureData picData = doc.getPictureDataByID(blipId); if (picData != null && "image/png".equals(picData. getPackagePart().getContentType())) { CTBackground ctBackground = p.getCTP().addNewPPr().addNewPBdr(). addNewShd(); ctBackground.setFill("FFFFFF"); ctBackground.setColor("auto"); ctBackground.setVal(STShd.CLEAR); ctBackground.setThemeFill(STThemeColor.BACKGROUND_1); ctBackground.setThemeFillTint(0); ctBackground.setThemeFillShade(0); ctBackground.setPatternFill(null); ctBackground.setBgColor(null); String watermarkId = ctBackground.addNewPicture().addNewBlipFill(). addNewBlip().getAttrValueArray(0); ctBackground.getPictureArray(0). addNewExtent().setCx(Units.toEMU(400)); ctBackground.getPictureArray(0). addNewExtent().setCy(Units.toEMU(400)); ctBackground.getPictureArray(0). addNewEffectLst(); ctBackground.getPictureArray(0). addNewDocPr().setId(1); ctBackground.getPictureArray(0). addNewCstate().setVal(STPicture.STRETCH); XWPFPictureData watermarkData = doc.addPictureData(new ByteArrayInputStream(bytes), XWPFDocument.PICTURE_TYPE_PNG); ctBackground.getPictureArray(0). getBlipFill().getBlip().setEmbed(watermarkId, watermarkData.getName(), watermarkData.getID()); ctBackground.getPictureArray(0). getBlipFill().setSourceRect(null); } } } } } } } } // 保存添加水印后的文档 doc.write(new FileOutputStream("output.docx")); } catch (Exception ex) { ex.printStackTrace(); } } } ``` 在上面的代码中,我们首先打开输入的Word文档,然后创建一个水印图片,将其设置为所有页面的背景图像。最后,我们将修改后的文档保存到输出文件中。 请注意,此代码仅适用于Word 2007及更高版本,因为它使用了OpenXML格式。如果您需要处理较旧版本的Word文档,您需要使用不同的库,例如Apache POIFS。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值