首页 > 编程语言 >doc转docx(java-python)

doc转docx(java-python)

时间:2024-07-08 11:56:01浏览次数:16  
标签:docx String python doc convert docxFilePath docFilePath

本文功能借助 python实现的doc转docx,调研了一下开源的工具或者类库转换效果不理想,所以选择python

 

1. /resources/convert.py(py文件放到resources下)

import argparse
from doc2docx import convert

def convert_doc_to_docx(docFilePath, docxFilePath):
    convert(docFilePath, docxFilePath)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Convert a .doc file to .docx')
    parser.add_argument('input', help='Input .doc file path')
    parser.add_argument('output', help='Output .docx file path')
    args = parser.parse_args()

    convert_doc_to_docx(args.input, args.output)

2. java相关代码-installPythonPackage

    private static void installPythonPackage() {
        String command = "pip install doc2docx";

        try {
            Process process = Runtime.getRuntime().exec(command);
            int exitCode = process.waitFor();
            if (exitCode != 0) {
                System.out.println("Package installation failed with exit code: " + exitCode);
            } else {
                System.out.println("Package installed successfully.");
            }
        } catch (IOException | InterruptedException e) {
            System.out.println("An error occurred during package installation:");
            e.printStackTrace();
        }
    }

 

3. java相关代码-convertDocToDocx

public static void convertDocToDocx(String docFilePath, String docxFilePath) throws IOException, InterruptedException {
        // 获取资源文件输入流
        InputStream in = Doc2DocxUtil.class.getClassLoader().getResourceAsStream("convert.py");
        if (in == null) {
            throw new IllegalArgumentException("Script file not found");
        }

        // 创建临时文件
        Path temp = Files.createTempFile("script", ".py");
        File tempFile = temp.toFile();
        // 确保临时文件在 JVM 退出时会被删除
        tempFile.deleteOnExit();
        // 将资源文件复制到临时文件
        FileUtils.copyInputStreamToFile(in, tempFile);

        ProcessBuilder pb = new ProcessBuilder("python", tempFile.getAbsolutePath(), docFilePath, docxFilePath);
        Process p = pb.start();  
        int exitCode = p.waitFor();  
        if (exitCode != 0) {
            throw new RuntimeException("Python script execution failed with exit code " + exitCode);
        }
    }

 

4. Doc2DocxUtil类中增加静态代码块

    static{
        installPythonPackage();
    }

 

 

5. main方法

    public static void main(String[] args) throws Exception {
        String libreOfficePath="D:\\Program Files\\LibreOffice\\program\\soffice.exe";
        String docFilePath = "D:\\yy\\xxx.doc";
        String docxFilePath = "D:\\yy\\xxx.docx";

        convertDocToDocx(docFilePath,docxFilePath);
    }

 

标签:docx,String,python,doc,convert,docxFilePath,docFilePath
From: https://www.cnblogs.com/QAZLIU/p/18289511

相关文章

  • docx转html方案验证-支持latex,表格,图片(aspose)
    方案总结:1:poi(html属性支持)存在一个bug,对于table中的cell中既有文本又有图片的在转化后图片丢失2:tika(主要是提取内容,转换出来的html不太好)3.openoffice(依赖安装,转出的html不太好)4.aspose(功能强大但是付费),但也可以免费使用,缺点:不支持扩展原因代码不是开源的5.mamm......
  • docx转html方案验证-支持latex,表格,图片(poi)
    方案总结:1:poi(html属性支持)存在一个bug,对于table中的cell中既有文本又有图片的在转化后图片丢失2:tika(主要是提取内容,转换出来的html不太好)3.openoffice(依赖安装,转出的html不太好)4.aspose(功能强大但是付费),但也可以免费使用,缺点:不支持扩展原因代码不是开源的5.mamm......
  • python-requests库
    request库里边传参时params和data和json的区别:params=params是get请求的参数,传入后等同于'https:xx.com/search?q=python&cat=1001'data是post请求的参数,.post(url,data=params),使用application/x-www-form-urlencoded编码json是post请求的参数:.post(url,json=params),内部自......
  • python装饰器
    #装饰器:为了增强某个func的功能,但又不修改func的内部实现。装饰器是"a=func()的拓展延申:函数对象可以赋值给变量"#写法:def装饰器名(被修饰的func名):defwrapper(*args,**kw):func(*args,**kw)。以下是装饰器的基本实现#装饰器基础使用:对func函数装饰#把@decorate放到f......
  • 用Python动手学机器学习
    代码和PDF等:GitHub-guozhe1992/read学习环境的搭建:书中首先指导读者如何搭建学习机器学习的Python环境,包括必要的库和工具的安装与配置。Python基础知识:介绍Python编程的基础知识,包括变量、数据类型、控制流、函数等,为后续的机器学习编程打下基础。机器学习基础知识:阐述机器......
  • 单链表在Python中的实现技巧详解
    概要链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据域和一个指向下一个节点的指针。链表的优点是插入和删除操作非常高效,特别是在需要频繁修改数据结构的情况下。本文将详细介绍如何在Python中创建单链表,并包含相应的示例代码,帮助全面掌握这一基础而重要......
  • Python数据预处理技术指南大全【文末送书】
    文章目录Python数据预处理技术指南Python数据预处理【文末送书】Python数据预处理技术指南数据预处理是数据分析和机器学习工作流中非常关键的一步。通过对原始数据进行清洗、转换和格式化,能大幅提升模型的性能和准确性。本篇文章将介绍一些常用的Python数据预处理......
  • Python 进度条tqdm
     在编写Python脚本时,尤其是那些需要处理大量数据或者执行耗时操作的脚本,监控任务进度是非常重要。tqdm的安装pipinstalltqdm-ihttps://pypi.tuna.tsinghua.edu.cn/simple/基本用法fromtqdmimporttqdmimporttimeforiintqdm(range(100)):time.slee......
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
    Docker是一种开源的容器化平台,用于构建、部署和管理应用程序。它采用了轻量级的虚拟化技术,允许将应用程序及其依赖包装在一个独立的容器中,以便于在不同的环境中运行。Docker的主要优势包括:1.轻量级和快速启动:Docker容器与传统虚拟化相比更轻量级,可以在几秒钟内启动和停止。......
  • SSM-企业人事信息管理系统-98194(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、
    企业人事信息管理系统的设计与实现摘 要由于数据库和数据仓库技术的快速发展,企业人事信息管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。人事管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。企业人事......