当前位置: 首页 > news >正文

新冠疫苗上市公司seo公司外包

新冠疫苗上市公司,seo公司外包,网站主页的要素,杭州网络推广平台1、前言(瞎扯) 有个需求:整一个给 Word 加水印的demo,于是我就网上找呗~ 看到那个 Aspose 好像是收费的,然后就把目光转向了 POI,看到各种形形色色的也不知道哪个能用。整了一会,自己拷贝出一个比较精简的能用的 demo …

1、前言(瞎扯)

有个需求:整一个给 Word 加水印的demo,于是我就网上找呗~
看到那个 Aspose 好像是收费的,然后就把目光转向了 POI,看到各种形形色色的也不知道哪个能用。整了一会,自己拷贝出一个比较精简的能用的 demo 了。

2、人狠话不多,上效果图

我一般都是直接上图的,先看效果图(每一页都有的):

水印的分布如果不理想,只能小伙伴们自行研究调整了~

在这里插入图片描述

3、人狠话不多,直接来代码

3.1、我的代码结构

目录结构

3.2 、直接贴代码了

pom 依赖的版本不要改,修改版本可能会导致一些东西缺失
代码你们可以直接复制这里的使用
或者在码云仓库:点击这里跳转

3.2.1、pom 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.lyk</groupId><artifactId>springboot-word-finger</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-word-finger</name><description>springboot-word-finger</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

3.2.2、处理工具类

import com.microsoft.schemas.office.office.CTLock;
import com.microsoft.schemas.vml.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.wp.usermodel.HeaderFooterType;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.util.stream.Stream;/*** @author: lyk* @description: Word 添加水印工具类**/
public class WatermarkUtil {private static final Logger LOGGER = LoggerFactory.getLogger(WatermarkUtil.class);/** word字体 */private static final String FONT_NAME = "宋体";/** 字体大小 */private static final String FONT_SIZE = "0.2pt";/** 字体颜色 */private static final String FONT_COLOR = "#d0d0d0";/** 一个字平均长度,单位pt,用于:计算文本占用的长度(文本总个数*单字长度)*/private static final Integer WIDTH_PER_WORD = 10;/** 与顶部的间距 */private static Integer STYLE_TOP = 0;/** 文本旋转角度 */private static final String STYLE_ROTATION = "30";/*** @param inPutPath* @param putPutPath* @param fingerText* @author: lyk* @description: 添加水印入口方法* @date: 2024/1/25 23:42**/public static void waterMarkDocXDocument(String inPutPath, String putPutPath, String fingerText) {long beginTime = System.currentTimeMillis();try (OutputStream out = new FileOutputStream(putPutPath);InputStream in = new FileInputStream(inPutPath);OPCPackage srcPackage = OPCPackage.open(in);XWPFDocument doc = new XWPFDocument(srcPackage)) {// 把整页都打上水印for (int lineIndex = -5; lineIndex < 20; lineIndex++) {STYLE_TOP = 100 * lineIndex;waterMarkDocXDocument(doc, fingerText);}// 输出新文档doc.write(out);LOGGER.info("添加水印成功!,一共耗时" + (System.currentTimeMillis() - beginTime) + "毫秒");} catch (IOException e) {throw new RuntimeException(e);} catch (InvalidFormatException e) {throw new RuntimeException(e);}}/*** 为文档添加水印* @param doc        需要被处理的docx文档对象* @param fingerText 需要添加的水印文字*/public static void waterMarkDocXDocument(XWPFDocument doc, String fingerText) {// 水印文字之间使用8个空格分隔fingerText = fingerText + repeatString(" ", 8);// 一行水印重复水印文字次数fingerText = repeatString(fingerText, 10);// 如果之前已经创建过 DEFAULT 的Header,将会复用XWPFHeader header = doc.createHeader(HeaderFooterType.DEFAULT);int size = header.getParagraphs().size();if (size == 0) {header.createParagraph();}CTP ctp = header.getParagraphArray(0).getCTP();byte[] rsidr = doc.getDocument().getBody().getPArray(0).getRsidR();byte[] rsidrDefault = doc.getDocument().getBody().getPArray(0).getRsidRDefault();ctp.setRsidP(rsidr);ctp.setRsidRDefault(rsidrDefault);CTPPr ppr = ctp.addNewPPr();ppr.addNewPStyle().setVal("Header");// 开始加水印CTR ctr = ctp.addNewR();CTRPr ctrpr = ctr.addNewRPr();ctrpr.addNewNoProof();CTGroup group = CTGroup.Factory.newInstance();CTShapetype shapeType = group.addNewShapetype();CTTextPath shapeTypeTextPath = shapeType.addNewTextpath();shapeTypeTextPath.setOn(STTrueFalse.T);shapeTypeTextPath.setFitshape(STTrueFalse.T);CTLock lock = shapeType.addNewLock();lock.setExt(STExt.VIEW);CTShape shape = group.addNewShape();shape.setId("PowerPlusWaterMarkObject");shape.setSpid("_x0000_s102");shape.setType("#_x0000_t136");// 设置形状样式(旋转,位置,相对路径等参数)shape.setStyle(getShapeStyle(fingerText));shape.setFillcolor(FONT_COLOR);// 字体设置为实心shape.setStroked(STTrueFalse.FALSE);// 绘制文本的路径CTTextPath shapeTextPath = shape.addNewTextpath();// 设置文本字体与大小shapeTextPath.setStyle("font-family:" + FONT_NAME + ";font-size:" + FONT_SIZE);shapeTextPath.setString(fingerText);CTPicture pict = ctr.addNewPict();pict.set(group);}/*** 构建Shape的样式参数** @param fingerText* @return*/private static String getShapeStyle(String fingerText) {StringBuilder sb = new StringBuilder();// 文本path绘制的定位方式sb.append("position: ").append("absolute");// 计算文本占用的长度(文本总个数*单字长度)sb.append(";width: ").append(fingerText.length() * WIDTH_PER_WORD).append("pt");// 字体高度sb.append(";height: ").append("20pt");sb.append(";z-index: ").append("-251654144");sb.append(";mso-wrap-edited: ").append("f");// 设置水印的间隔,这是一个大坑,不能用top,必须要margin-top。sb.append(";margin-top: ").append(STYLE_TOP);sb.append(";mso-position-horizontal-relative: ").append("page");sb.append(";mso-position-vertical-relative: ").append("page");sb.append(";mso-position-vertical: ").append("left");sb.append(";mso-position-horizontal: ").append("center");sb.append(";rotation: ").append(STYLE_ROTATION);return sb.toString();}/*** 将指定的字符串重复repeats次.*/private static String repeatString(String pattern, int repeats) {StringBuilder buffer = new StringBuilder(pattern.length() * repeats);Stream.generate(() -> pattern).limit(repeats).forEach(buffer::append);return new String(buffer);}
}
/*** @author lyk* @version 1.0* @date 2024/1/25 23:16* @description*/
public class Main {public static void main(String[] args) {final String inPath = "src/main/java/com/lyk/finger/doc/aaaa.docx";final String outPath = "src/main/java/com/lyk/finger/doc/out.docx";// 添加水印WatermarkUtil.waterMarkDocXDocument(inPath, outPath, "落魄程序员在线炒粉");}}

4、OK 完事~

拿去好好享用吧~

http://www.hkea.cn/news/913047/

相关文章:

