精华内容
下载资源
问答
  • 一、解决poi给word添加水印遇到的问题: 1、遇到有页眉的word时水印添加失败 2、水印最底层被图片表格覆盖 二、解决思路: 1、把原来的页眉删除或者覆盖 2、水印只能在底层,那么我给它加多个水印 三、结果: ...

    限制高版本的docx

    一、解决poi给word添加水印遇到的问题:

    1、遇到有页眉的word时水印添加失败

    2、水印最底层被图片表格覆盖

    二、解决思路:

    1、把原来的页眉删除或者覆盖

    2、水印只能在底层,那么我给它加多个水印

    三、结果:

    四、代码

    maven配置

            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.1.2</version>
            </dependency>
            <!--2007 docx文件读取,需要导入poi-ooxml-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.1.2</version>
            </dependency>

    代码工具类

    package com.feng.util;
    
    import com.feng.bean.ResultCode;
    import com.feng.error.MyException;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    
    import java.io.*;
    
    /**
     * @Author: feng
     * @Date: 2020/12/01 2:35 下午
     */
    @Slf4j
    public class WaterMarkUtils {
    
        /**
         * word文字水印
         *
         * @param inputPath
         * @param outPath
         * @param markStr
         */
        public static void setWordWaterMark(String inputPath, String outPath, String markStr) {
            File inputFile = new File(inputPath);
            //2003doc 用HWPFDocument  ; 2007doc 用 XWPFDocument
            XWPFDocument doc = null;
            try {
                // 延迟解析比率
                ZipSecureFile.setMinInflateRatio(-1.0d);
                doc = new XWPFDocument(new FileInputStream(inputFile));
            } catch (FileNotFoundException e) {
                throw new MyException(ResultCode.FAILURE, "源文件不存在");
            } catch (IOException e) {
                throw new MyException(ResultCode.FAILURE, "读取源文件IO异常");
            } catch (Exception e) {
                throw new MyException(ResultCode.FAILURE, "不支持的文档格式");
            }
            XWPFHeaderFooterPolicy headerFooterPolicy = doc.getHeaderFooterPolicy();
            if (headerFooterPolicy == null) {
                headerFooterPolicy = doc.createHeaderFooterPolicy();
            }
            //添加水印
            headerFooterPolicy.createWatermark(markStr);
            File file = new File(outPath);
            if (!file.exists()) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    throw new MyException(ResultCode.FAILURE, "创建输出文件失败");
                }
            }
            OutputStream os = null;
            try {
                os = new FileOutputStream(outPath);
                doc.write(os);
            } catch (FileNotFoundException e) {
                throw new MyException(ResultCode.FAILURE, "创建输出文件失败");
            } catch (Exception e) {
                throw new MyException(ResultCode.FAILURE, "添加文档水印失败");
            } finally {
                   if (os != null) {
                        try {
                            os.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (doc != null) {
                        try {
                            doc.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
        }
    }
    
    创建 org.apache.poi.xwpf.model 包,重写 XWPFHeaderFooterPolicy 类
    
    如下:
    
    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package org.apache.poi.xwpf.model;
    
    import com.microsoft.schemas.office.office.CTLock;
    import com.microsoft.schemas.office.office.STConnectType;
    import com.microsoft.schemas.vml.CTFormulas;
    import com.microsoft.schemas.vml.CTGroup;
    import com.microsoft.schemas.vml.CTH;
    import com.microsoft.schemas.vml.CTHandles;
    import com.microsoft.schemas.vml.CTPath;
    import com.microsoft.schemas.vml.CTShape;
    import com.microsoft.schemas.vml.CTShapetype;
    import com.microsoft.schemas.vml.CTTextPath;
    import com.microsoft.schemas.vml.STExt;
    import com.microsoft.schemas.vml.STTrueFalse;
    
    import java.util.Iterator;
    
    import org.apache.poi.ooxml.POIXMLDocumentPart;
    import org.apache.poi.ooxml.POIXMLDocumentPart.RelationPart;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFFactory;
    import org.apache.poi.xwpf.usermodel.XWPFFooter;
    import org.apache.poi.xwpf.usermodel.XWPFHeader;
    import org.apache.poi.xwpf.usermodel.XWPFHeaderFooter;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.poi.xwpf.usermodel.XWPFRelation;
    import org.apache.xmlbeans.impl.values.XmlValueOutOfRangeException;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHdrFtrRef;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPicture;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.FtrDocument;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.HdrDocument;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.HdrDocument.Factory;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr.Enum;
    
    public class XWPFHeaderFooterPolicy {
        public static final Enum DEFAULT;
        public static final Enum EVEN;
        public static final Enum FIRST;
        private XWPFDocument doc;
        private XWPFHeader firstPageHeader;
        private XWPFFooter firstPageFooter;
        private XWPFHeader evenPageHeader;
        private XWPFFooter evenPageFooter;
        private XWPFHeader defaultHeader;
        private XWPFFooter defaultFooter;
    
        public XWPFHeaderFooterPolicy(XWPFDocument doc) {
            this(doc, (CTSectPr) null);
        }
    
        public XWPFHeaderFooterPolicy(XWPFDocument doc, CTSectPr sectPr) {
            if (sectPr == null) {
                CTBody i = doc.getDocument().getBody();
                sectPr = i.isSetSectPr() ? i.getSectPr() : i.addNewSectPr();
            }
    
            this.doc = doc;
    
            CTHdrFtrRef ref;
            POIXMLDocumentPart relatedPart;
            Enum type;
            int var11;
            for (var11 = 0; var11 < sectPr.sizeOfHeaderReferenceArray(); ++var11) {
                ref = sectPr.getHeaderReferenceArray(var11);
                relatedPart = doc.getRelationById(ref.getId());
                XWPFHeader ftr = null;
                if (relatedPart != null && relatedPart instanceof XWPFHeader) {
                    ftr = (XWPFHeader) relatedPart;
                }
    
                try {
                    type = ref.getType();
                } catch (XmlValueOutOfRangeException var10) {
                    type = STHdrFtr.DEFAULT;
                }
    
                this.assignHeader(ftr, type);
            }
    
            for (var11 = 0; var11 < sectPr.sizeOfFooterReferenceArray(); ++var11) {
                ref = sectPr.getFooterReferenceArray(var11);
                relatedPart = doc.getRelationById(ref.getId());
                XWPFFooter var12 = null;
                if (relatedPart != null && relatedPart instanceof XWPFFooter) {
                    var12 = (XWPFFooter) relatedPart;
                }
    
                try {
                    type = ref.getType();
                } catch (XmlValueOutOfRangeException var9) {
                    type = STHdrFtr.DEFAULT;
                }
    
                this.assignFooter(var12, type);
            }
    
        }
    
        private void assignFooter(XWPFFooter ftr, Enum type) {
            if (type == STHdrFtr.FIRST) {
                this.firstPageFooter = ftr;
            } else if (type == STHdrFtr.EVEN) {
                this.evenPageFooter = ftr;
            } else {
                this.defaultFooter = ftr;
            }
    
        }
    
        private void assignHeader(XWPFHeader hdr, Enum type) {
            if (type == STHdrFtr.FIRST) {
                this.firstPageHeader = hdr;
            } else if (type == STHdrFtr.EVEN) {
                this.evenPageHeader = hdr;
            } else {
                this.defaultHeader = hdr;
            }
    
        }
    
        public XWPFHeader createHeader(Enum type) {
            return this.createHeader(type, (XWPFParagraph[]) null);
        }
    
        public XWPFHeader createHeader(Enum type, XWPFParagraph[] pars) {
            XWPFHeader header = this.getHeader(type);
    //存在hdader则覆盖
    //        if(header == null) {
            HdrDocument hdrDoc = Factory.newInstance();
            XWPFRelation relation = XWPFRelation.HEADER;
            int i = this.getRelationIndex(relation);
            XWPFHeader wrapper = (XWPFHeader) this.doc.createRelationship(relation, XWPFFactory.getInstance(), i);
            wrapper.setXWPFDocument(this.doc);
            CTHdrFtr hdr = this.buildHdr(type, wrapper, pars);
            wrapper.setHeaderFooter(hdr);
            hdrDoc.setHdr(hdr);
            this.assignHeader(wrapper, type);
            header = wrapper;
    //        }
    
            return header;
        }
    
        public XWPFFooter createFooter(Enum type) {
            return this.createFooter(type, (XWPFParagraph[]) null);
        }
    
        public XWPFFooter createFooter(Enum type, XWPFParagraph[] pars) {
            XWPFFooter footer = this.getFooter(type);
    //        if (footer == null) {
            FtrDocument ftrDoc = org.openxmlformats.schemas.wordprocessingml.x2006.main.FtrDocument.Factory.newInstance();
            XWPFRelation relation = XWPFRelation.FOOTER;
            int i = this.getRelationIndex(relation);
            XWPFFooter wrapper = (XWPFFooter) this.doc.createRelationship(relation, XWPFFactory.getInstance(), i);
            wrapper.setXWPFDocument(this.doc);
            CTHdrFtr ftr = this.buildFtr(type, wrapper, pars);
            wrapper.setHeaderFooter(ftr);
            ftrDoc.setFtr(ftr);
            this.assignFooter(wrapper, type);
            footer = wrapper;
    //        }
    
            return footer;
        }
    
        private int getRelationIndex(XWPFRelation relation) {
            int i = 1;
            Iterator var3 = this.doc.getRelationParts().iterator();
    
            while (var3.hasNext()) {
                RelationPart rp = (RelationPart) var3.next();
                if (rp.getRelationship().getRelationshipType().equals(relation.getRelation())) {
                    ++i;
                }
            }
    
            return i;
        }
    
        private CTHdrFtr buildFtr(Enum type, XWPFHeaderFooter wrapper, XWPFParagraph[] pars) {
            CTHdrFtr ftr = this.buildHdrFtr(pars, wrapper);
            this.setFooterReference(type, wrapper);
            return ftr;
        }
    
        private CTHdrFtr buildHdr(Enum type, XWPFHeaderFooter wrapper, XWPFParagraph[] pars) {
            CTHdrFtr hdr = this.buildHdrFtr(pars, wrapper);
            this.setHeaderReference(type, wrapper);
            return hdr;
        }
    
        private CTHdrFtr buildHdrFtr(XWPFParagraph[] paragraphs, XWPFHeaderFooter wrapper) {
            CTHdrFtr ftr = wrapper._getHdrFtr();
            if (paragraphs != null) {
                for (int i = 0; i < paragraphs.length; ++i) {
                    ftr.addNewP();
                    ftr.setPArray(i, paragraphs[i].getCTP());
                }
            }
    
            return ftr;
        }
    
        private void setFooterReference(Enum type, XWPFHeaderFooter wrapper) {
            CTHdrFtrRef ref = this.doc.getDocument().getBody().getSectPr().addNewFooterReference();
            ref.setType(type);
            ref.setId(this.doc.getRelationId(wrapper));
        }
    
        private void setHeaderReference(Enum type, XWPFHeaderFooter wrapper) {
            CTHdrFtrRef ref = this.doc.getDocument().getBody().isSetSectPr() ? this.doc.getDocument().getBody().getSectPr().addNewHeaderReference() : this.doc.getDocument().getBody().addNewSectPr().addNewHeaderReference();
            ref.setType(type);
            ref.setId(this.doc.getRelationId(wrapper));
        }
    
        public XWPFHeader getFirstPageHeader() {
            return this.firstPageHeader;
        }
    
        public XWPFFooter getFirstPageFooter() {
            return this.firstPageFooter;
        }
    
        public XWPFHeader getOddPageHeader() {
            return this.defaultHeader;
        }
    
        public XWPFFooter getOddPageFooter() {
            return this.defaultFooter;
        }
    
        public XWPFHeader getEvenPageHeader() {
            return this.evenPageHeader;
        }
    
        public XWPFFooter getEvenPageFooter() {
            return this.evenPageFooter;
        }
    
        public XWPFHeader getDefaultHeader() {
            return this.defaultHeader;
        }
    
        public XWPFFooter getDefaultFooter() {
            return this.defaultFooter;
        }
    
        public XWPFHeader getHeader(int pageNumber) {
            return pageNumber == 1 && this.firstPageHeader != null ? this.firstPageHeader : (pageNumber % 2 == 0 && this.evenPageHeader != null ? this.evenPageHeader : this.defaultHeader);
        }
    
        public XWPFHeader getHeader(Enum type) {
            return type == STHdrFtr.EVEN ? this.evenPageHeader : (type == STHdrFtr.FIRST ? this.firstPageHeader : this.defaultHeader);
        }
    
        public XWPFFooter getFooter(int pageNumber) {
            return pageNumber == 1 && this.firstPageFooter != null ? this.firstPageFooter : (pageNumber % 2 == 0 && this.evenPageFooter != null ? this.evenPageFooter : this.defaultFooter);
        }
    
        public XWPFFooter getFooter(Enum type) {
            return type == STHdrFtr.EVEN ? this.evenPageFooter : (type == STHdrFtr.FIRST ? this.firstPageFooter : this.defaultFooter);
        }
    
        public void createWatermark(String text) {
            XWPFParagraph[] pars = new XWPFParagraph[]{this.getWatermarkParagraph(text, 1)};
            this.createHeader(DEFAULT, pars);
            pars[0] = this.getWatermarkParagraph(text, 2);
            this.createHeader(FIRST, pars);
            pars[0] = this.getWatermarkParagraph(text, 3);
            this.createHeader(EVEN, pars);
        }
    
        /**
         * 原方法备份
         * @param text
         * @param idx
         * @return
         */
        private XWPFParagraph getWatermarkParagraph123(String text, int idx) {
            CTP p = org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP.Factory.newInstance();
            byte[] rsidr = this.doc.getDocument().getBody().getPArray(0).getRsidR();
            byte[] rsidrdefault = this.doc.getDocument().getBody().getPArray(0).getRsidRDefault();
            p.setRsidP(rsidr);
            p.setRsidRDefault(rsidrdefault);
            CTPPr pPr = p.addNewPPr();
            pPr.addNewPStyle().setVal("Header");
            CTR r = p.addNewR();
            CTRPr rPr = r.addNewRPr();
            rPr.addNewNoProof();
            CTPicture pict = r.addNewPict();
            CTGroup group = com.microsoft.schemas.vml.CTGroup.Factory.newInstance();
            CTShapetype shapetype = group.addNewShapetype();
            shapetype.setId("_x0000_t136");
            shapetype.setCoordsize("1600,21600");
            shapetype.setSpt(136.0F);
            shapetype.setAdj("10800");
            shapetype.setPath2("m@7,0l@8,0m@5,21600l@6,21600e");
            CTFormulas formulas = shapetype.addNewFormulas();
            formulas.addNewF().setEqn("sum #0 0 10800");
            formulas.addNewF().setEqn("prod #0 2 1");
            formulas.addNewF().setEqn("sum 21600 0 @1");
            formulas.addNewF().setEqn("sum 0 0 @2");
            formulas.addNewF().setEqn("sum 21600 0 @3");
            formulas.addNewF().setEqn("if @0 @3 0");
            formulas.addNewF().setEqn("if @0 21600 @1");
            formulas.addNewF().setEqn("if @0 0 @2");
            formulas.addNewF().setEqn("if @0 @4 21600");
            formulas.addNewF().setEqn("mid @5 @6");
            formulas.addNewF().setEqn("mid @8 @5");
            formulas.addNewF().setEqn("mid @7 @8");
            formulas.addNewF().setEqn("mid @6 @7");
            formulas.addNewF().setEqn("sum @6 0 @5");
            CTPath path = shapetype.addNewPath();
            path.setTextpathok(STTrueFalse.T);
            path.setConnecttype(STConnectType.CUSTOM);
            path.setConnectlocs("@9,0;@10,10800;@11,21600;@12,10800");
            path.setConnectangles("270,180,90,0");
            CTTextPath shapeTypeTextPath = shapetype.addNewTextpath();
            shapeTypeTextPath.setOn(STTrueFalse.T);
            shapeTypeTextPath.setFitshape(STTrueFalse.T);
            CTHandles handles = shapetype.addNewHandles();
            CTH h = handles.addNewH();
            h.setPosition("#0,bottomRight");
            h.setXrange("6629,14971");
            CTLock lock = shapetype.addNewLock();
            lock.setExt(STExt.EDIT);
            CTShape shape = group.addNewShape();
            shape.setId("PowerPlusWaterMarkObject" + idx);
            shape.setSpid("_x0000_s102" + (4 + idx));
            shape.setType("#_x0000_t136");
            shape.setStyle("position:absolute;margin-left:0;margin-top:0;width:415pt;height:207.5pt;z-index:1;mso-wrap-edited:f;mso-position-horizontal:center;mso-position-horizontal-relative:margin;mso-position-vertical:center;mso-position-vertical-relative:margin");
            shape.setWrapcoords("616 5068 390 16297 39 16921 -39 17155 7265 17545 7186 17467 -39 17467 18904 17467 10507 17467 8710 17545 18904 17077 18787 16843 18358 16297 18279 12554 19178 12476 20701 11774 20779 11228 21131 10059 21248 8811 21248 7563 20975 6316 20935 5380 19490 5146 14022 5068 2616 5068");
            shape.setFillcolor("black");
            shape.setStroked(STTrueFalse.FALSE);
            CTTextPath shapeTextPath = shape.addNewTextpath();
            shapeTextPath.setStyle("font-family:&quot;Cambria&quot;;font-size:1pt");
            shapeTextPath.setString(text);
            pict.set(group);
            return new XWPFParagraph(p, this.doc);
        }
    
        /**
         * 重写方法
         * @param text
         * @param idx
         * @return
         */
        private XWPFParagraph getWatermarkParagraph(String text, int idx) {
            CTP p = org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP.Factory.newInstance();
            byte[] rsidr = this.doc.getDocument().getBody().getPArray(0).getRsidR();
            byte[] rsidrdefault = this.doc.getDocument().getBody().getPArray(0).getRsidRDefault();
            p.setRsidP(rsidr);
            p.setRsidRDefault(rsidrdefault);
            CTPPr pPr = p.addNewPPr();
            pPr.addNewPStyle().setVal("Header");
            CTR r = p.addNewR();
            if (idx == 1) {
                //margin-left和margin-top调整位置,height和width调整大小
                //左上角
                setCTR(r, text, idx, "position:absolute;left:0pt;margin-left:-120pt;margin-top:108pt;mso-position-horizontal-relative:margin;mso-position-vertical-relative:margin;rotation:-2949120f;height:60pt;width:360pt;mso-width-relative:page;mso-height-relative:page");
                //右上角
                setCTR(r, text, idx, "position:absolute;left:0pt;margin-left:190pt;margin-top:108pt;mso-position-horizontal-relative:margin;mso-position-vertical-relative:margin;rotation:-2949120f;height:60pt;width:360pt;mso-width-relative:page;mso-height-relative:page");
                //左下角
                setCTR(r, text, idx, "position:absolute;left:0pt;margin-left:-120pt;margin-top:495pt;mso-position-horizontal-relative:margin;mso-position-vertical-relative:margin;rotation:-2949120f;height:60pt;width:360pt;mso-width-relative:page;mso-height-relative:page");
                //右下角
                setCTR(r, text, idx, "position:absolute;left:0pt;margin-left:190pt;margin-top:495pt;mso-position-horizontal-relative:margin;mso-position-vertical-relative:margin;rotation:-2949120f;height:60pt;width:360pt;mso-width-relative:page;mso-height-relative:page");
            } else {
                setCTR(r, text, idx, "position:absolute;left:0pt;mso-position-horizontal-relative:margin;mso-position-vertical-relative:margin;rotation:-2949120f;height:60pt;width:360pt;mso-width-relative:page;mso-height-relative:page");
            }
            return new XWPFParagraph(p, this.doc);
        }
    
        /**
         * 添加水印
         * @param r
         * @param text
         * @param idx
         * @param style
         */
        private void setCTR(CTR r, String text, int idx, String style) {
            CTRPr rPr = r.addNewRPr();
            rPr.addNewNoProof();
            CTPicture pict = r.addNewPict();
            CTGroup group = com.microsoft.schemas.vml.CTGroup.Factory.newInstance();
            CTShapetype shapetype = group.addNewShapetype();
            shapetype.setId("_x0000_t136");
            shapetype.setCoordsize("1600,21600");
            shapetype.setSpt(136.0F);
            shapetype.setAdj("10800");
            shapetype.setPath2("m@7,0l@8,0m@5,21600l@6,21600e");
            CTFormulas formulas = shapetype.addNewFormulas();
            formulas.addNewF().setEqn("sum #0 0 10800");
            formulas.addNewF().setEqn("prod #0 2 1");
            formulas.addNewF().setEqn("sum 21600 0 @1");
            formulas.addNewF().setEqn("sum 0 0 @2");
            formulas.addNewF().setEqn("sum 21600 0 @3");
            formulas.addNewF().setEqn("if @0 @3 0");
            formulas.addNewF().setEqn("if @0 21600 @1");
            formulas.addNewF().setEqn("if @0 0 @2");
            formulas.addNewF().setEqn("if @0 @4 21600");
            formulas.addNewF().setEqn("mid @5 @6");
            formulas.addNewF().setEqn("mid @8 @5");
            formulas.addNewF().setEqn("mid @7 @8");
            formulas.addNewF().setEqn("mid @6 @7");
            formulas.addNewF().setEqn("sum @6 0 @5");
            CTPath path = shapetype.addNewPath();
            path.setTextpathok(STTrueFalse.T);
            path.setConnecttype(STConnectType.CUSTOM);
            path.setConnectlocs("@9,0;@10,10800;@11,21600;@12,10800");
            path.setConnectangles("270,180,90,0");
            CTTextPath shapeTypeTextPath = shapetype.addNewTextpath();
            shapeTypeTextPath.setOn(STTrueFalse.T);
            shapeTypeTextPath.setFitshape(STTrueFalse.T);
            CTHandles handles = shapetype.addNewHandles();
            CTH h = handles.addNewH();
            h.setPosition("#0,bottomRight");
            h.setXrange("6629,14971");
            CTLock lock = shapetype.addNewLock();
            lock.setExt(STExt.EDIT);
            CTShape shape = group.addNewShape();
            shape.setId("PowerPlusWaterMarkObject" + idx);
            shape.setSpid("_x0000_s102" + (4 + idx));
            shape.setType("#_x0000_t136");
            shape.setStyle(style);
            shape.setWrapcoords("616 5068 390 16297 39 16921 -39 17155 7265 17545 7186 17467 -39 17467 18904 17467 10507 17467 8710 17545 18904 17077 18787 16843 18358 16297 18279 12554 19178 12476 20701 11774 20779 11228 21131 10059 21248 8811 21248 7563 20975 6316 20935 5380 19490 5146 14022 5068 2616 5068");
            //添加水印颜色
            shape.setFillcolor("#D3D3D3");
            shape.setStroked(STTrueFalse.FALSE);
            CTTextPath shapeTextPath = shape.addNewTextpath();
            shapeTextPath.setStyle("font-family:&quot;Cambria&quot;;font-size:1pt");
            shapeTextPath.setString(text);
            pict.set(group);
        }
    
        static {
            DEFAULT = STHdrFtr.DEFAULT;
            EVEN = STHdrFtr.EVEN;
            FIRST = STHdrFtr.FIRST;
        }
    }
    
    展开全文
  • 1、点【设计】下的【水印】,2016版本的word在右侧,各位,向右看齐2、点水印下的倒三角按钮后,可以看到有“机密”、"紧急"等预设好的水印文字,我们不要这,点下看,点下面的【自定义水印】...

    ​加水印不止是为了好看,更重要的有防伪或者声明的作用,比如在合同或公司文件上加上公司标志水印等,也有很多不愿意去这么做,我们公司的产品型式检验报告的材料上,都有相关的水印,这也是为了防止做假的材料而设置的吧。

    1、点【设计】下的【水印】,2016版本的word在右侧,各位,向右看齐

    aabfd56642c9a07afd670ea90436521b.png

    2、点水印下的倒三角按钮后,可以看到有“机密”、"紧急"等预设好的水印文字,我们不要这个,点下看,点下面的【自定义水印】

    01c3c66b72ac38ac7a56334a389e5ef2.png

    3、在弹出的【自定义水印】窗口中,有图片水印和文字水印,根据需要选择使用水印即可,我们以文字水印来设置一下。

    8a1cb54a544722cf1a23af93161e460b.png

    4、我简单的设置了几个水印文字“李兆香爱你们”,字体改为习字体,颜色改成黄色并设置成了透明,版式一般情况下选择“斜式”的较多,因为水印用斜着的方式显示好看,另外水印的面积会比水平方式的大些。

    afdb6839f4fb0b98b7f43f3161d0ca3a.png

    5、最后还是放上一张我设置完毕的效果图吧

    ea494ac50e6f8c147c48b2919a6c8a5d.png
    展开全文
  • Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面。...

    Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面。

    思路及方法:获取Word页眉,添加图片到页眉段落,并复制图片。

    程序环境:使用spire.doc.jar,版本3.9.0

    import com.spire.doc.*;
    import com.spire.doc.documents.Paragraph;
    import com.spire.doc.documents.TextWrappingStyle;
    import com.spire.doc.fields.DocPicture;
    
    //java项目源码www.fhadmin.org
    public class ImageWatermark {
        public static void main(String[] args) {
            //加载Word文档
            Document doc=new Document();
            doc.loadFromFile("input.docx");
    
            //加载图片
            DocPicture picture = new DocPicture(doc);
            picture.loadImage("logo.png");
            picture.setTextWrappingStyle(TextWrappingStyle.Behind);//设置图片环绕方式
    
            //遍历所有section
            for (int n = 0; n < doc.getSections().getCount(); n++) {
                Section section = doc.getSections().get(n);
    
                //获取section的页眉
                HeaderFooter header = section.getHeadersFooters().getHeader();
    
                Paragraph paragrapg1;
                //获取或添加段落
                if(header.getParagraphs().getCount()>0)
                {
                    paragrapg1 = header.getParagraphs().get(0);
                }
                else
                    {
                        paragrapg1 = header.addParagraph();
                    }
    
                //复制图片,并添加图片到段落
                for (int p = 0; p < 4; p++) {
                    for (int q = 0; q < 3; q++) {
                        picture = (DocPicture)picture.deepClone();
                        picture.setVerticalPosition(50 + 150 * p);
                        picture.setHorizontalPosition(10 + 140 * q);
                        paragrapg1.getChildObjects().add(picture);
                    }
                }
            }
    
            //保存文档
            doc.saveToFile("output.docx", FileFormat.Docx_2013);
            doc.dispose();
        }
    }
    wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

    展开全文
  • Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面。(添加...

    Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面。(添加多行文字水印效果,可以查看这篇文章中的方法)

    思路及方法:获取Word页眉,添加图片到页眉段落,并复制图片。

    程序环境:使用spire.doc.jar,版本:3.9.0

    Java代码:

    import com.spire.doc.*;
    import com.spire.doc.documents.Paragraph;
    import com.spire.doc.documents.TextWrappingStyle;
    import com.spire.doc.fields.DocPicture;
    
    public class ImageWatermark {
        public static void main(String[] args) {
            //加载Word文档
            Document doc=new Document();
            doc.loadFromFile("input.docx");
    
            //加载图片
            DocPicture picture = new DocPicture(doc);
            picture.loadImage("logo.png");
            picture.setTextWrappingStyle(TextWrappingStyle.Behind);//设置图片环绕方式
    
            //遍历所有section
            for (int n = 0; n < doc.getSections().getCount(); n++) {
                Section section = doc.getSections().get(n);
    
                //获取section的页眉
                HeaderFooter header = section.getHeadersFooters().getHeader();
    
                Paragraph paragrapg1;
                //获取或添加段落
                if(header.getParagraphs().getCount()>0)
                {
                    paragrapg1 = header.getParagraphs().get(0);
                }
                else
                    {
                        paragrapg1 = header.addParagraph();
                    }
    
                //复制图片,并添加图片到段落
                for (int p = 0; p < 4; p++) {
                    for (int q = 0; q < 3; q++) {
                        picture = (DocPicture)picture.deepClone();
                        picture.setVerticalPosition(50 + 150 * p);
                        picture.setHorizontalPosition(10 + 140 * q);
                        paragrapg1.getChildObjects().add(picture);
                    }
                }
            }
    
            //保存文档
            doc.saveToFile("output.docx", FileFormat.Docx_2013);
            doc.dispose();
        }
    }
    

     

     

    展开全文
  • Word中设置水印效果时,不论是文本水印或者是图片水印都只能添加单个文字或者图片到Word页面,效果比较单一,本文通过Java代码示例介绍如何在页面中添加多行图片水印效果,即水印效果以多个图片平铺到页面。(添加...
  • 本文将向您展示如何借助Spire.Doc for Java将多个图像水印添加Word文档中。可下载最新版测试。 示例代码如下: import com.spire.doc.Document; import com.spire.doc.FileFormat; import ...
  • 水印和图章都是在PDF文档页面中添加特殊标记,而水印是以整一个页面为基础添加,但图章却可以在页面任意地方多次添加多个。下面一起来看看如何添加吧。一、水印1、首先用极速PDF编辑器打开需要添加水印的文档后,...
  • 时候,我们都需要给一些重要的文件加上水印,在Word中就有很好用的加水印功能,不过很小伙伴却不知道怎么利用这功能做出好看又具有创意的水印,今天小编就来跟大家分享一些水印设置的技巧,帮助大家设计出...
  • 使用jacob在Word添加水印

    千次阅读 2009-02-11 16:47:00
    最近由于工作的原因需要对Word进行操作,并且在文档上面加上水印,这问题我在网上搜索了很久都没有一完整的解决办法,没得办法之好自己研究了,半天的努力没有白费,终于解决了,有兴趣的朋友可以参考下:环境:...
  • PDF文件是我们在工作、学习中经常接触的文件,PDF文件具有较好的稳定性,在传输的时候不会出现格式错乱的现象,但是PDF文件的编辑却是一大难题,例如加水印去水印,很小伙伴都不知道怎么做,没关系!小编今天就来...
  • 需求:为在线预览的word文档添加自定义水印,还要铺满效果,文字太还要能换行 使用插件Aspose.words for java 一jar包,官网下载或者复制相应的depedency语句即可,专门处理开发过程中的word文档的工具,功能挺...
  • 为了导出docx格式看了等文档,最后做总结依赖包用到dom4j和freemarker,最为方便。 <!-- https://mvnrepository.com/artifact/freemarker/freemarker --> <dependency> <groupId>...
  • word文档在传输给其他人查看时往往需要转成pdf文件,这样可以使得文件在任何系统下都可以打开查看,还能使文档内容不会被随意改动,有时还需要为转换的pdf文件...添加文件一次可以添加多个文档来一起转换。  添加的
  • vba 添加水印问题

    2018-12-21 15:26:35
    最近qt操作word添加水印时,出现一问题,当word文档有页时,添加的水印只有第一页有水印或者只有第一页没有水印(安装的Word版本不同) 添加方式: 打开word文档,录制宏,开始录制后添加水印,添加成功后停止...
  • 最近领导提了个需求 需要把多个word多个图片 放在一起并且转换成pdf格式 我这里的思路是先把多个word放在一个新的word里 再把图片循环添加到这个新的word文档里 保存之后转换成PDF格式 之前用的spire Doc的这个...
  • java使用jacob操作word添加图片

    千次阅读 2018-07-08 15:30:44
    这是给word添加水印,当业务需求在页word文档中,某一页添加水印一样的盖章,这链接就没有办法了。 2、在word中需要盖章的位置添加书签。 3、用jacob给书签替换成图片 /** * Created by qiuzhb on 2018...
  • 工作5年才发现,Word、PDF文档还能这样去水印!网友:厉害了在工作中对于一些重要的文件我们会...Word直接去水印方法一:Word文档中添加水印的话,我们是可以直接利用Word自带的去水印功能进行删除。操作方法:打...
  • @珞珈从发第一条视频号开始距今已经快有小半月了,这半月我们投入了蛮的时间和精力在制作视频上面。(还没看过视频的同学赶紧在视频号搜索:珞珈老师)细心的小伙伴们就会发现,每一视频我们都为大家贴心地配...
  • 今天有小伙伴发过来一个多页的Word文档,要求给每一页上添加水印效果,并且要求了水印的颜色,要布满全页面,字体不能太大,水印的内容要分好几行才能重复等等,你是准备花几小时设计图片作水印呀还是花三分钟...
  • 工作中遇到一需求,app端手写签名要插入到后台上传的附件中,多人签名时在word底部竖向往下排列。在此记录一下。 第一步 首先导入jar包:SpireDoc.jar(使用SprieDocforJava),有免费版(有水印)和付费版,各位...
  • 其实下载一PDF转换工具就可以了,现在很PDF转换工具都具备这些功能。 PDF转换工具:okfone PDF转换大师(地址链接,点击进入) 操作步骤如下: 解决PDF转换Word、Excel、PPT、图片问题 点击【PDF转文件】,...
  • API直接在您自己的C ++应用程序中提供文档格式化,操作,邮件合并,水印和更功能,而无需Microsoft Word。API支持大多数Microsoft Word格式进行处理。 近期更新了Aspose.Words for C ++ v19.6,添加了对Document....
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    ★在Word2002中选择多个文档区域 15 ★禁用智能标记 15 ★WORD字体随身携带 15 ★为WORD文本加注解 16 ★快速输入特定的短语 16 ★特殊符号的输入 17 ★使用通配符进行模糊替换 17 ★Word文档与RTF文档的互换问题 17...
  • jacob操作office word简单教程

    千次阅读 2017-03-10 14:37:17
    现在的项目中操作word文件比较word文件的加密解密,转换为各种格式,插入图片,添加水印、html转word等等各种东西,大家也都知道,java语言是不能直接操作word或者excel的,不像C#,可以调用VBA的类来直接操作...
  • 先来说说我为什么会有这需求吧蓝同学给大家分享了很软件安装教程,不知道你是否注意到上面的水印了没,这些水印添加可不是一很容易的事情,特别是批量添加比如下面这PS安装教程,有7张图片,如果一张张地...
  • word转PDF,PDF转图片

    2018-09-25 11:35:50
    最终根据自己的需求做成了下面两工具类,来完成需求.pdf转图片用的是icepdf,可以自己根据需求添加水印文字,设置图片分辨率. import org.apache.commons.lang3.StringUtils; import org.icepdf.core.pobjects....
  • 添加本地打印机

    2010-08-06 10:45:41
    【实验名称】添加本地打印机--实现模拟打印和...n 共享本地打印机---实现网络中的多个用户共享打印 n 将整个过程整理成Word文档 n 给Word文档加水印 n 将Word文档转换为.pdf文档 【实验环境及拓扑结构】 ...
  • 的小伙伴还不知道怎样将PDF文件转换为Word文档,今天小编就来教给大家一简单的方法,还可以实现批量转换哦。 今日转换:PDF转Word 软件可完成功能: 1.PDF转换功能:可以完成PDF到Word、Excel、PPT、图片...
  • transPDF.exe

    2021-01-18 13:48:38
    例如你想要把一个word文件加水印并转换为加密的pdf文件发送给多个同事,且每个pdf都有特定的水印和特定的密码。 a同事收到的文件:水印为:a同事专属,密码为:xxxxxx b同事收到的文件:水印为:b同事专属。密码为:...
  • 支持PDF添加水印,可添加页眉、页脚、图片水印、重复文字水印等,可设置水印字体。 支持PDF删除文字,只能删除文字型的PDF 支持PDF替换文字,只能替换文字型的PDF 支持PDF删除页面,可一次删除一文档的一页或...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

word添加多个水印