资讯详情

POI:POI实现docx文件添加水印

1、pom引入

注:该方法必须使用4:.X以上版本的poi,4.X以下版本将报告异常。

        <dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi</artifactId>    <version>4.1.2</version>   </dependency>   <dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi-ooxml</artifactId>    <version>4.1.2</version>   </dependency>   <dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi-ooxml-schemas</artifactId>    <version>4.1.2</version>   </dependency>

package org.publiccms.common.watermark;  import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFHeader; import org.apache.poi.xwpf.usermodel.XWPFParagraph;  import java.io.*; import java.util.regex.Pattern;  public class DocxWaterMark {      public static void addWaterMark (String filePath,String outPath,String waterMarkValue) throws IOException, FileNotFoundException {         //输入的docx文档         InputStream in = new FileInputStream(new File(filePath));         XWPFDocument doc = new XWPFDocument(in);         XWPFParagraph paragraph = doc.createParagraph()///创建文本段落         XWPFHeaderFooterPolicy headerFooterPolicy = doc.getHeaderFooterPolicy()         if (headerFooterPolicy == null) headerFooterPolicy = doc.createHeaderFooterPolicy()///如果没有页眉页脚,则创建         headerFooterPolicy.createWatermark(waterMarkValue);///设置水印显示的内容         XWPFHeader header = headerFooterPolicy.getHeader(XWPFHeaderFooterPolicy.DEFAULT);         paragraph = header.getParagraphArray(0);         org.apache.xmlbeans.XmlObject[] xmlobjects = paragraph.getCTP().getRArray(0).getPictArray(0).selectChildren(                 new javax.xml.namespace.QName("urn:schemas-microsoft-com:vml", "shape"));         if (xmlobjects.length > 0) {             com.microsoft.schemas.vml.CTShape ctshape = (com.microsoft.schemas.vml.CTShape) xmlobjects[0];             ctshape.setFillcolor("#f6f6f6");//设置水印颜色 //            ctshape.setStyle(ctshape.getStyle()   ";rotation:315");//设置水印样式  获得默认样式和旋315度             ctshape.setStyle(getShapeStyle());//设置水印样式  获得默认样式和旋315度         }         OutputStream out = new FileOutputStream(outPath);         doc.write(out); //        doc.write(out);         out.flush();         out.close();     }      private static String getShapeStyle() {         StringBuilder sb = new StringBuilder();         sb.append("position: ").append("absolute"); // 文本path绘制定位方法         sb.append(";left: ").append("opt");         sb.append(";width: ").append("500pt"); // 计算文本占用的长度(文本总数*单字长度)         sb.append(";height: ").append("150pt"); // 字体高度         sb.append(";z-index: ").append("-251654144");         sb.append(";mso-wrap-edited: ").append("f");         sb.append(";margin-left: ").append("-50pt");         sb.append(";margin-top: ").append("270pt");         sb.append(";mso-position-horizontal-relative: ").append("margin");         sb.append(";mso-position-vertical-relative: ").append("margin");         sb.append(";mso-width-relative: ").append("page");         sb.append(";mso-height-relative: ").append("page");         sb.append(";rotation: ").append("335");         return sb.toString();     }      /**      * 修改水印风格高度的方法,如果你不想改变高度,你可以不使用第二种方法      * @param styleStr  以前的水印风格      * @param height    需要改成的高度      * @return  返回新修改的水印样式      */     public static String getWaterMarkStyle(String styleStr,double height){         //使用获得的样式";"切割后保存在数组中         Pattern p=Pattern.compile(";");         String[] strs = p.split(styleStr);         ///遍历保存的数据,找高度风格,将高度改为参数传入高度         for(String str : strs){             if(str.startsWith("height:")){                 String heightStr = "height:"   height   "pt";                 styleStr = styleStr.replace(str,heightStr);                 break;             }         }         return styleStr;//返回改进的样式     }  } 

测试水印功能代码如下:

                    DocxWaterMark dwm = new DocxWaterMark();                     String FileName=urlOfd.substring(urlOfd.lastIndexOf("/") 1);                     String baseSrcUrl=this.preAbsoluteUrl  urlOfd.substring(urlOfd.lastIndexOf("upload")-1,urlOfd.lastIndexOf("/")) "/" FileName;                     String baseOutUrl = this.preAbsoluteUrl  "\\waterMark" urlOfd.substring(urlOfd.lastIndexOf("/"));                     try                     {                          dwm.addWaterMark(baseSrcUrl,baseOutUrl, username);                         msg = "success";                     }catch (Exception ex){                         ex.printStackTrace();                     }

/div>

标签: abs轮速传感器s102端盖

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台