转换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相关推荐

  1. doc转docx文件会乱吗_为什么word文档打开是乱码.docx

    2019年为什么word文档打开是乱码 篇一:word文档变成乱码的两种解决方法 ? word文档变成乱码的两种解决方法 ? 一.文档格式法 ? 这种方法是将损坏的Word文档转换为另一种格式,然后再 ...

  2. 如何使用freeMarker生成doc、docx文档

    如何使用freeMarker生成doc.docx.pdf文件 freeMarker是什么 doc和docx有什么区别 如何生成doc文档(带图片) 如何生成docx文档,以及将其生成pdf文档 fre ...

  3. 利用DOCX文档远程模板注入执行宏代码

    利用DOCX文档远程模板注入执行宏代码 简介 本地文件中在没有宏代码的情况下,攻击者可以尝试执行远程文件中宏代码.其中来自APT28的最新样本将此技术展现的淋漓尽致.该样本是docx文件,文件内没有任 ...

  4. python实现docx文档首行缩进2字符

    下面是一个示例代码,它使用 python-docx 库来实现 docx 文档的首行缩进 2 字符: from docx import Document# 打开一个 docx 文档 document = ...

  5. Java web/springboot上传word/doc/docx文档(含图片)与HTML富文本导入/导出互相转换解析!附项目源码

    测试效果 先看下效果 文档内容如下: 上传 上传docx文档 查看解析内容 <html><head><style>p{margin-top:0pt;margin-b ...

  6. java利用Freemarker模板生成格式友好的doc或者docx文档

    之前写过一篇利用Freemarker模板生成doc的博客,不过那个博客有点缺陷,不支持生成docx格式的文档.所以,这里补充一篇,生成docx或doc格式的文档以具体的docx模板或者doc模板为主. ...

  7. 读取/书写Java的XML格式properties文件

    转载自  读取/书写Java的XML格式properties文件 在JDK5中,properties文件的格式可以由XML构成,这里给出了一个读取/书写XML格式properties文件的例子. 因为 ...

  8. docx文档怎么排列图片_格式转换太麻烦?仅需一行命令,搞定图片、音频、视频、文本批量转换!...

    每天12:18准时给大家惊喜! 大家好!我是好奇仔,热衷于搜罗和分享各种好用.实用的软件神器和资源,有手机软件.办公软件.APP,还有网站资源-- 来自:芒种学院(ID:lazy_info)  作者: ...

  9. unity向服务器发送xml文件格式,Unity读取Excel文件转换XML格式文件的方法

    Unity读取Excel文件转换XML格式文件的方法 发布时间:2020-06-23 09:34:33 来源:亿速云 阅读:107 作者:清晨 不懂Unity读取Excel文件转换XML格式文件的方法 ...

最新文章

  1. Android onMeasure过程分析
  2. linux shell Bad substitution
  3. python xmxl 无法启动_/usr/bin/python: can't decompress data; zlib not available 的异常处理
  4. 作为面试官的一点小感想
  5. 组织敏捷之路上的七点体会
  6. Python 序列操作之切片
  7. Gym - 215177C 玩游戏
  8. 某个知名技术论坛用户名和密码泄露(第一部分)
  9. 设置blender界面语言为中文以及字体大小设置之方法
  10. 「leetcode」202. 快乐数:今天你快乐了么?
  11. 华为note10能更新鸿蒙系统吗,华为官方再次确认!荣耀手机也能升级鸿蒙OS系统:内测机型遭到曝光...
  12. C# 节约里程法实现
  13. 华为智能手环智能手表软件测试,Huawei WatchFace Designer(华为手表表盘开发工具) V10.0.1.16 官方测试版...
  14. 中通2008通信概预算编制系统简介
  15. 感应封盖机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  16. 如何跳过b站的充电鸣谢?
  17. 中国菜刀使用教程--ctf 文件上传
  18. ukf 在matlab 下的实现,ukf在matlab下的实现
  19. Cravatar:WordPress网站Gravatar头像完美替代方法
  20. oracle分区表创建——实现重新定义普通表为分区表

热门文章

  1. 我的linux命令手册
  2. 从Copyright到Copyleft,聊聊版权与开源协议
  3. html系列之video标签设置圆形
  4. Python如何用TKinter搭建图形界面窗口,并通过多进程的方式调用功能函数
  5. 椭圆、双曲线、抛物线
  6. java 获取permgen_java – 如何查看PermGen中存储的确切内容?
  7. Discuz远程代码执行(CVE-2019-13956)
  8. MATLAB 制作抖音同款炫光海报
  9. vscode快速生成 HTML5代码
  10. 游戏浅谈3-帝国荣耀