springboot中word转pdf,加盖电子印章

您所在的位置:网站首页 word加盖电子印章 springboot中word转pdf,加盖电子印章

springboot中word转pdf,加盖电子印章

2023-03-25 07:47| 来源: 网络整理| 查看: 265

概述

在开发过程中,word转pdf的方式有很多种有jar包的方式,有安装openoffice的方式,但是使用有的jar包有license认证,不然会生成水印,综合几种方法我采用了libreoffice的方式

本项目为springboot项目

依赖包 org.jodconverter jodconverter-spring-boot-starter 4.1.0 org.libreoffice juh 5.4.2 org.libreoffice jurt 5.4.2 org.libreoffice ridl 5.4.2 org.libreoffice unoil 5.4.2 application.yml配置 jodconverter: enabled: true #office-home: /opt/libreoffice7.0 port-numbers: 8200 max-tasks-per-process: 100 working-dir: office-home: C:\Program Files\LibreOffice java代码

在类中引入DocumentConverter

@Resource private DocumentConverter documentConverter; //在使用处使用 documentConverter.convert(new File(sourcePath)).to(new File(targetPath)).execute(); docker制作libreoffice镜像

在linux中配置libreoffcie,因为这边采用了docker,所以这边简单介绍下,docker中如何制作libreoffice镜像,并发布项目

首先准备Dockerfile文件,该镜像是以基于centos7版本镜像(注:没有扩展名)

#基于centos7版本镜像 FROM centos:7 #以下设置中文语言环境与修改时区 ENV LANG=zh_CN.UTF-8 \ LANGUAGE=zh_CN:zh \ LC_ALL=zh_CN.UTF-8 RUN yum update -y && \ yum reinstall -y glibc-common && \ yum install -y telnet net-tools && \ yum clean all && \ rm -rf /tmp/* rm -rf /var/cache/yum/* && \ localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #加入windows字体包 ADD chinese.tar.gz /usr/share/fonts/ #将下载好的包解压到相应文件下 ADD LibreOffice_7.0.1_Linux_x86-64_rpm.tar.gz /home/ #执行安装 RUN cd /home/LibreOffice_7.0.1.2_Linux_x86-64_rpm/RPMS/ \ && yum localinstall *.rpm -y \ #安装依赖 && yum install ibus -y \ #加入中文字体支持并赋权限 && cd /usr/share/fonts/ \ && chmod -R 755 /usr/share/fonts \ && yum install mkfontscale -y \ && mkfontscale \ && yum install fontconfig -y \ && mkfontdir \ && fc-cache -fv \ && mkdir /usr/local/java/ \ #清理缓存,减少镜像大小 && yum clean all #加入安装java环境 ADD jdk-8u121-linux-x64.tar.gz /usr/local/java/ RUN ln -s /usr/local/java/jdk1.8.0_121 /usr/local/java/jdk #配置环境变量 ENV JAVA_HOME /usr/local/java/jdk ENV JRE_HOME ${JAVA_HOME}/jre ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib ENV PATH ${JAVA_HOME}/bin:$PATH CMD ["bash"]

还有chinese.tar.gz,jdk-8u121-linux-x64.tar.gz,LibreOffice_7.0.1_Linux_x86-64_rpm.tar.gz这些包,需要和Dockerfile文件放在同一目录下 执行

相关文件下载方式:

链接:https://pan.baidu.com/s/18XjsvvrJfsle9DEcDJKQUQ 提取码:9hke

docker build -t libreoffice:v1 .

命令,注意后边有一个点

另外部署你所要用到libreoffice的项目,相应的Dockerfile文件:

FROM libreoffice:v1 VOLUME /tmp ADD xxx.jar/ app.jar RUN bash -c 'touch /app.jar' ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone EXPOSE 9501 ENTRYPOINT ["java","-Xmx640M","-Xms640M","-Xmn240M","-XX:MaxMetaspaceSize=192M","-XX:MetaspaceSize=192M","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

并执行

docker build -t xxx .

然后启动容器即可使用。

加盖印章 概述

加盖印章是在转为pdf的情况下,进行加盖的,采用的技术是itext,该加盖电子印章的优点是相较于之前划定区域来加盖印章的方式来说,可以通过关键字来定位盖章的区域,并根据x轴和y轴的偏移量来调整相对位置,来实现。

之前划定区域的方式也可以,但是如果文档加盖印章的上方,如果写了内容,导致下边文档向下移动,这样会将章的位置盖偏,达不到想要的效果;

相关依赖 com.itextpdf itext-asian 5.2.0

GetKeyWordPosition.java

import com.itextpdf.awt.geom.Rectangle2D; import com.itextpdf.text.pdf.PdfDictionary; import com.itextpdf.text.pdf.PdfName; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.*; public class GetKeyWordPosition { public static void main(String[] args) throws IOException { //1.给定文件 File pdfFile = new File("C:\\Users\\xxx\\Desktop\\结题报告.pdf"); //2.定义一个byte数组,长度为文件的长度 byte[] pdfData = new byte[(int) pdfFile.length()]; //3.IO流读取文件内容到byte数组 FileInputStream inputStream = null; try { inputStream = new FileInputStream(pdfFile); inputStream.read(pdfData); } catch (IOException e) { throw e; } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { } } } //4.指定关键字 String keyword = "公章"; //5.调用方法,给定关键字和文件 List positions = findKeywordPostions(pdfData, keyword); //6.返回值类型是 List 每个list元素代表一个匹配的位置,分别为 float[0]所在页码 float[1]所在x轴 float[2]所在y轴 System.out.println("total:" + positions.size()); if (positions != null && positions.size() > 0) { for (float[] position : positions) { System.out.print("pageNum: " + (int) position[0]); System.out.print("\tx: " + position[1]); System.out.println("\ty: " + position[2]); } } } /** * findKeywordPostions * @param pdfData 通过IO流 PDF文件转化的byte数组 * @param keyword 关键字 * @return List : float[0]:pageNum float[1]:x float[2]:y * @throws IOException */ public static List findKeywordPostions(byte[] pdfData, String keyword) throws IOException { List result = new ArrayList(); List pdfPageContentPositions = getPdfContentPostionsList(pdfData); for (PdfPageContentPositions pdfPageContentPosition : pdfPageContentPositions) { List charPositions = findPositions(keyword, pdfPageContentPosition); if (charPositions == null || charPositions.size() < 1) { continue; } result.addAll(charPositions); } return result; } private static List getPdfContentPostionsList(byte[] pdfData) throws IOException { PdfReader reader = new PdfReader(pdfData); List result = new ArrayList(); int pages = reader.getNumberOfPages(); for (int pageNum = 1; pageNum


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3