  • 网页制作教程课件seo推广排名重要吗
  • 小规模纳税人企业所得税怎么征收广州seo招聘
  • 济南企业自助建站网络营销策划公司
  • iis 新建网站 要登录温州seo推广外包
  • 个人想做企业网站备案惠州seo代理商
  • 做公务员题的网站口红的推广软文
  • 福州网站建设 联系yanktcn 04上海百网优seo优化公司
  • 网站备案号如何获得网站建设营销推广
  • 物流网站开发公司西安 做网站
  • 商务信息网站怎么做网络视频营销策略有哪些
  • 社交做的最好的网站怎么开发一个网站
  • 教育品牌网站建设百度搜索推广和信息流推广
  • 虎门专业做网站对网络营销的认识有哪些
  • 投资理财培训网站建设抖音引流推广一个30元
  • 做景观设施的网站网络营销推广要求
  • 携程网站建设进度及实施过程网络营销的缺点及建议
  • 石家庄网站建设哪家专业中国联通腾讯
  • 能访问各种网站的浏览器百度一下网页搜索
  • 自己做网站花多少钱雅虎搜索
  • 哈尔滨招标信息网网站推广优化排名教程
  • 个人可以建论坛网站吗福清网络营销
  • 济南做网站优化价格百度推广网站一年多少钱
  • 做网上商城网站哪家好杭州seo靠谱
  • 做营销网站制作关键词优化课程
  • 网站移动终端建设口碑营销成功案例
  • 美国做试管婴儿 网站推广普通话宣传语
  • 网站备案信息查询系统软文发布平台媒体
  • 泊头哪给做网站的好制作网页的教程
  • 漳州建设银行网站首页在百度上打广告找谁
  • 网站免费建站k网络营销策划方案书