java 转换xml格式的doc或docx文档为docx以及docx转PDF
转换xml格式的doc或docx文档为docx
import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;import java.io.FileInputStream;
import java.io.FileOutputStream;/*** @author yichuan@iscas.ac.cn* @version 1.0* @date 2022/8/17 10:48* 转换xml格式的doc或docx文档为docx*/
public class XmlDocToDocxUtil {public static void main(String[] args) {XmlDocToDocxUtil.invoke("C:\\Users\\x\\Desktop\\半年报20210607091824.docx");}/*** 转换执行方法,转换后和原始路径** @param xmlPath 原始路径*/public static String invoke(String xmlPath) {if (xmlPath.endsWith(".doc") || xmlPath.endsWith(".docx")) {//不仅可以将doc转为docx,还可以将freemarker生成的xml类型的docx转为正常的文档String docxPath = xmlPath.replaceAll("(\\.docx)|(\\.doc)", ".docx");try (FileInputStream inputStream = new FileInputStream(xmlPath);) {WordprocessingMLPackage wmlPackage = Docx4J.load(inputStream);//转换为DOCXtry (FileOutputStream docx = new FileOutputStream(docxPath);) {Docx4J.save(wmlPackage, docx, Docx4J.FLAG_SAVE_ZIP_FILE);xmlPath = docxPath;}} catch (Exception e) {System.out.println((xmlPath + ":不需要转换:" + e.getLocalizedMessage()));}}System.out.println("WORD 路径:" + xmlPath);return xmlPath;}
}
依赖
<!-- xmlDoc转docx--><dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId><version>3.2.1</version></dependency>gradle版本
//报告- xmlDoc转docximplementation (group: 'org.docx4j', name: 'docx4j', version: '3.2.1'){exclude group: 'org.slf4j',module:'slf4j-api'}implementation group: 'com.sun.xml.bind', name: 'jaxb-impl', version: '2.2.3-1'
docx转PDF
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.*;/*** @author yichuan@iscas.ac.cn* @version 1.0* @date 2022/8/17 10:48*/
public class DocxToPDFConverter {public static void main(String[] args) {String outpath = "C:\\Users\\x\\Desktop\\半年报20210607091824.docx";String docxPath = XmlDocToDocxUtil.invoke(outpath);try {InputStream source = new FileInputStream(docxPath);OutputStream target = new FileOutputStream("C:\\Users\\x\\Desktop\\半年报20210607091824.pdf");PdfOptions options = PdfOptions.create();DocxToPDFConverter converter = new DocxToPDFConverter(source, target, true, true);converter.convert();} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}private long startTime;private long startOfProcessTime;protected InputStream inStream;protected OutputStream outStream;protected boolean showOutputMessages = false;protected boolean closeStreamsWhenComplete = true;public DocxToPDFConverter(InputStream inStream, OutputStream outStream,boolean showMessages, boolean closeStreamsWhenComplete) {this.inStream = inStream;this.outStream = outStream;this.showOutputMessages = showMessages;this.closeStreamsWhenComplete = closeStreamsWhenComplete;}public void convert() throws Exception {loading();XWPFDocument document = new XWPFDocument(inStream);PdfOptions options = PdfOptions.create();processing();PdfConverter.getInstance().convert(document, outStream, options);finished();}private void startTime() {startTime = System.currentTimeMillis();startOfProcessTime = startTime;}protected void loading() {sendToOutputOrNot(String.format("\nLoading stream\n\n"));startTime();}protected void processing() {long currentTime = System.currentTimeMillis();long prevProcessTook = currentTime - startOfProcessTime;sendToOutputOrNot(String.format("Load completed in %1$dms, now converting...\n\n", prevProcessTook));startOfProcessTime = System.currentTimeMillis();}protected void finished() {long currentTime = System.currentTimeMillis();long timeTaken = currentTime - startTime;long prevProcessTook = currentTime - startOfProcessTime;startOfProcessTime = System.currentTimeMillis();if (closeStreamsWhenComplete) {try {inStream.close();outStream.close();} catch (IOException e) {//Nothing done}}sendToOutputOrNot(String.format("Conversion took %1$dms.\n\nTotal: %2$dms\n", prevProcessTook, timeTaken));}private void sendToOutputOrNot(String toBePrinted) {if (showOutputMessages) {actuallySendToOutput(toBePrinted);}}protected void actuallySendToOutput(String toBePrinted) {System.out.println(toBePrinted);}
}
<!-- docx转pdf--><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.pdf</artifactId><version>1.0.5</version></dependency>
java 转换xml格式的doc或docx文档为docx以及docx转PDF相关推荐
- doc转docx文件会乱吗_为什么word文档打开是乱码.docx
2019年为什么word文档打开是乱码 篇一:word文档变成乱码的两种解决方法 ? word文档变成乱码的两种解决方法 ? 一.文档格式法 ? 这种方法是将损坏的Word文档转换为另一种格式,然后再 ...
- 如何使用freeMarker生成doc、docx文档
如何使用freeMarker生成doc.docx.pdf文件 freeMarker是什么 doc和docx有什么区别 如何生成doc文档(带图片) 如何生成docx文档,以及将其生成pdf文档 fre ...
- 利用DOCX文档远程模板注入执行宏代码
利用DOCX文档远程模板注入执行宏代码 简介 本地文件中在没有宏代码的情况下,攻击者可以尝试执行远程文件中宏代码.其中来自APT28的最新样本将此技术展现的淋漓尽致.该样本是docx文件,文件内没有任 ...
- python实现docx文档首行缩进2字符
下面是一个示例代码,它使用 python-docx 库来实现 docx 文档的首行缩进 2 字符: from docx import Document# 打开一个 docx 文档 document = ...
- Java web/springboot上传word/doc/docx文档(含图片)与HTML富文本导入/导出互相转换解析!附项目源码
测试效果 先看下效果 文档内容如下: 上传 上传docx文档 查看解析内容 <html><head><style>p{margin-top:0pt;margin-b ...
- java利用Freemarker模板生成格式友好的doc或者docx文档
之前写过一篇利用Freemarker模板生成doc的博客,不过那个博客有点缺陷,不支持生成docx格式的文档.所以,这里补充一篇,生成docx或doc格式的文档以具体的docx模板或者doc模板为主. ...
- 读取/书写Java的XML格式properties文件
转载自 读取/书写Java的XML格式properties文件 在JDK5中,properties文件的格式可以由XML构成,这里给出了一个读取/书写XML格式properties文件的例子. 因为 ...
- docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...
每天12:18准时给大家惊喜! 大家好!我是好奇仔,热衷于搜罗和分享各种好用.实用的软件神器和资源,有手机软件.办公软件.APP,还有网站资源-- 来自:芒种学院(ID:lazy_info) 作者: ...
- unity向服务器发送xml文件格式,Unity读取Excel文件转换XML格式文件的方法
Unity读取Excel文件转换XML格式文件的方法 发布时间:2020-06-23 09:34:33 来源:亿速云 阅读:107 作者:清晨 不懂Unity读取Excel文件转换XML格式文件的方法 ...
最新文章
- Android onMeasure过程分析
- linux shell Bad substitution
- python xmxl 无法启动_/usr/bin/python: can't decompress data; zlib not available 的异常处理
- 作为面试官的一点小感想
- 组织敏捷之路上的七点体会
- Python 序列操作之切片
- Gym - 215177C 玩游戏
- 某个知名技术论坛用户名和密码泄露(第一部分)
- 设置blender界面语言为中文以及字体大小设置之方法
- 「leetcode」202. 快乐数:今天你快乐了么?
- 华为note10能更新鸿蒙系统吗,华为官方再次确认!荣耀手机也能升级鸿蒙OS系统:内测机型遭到曝光...
- C# 节约里程法实现
- 华为智能手环智能手表软件测试,Huawei WatchFace Designer(华为手表表盘开发工具) V10.0.1.16 官方测试版...
- 中通2008通信概预算编制系统简介
- 感应封盖机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 如何跳过b站的充电鸣谢?
- 中国菜刀使用教程--ctf 文件上传
- ukf 在matlab 下的实现,ukf在matlab下的实现
- Cravatar:WordPress网站Gravatar头像完美替代方法
- oracle分区表创建——实现重新定义普通表为分区表