-1.示意图

0、maven依赖

 <!--word excel--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.0</version></dependency><!-- 对PDF文件的操作额外添加 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.1</version></dependency><!-- PDF文件 字体 防止中文乱码 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

一、给word添加斜体水印

package com.example.pdfshuiying.word;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 org.apache.xmlbeans.XmlObject;import javax.xml.namespace.QName;
import java.io.*;
import java.util.regex.Pattern;public class WordUtil {/*** word文件添加文字水印** @param fileData      原始文件字节数组* @param outputSrc     文件输出路径* @param waterMarkName 水印内容*/public static void addWordWaterMark(byte[] fileData, String outputSrc, String waterMarkName) throws Exception {InputStream input = new ByteArrayInputStream(fileData);XWPFDocument doc = new XWPFDocument(input);XWPFHeaderFooterPolicy headerFooterPolicy = doc.createHeaderFooterPolicy();//添加文字水印headerFooterPolicy.createWatermark(waterMarkName);XWPFHeader header = headerFooterPolicy.getHeader(XWPFHeaderFooterPolicy.DEFAULT);XWPFParagraph paragraph = header.getParagraphArray(0);paragraph.getCTP().newCursor();XmlObject[] xmlobjects = paragraph.getCTP().getRArray(0).getPictArray(0).selectChildren(new 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("#404040");//修改水印样式 //设置水印的样式  获取默认样式和旋315度ctshape.setStyle(getWaterMarkStyle(ctshape.getStyle(), 23) + ";rotation:315");}ByteArrayOutputStream out = new ByteArrayOutputStream();try {doc.write(out);} finally {out.close();doc.close();input.close();}out.writeTo(new BufferedOutputStream(new FileOutputStream(outputSrc)));}/*** 设置水印格式* word** @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;}public static void main(String[] args) throws Exception {String   y="C:\\Users\\zhyyds\\Desktop\\ik\\test.doc";String   x="C:\\Users\\zhyyds\\Desktop\\ik\\test1.doc";String   text="ask创作 2022-06-12 23:37:56";File file = new File(y);byte[] bytes = FileUtils.readFileToByteArray(file);WordUtil.addWordWaterMark(bytes,x,text);}
}

二、给pdf添加斜体水印

package com.example.pdfshuiying.pdf;import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.*;import java.io.FileOutputStream;public class PdfUtil {public static void main(String[] args) {/**1.源文件地址* 2.出参地址* 3.水印文字*/PdfUtil.addWaterMark2("C:\\Users\\zhyyds\\Desktop\\ik\\1.pdf", "C:\\Users\\zhyyds\\Desktop\\ik\\2.pdf", "ask 创造");}/*** @param inputFile* @param outputFile* @param text*///pdf格式 动态 xy坐标轴 斜体居中public static void addWaterMark2(String inputFile, String outputFile, String text) {try {PdfReader reader = new PdfReader(inputFile);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));//这里的字体设置比较关键,这个设置是支持中文的写法BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体int total = reader.getNumberOfPages() + 1;PdfContentByte under;Rectangle pageRect = null;for (int i = 1; i < total; i++) {pageRect = stamper.getReader().getPageSizeWithRotation(i);// 计算水印X,Y坐标float x = pageRect.getWidth() / 2;float y = pageRect.getHeight() / 2;// 获得PDF最顶层under = stamper.getOverContent(i);under.saveState();// set TransparencyPdfGState gs = new PdfGState();// 设置透明度为0.8gs.setFillOpacity(0.8f);under.setGState(gs);under.beginText();under.setFontAndSize(base, 40);under.setColorFill(BaseColor.GRAY);// 水印文字成45度角倾斜under.showTextAligned(Element.ALIGN_CENTER, text, x, y, 45);// 添加水印文字under.endText();under.setLineWidth(1f);under.stroke();under.restoreState();}stamper.close();} catch (Exception e) {e.printStackTrace();}}
}

二、给excel添加斜体水印

package com.example.pdfshuiying.excel;import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePartName;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;public class news0613 {public static void main(String[] args) throws Exception {//图片水印  1.图片存放路径 2.水印文字 3.图片类型new news0613().addWatermark("C:\\Users\\zhyyds\\Desktop\\ik\\test\\watermarkImg.png", "ask创作 2022-06-12 23:37:56", "png");//放置excel里  1.原地址  2.新存放地址  3.图片地址new news0613().addWatermarkExcel("C:\\Users\\zhyyds\\Desktop\\ik\\test\\1.xlsx","C:\\Users\\zhyyds\\Desktop\\ik\\test\\5.xlsx","C:\\Users\\zhyyds\\Desktop\\ik\\test\\watermarkImg.png");}/*** @param in  原路径* @param out 放置路径* @param img 图片路径*/private void addWatermarkExcel(String in, String out, String img) throws Exception {try (FileOutputStream fileOutputStream = new FileOutputStream(new File(out));InputStream image = new FileInputStream(img);XSSFWorkbook workbook = new XSSFWorkbook(in);) {int pictureIdx = workbook.addPicture(image, Workbook.PICTURE_TYPE_PNG);POIXMLDocumentPart poixmlDocumentPart = workbook.getAllPictures().get(pictureIdx);for (int i = 0; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表XSSFSheet sheet = workbook.getSheetAt(i);PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();String relType = XSSFRelation.IMAGES.getRelation();//add relation from sheet to the picture dataPackageRelationship pr = sheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType, null);//set background picture to sheetsheet.getCTWorksheet().addNewPicture().setId(pr.getId());}workbook.write(fileOutputStream);} catch (Exception e) {System.out.println("e" + e);}}/*** @param tarImgPath       保存的图片路径* @param waterMarkContent 水印内容* @param fileExt          图片格式* @return void* @description*/public void addWatermark(String tarImgPath, String waterMarkContent, String fileExt) {//1.创建白色背景板空白图片int blankWidth = 1000, blankHeight = 600;// 设置背景宽高.BufferedImage bufImg = new BufferedImage(blankWidth, blankHeight, BufferedImage.TYPE_INT_RGB);Graphics graphics = bufImg.getGraphics();// 获取图形上下文对象graphics.fillRect(0, 0, blankWidth, blankHeight);// 填充graphics.fillRect(0, 0, blankWidth, blankHeight);// 填充graphics.dispose();// 释放资源//2.设置水印基本信息Font font = new Font("#404040", Font.BOLD, 34);//水印字体,大小Color markContentColor = Color.GRAY;//水印颜色Integer degree = -45;//设置水印文字的旋转角度float alpha = 0.6f;//设置水印透明度 默认为1.0  值越小颜色越浅try (OutputStream outImgStream = new FileOutputStream(tarImgPath);) {// 加水印Graphics2D g = bufImg.createGraphics();//得到画笔g.setColor(markContentColor); //设置水印颜色g.setFont(font);              //设置字体g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, alpha));//设置水印文字透明度g.rotate(Math.toRadians(degree), (double) bufImg.getWidth(), (double) bufImg.getHeight());//设置水印旋转JLabel label = new JLabel(waterMarkContent);FontMetrics metrics = label.getFontMetrics(font);int width = metrics.stringWidth(label.getText());//文字水印的宽g.drawString(waterMarkContent, 510, -100);g.dispose();// 释放资源// 输出图片ImageIO.write(bufImg, fileExt, outImgStream);} catch (Exception e) {e.printStackTrace();e.getMessage();}}}

poi完成word、excel、pdf添加斜体水印相关推荐

  1. 使用POI编辑Word文档添加文字水印

    目录 背景 依赖 实现代码 效果 背景 近期客户提出一个上传文件时自动添加文字水印的功能,其中关于word文档加水印,网上现有的解决方案都有问题,本文参考java实现word文档(docx)添加水印这 ...

  2. java实现word和pdf添加文字水印

    相关jar包 链接:https://pan.baidu.com/s/1VkcCsKIqSHlg5vwIOHoHeg 提取码:ju96 实现代码 import com.itextpdf.text.Bas ...

  3. java操作word/excel/pdf等文件技术方案

    最近项目中遇到很多对word/excel/pdf等文件的操作,解决方案有好多,开源免费有:利用openoffice组件(需要安装openoffice软件),poi,itext等.也有收费的服务:asp ...

  4. txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx

    JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例??2012-06-2 ...

  5. java全文检索word中的内容_搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结...

    搜索引擎时对WORD,EXCEL,PDF,POWERPOINT文件全文检索的总结 (2012-02-12 16:31:59) 标签: pdf文档 幻灯片 pdf文件 全文检索 控件 it JAVA读取 ...

  6. office 文档 在线预览功能实现(word,excel,pdf,ppt等多种格式)——使用https://view.xdocin.com/view 提示文档过期——基础积累

    web实现office文档在线预览功能--基础积累 最近遇到一个需求,就是要实现多种文档链接的在线预览,最简单的方式就是通过window.open(url地址)的方式来实现. 但是如果要求是在一个弹窗 ...

  7. java -PDF添加文本水印与图片水印

    java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30;public static voidwaterMark(String ...

  8. Web方式预览Office/Word/Excel/pdf文件解决方案

    Web方式预览Office/Word/Excel/pdf文件解决方案 参考文章: (1)Web方式预览Office/Word/Excel/pdf文件解决方案 (2)https://www.cnblog ...

  9. java springboot使用itext 为PDF添加文字水印并铺满屏

    java springboot使用itextpdf 为PDF添加文字水印并铺满屏 代码如下 如果对你有帮助希望你能点个赞 结尾 这是我第一次发博客,也是第一次使用itext添加水印.遇到一些大大小小的 ...

  10. 在线查看word,excel,pdf文件解决

    眼看着项目要结束,提出新的需求(-_-!!习惯成自然了)需要支持在线查看word,excel,pdf文件,网页中嵌套word的时候,不让word文档占据整个网页,页面内还要有审批等功能,第一感觉想到控 ...

最新文章

  1. python中for语句涉及的序列可以是关系表达式吗_为什么我可以在Python for循环中为迭代器和序列使用相同的名称?...
  2. 微信小程序|开发实战篇之三
  3. oracle中sql语句 日期加减,SQL语句里对日期进行相加减
  4. Java语言实现查找最长前缀
  5. iOS /clang:-1: linker command failed with exit code 1 (use -v to see invocation) 报错
  6. 演化博弈的仿真分析 基于matlab
  7. 自然电位测井 基本原理、测量方法、曲线规律、曲线用途
  8. c语言编译bss和data,.bss段和.data段的区别
  9. 打开设备管理器找不到Android Composite ADB Interface
  10. 计算机网络1-6合集
  11. 解决eclipse neno在线下载安装缓慢及失败的问题
  12. 计算机组成原理ACC MQ,计算机组成原理讲案第一章.ppt
  13. 即插即用demo系列——文本相似度比较
  14. IOS证书申请最新版2021
  15. logback修改第三方包日志打印
  16. Python爬取张家界风景美图
  17. TL431驱动三线PT100热电阻电路设计(转)
  18. 数据结构——左子右兄二叉树
  19. 【Axure视频教程】随机函数random
  20. 精致少女动漫人物怎么画?美术集分享最基础简单的动漫画法~

热门文章

  1. Pytorch向量各个元素的n次方求和
  2. 怎样使用Excel填充柄的作用与功能
  3. Android 退出登录实现
  4. android找不到华为推送,Android 华为推送 android 10.0 获取不到token
  5. STM8 低功耗设计
  6. LimeSDR官方系列教程(二):LMS7002M RX和I/Q
  7. Kafka 麒麟先生_近百位超人气嘉宾出席元旦萤火虫 重磅新企划蓄势待发!
  8. Android多开框架优化游戏防闪思路
  9. 访问共享服务器的没有权限文件夹权限设置,访问共享文件夹的时候提示没有权限访问网络资源怎么解决...
  10. 数据结构 栈的结构特点及基本操作