Java调用py或者exe文件实现Word转PDF

 更新时间:2025年03月05日 10:40:21   作者:krls_shany  
这篇文章主要为大家详细介绍了Java如何调用py或者exe文件实现Word转PDF效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解下

前言

有次上班时小伙伴和我吐槽Java实现word转pdf太麻烦,我灵机一动Java调用python,python实现转换操作不就行了。

开发环境

Java:JDK1.8

python:3.12

代码

Python代码

import docx2pdf
import sys
import glob
import os
import comtypes
import comtypes.client
 
 
def w2ps(d):
    word_file = d
    pdf_file = d.replace('.docx', '.pdf').replace('.doc', '.pdf')
    docx2pdf.convert(word_file, pdf_file)
    print(f"转换完成,PDF文件已保存为:{pdf_file}")
 
 
def each():
    # 获取当前工作目录
    current_directory = os.getcwd()
 
    # 使用glob查找所有.doc文件
    doc_files = glob.glob(os.path.join(current_directory, '*.doc'))
    doc_files1 = glob.glob(os.path.join(current_directory, '*.docx'))
 
    # 遍历文件列表并打印文件路径
    if len(doc_files) > 0:
        # 初始化 Word 应用程序
        word = comtypes.client.CreateObject('Word.Application')
        word.Visible = False  # 不显示 Word 界面
        for file_path in doc_files:
            doc = word.Documents.Open(file_path)
            # 导出为 PDF
            doc.SaveAs(file_path.replace('.doc', '.pdf'), FileFormat=17)  # 17 是 PDF 格式的代码
            doc.Close()
        word.Quit()
        # w2ps(file_path)
    for file_path in doc_files1:
        w2ps(file_path)
 
 
if __name__ == "__main__":
    if len(sys.argv) > 1:
        w2ps(sys.argv[1])
    else:
        each()
    sys.exit()

Java代码

import java.io.IOException;
 
public class PythonCaller {
 
    public static void main111(String[] args) {
        String pythonScriptPath = "D:\\WorkSpace\\python\\pycorrector-master\\shany\\W2P.py"; // Python脚本的路径
        String wordFilePath = "E:\\新建文件夹 (22)\\问题排查.docx"; // 要转换的Word文件的路径
 
        try {
            String command = "python " + pythonScriptPath + " \"" + wordFilePath+"\"";
            Process process = Runtime.getRuntime().exec(command);
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        String executablePath = "D:\\新建文件夹\\a\\W2P.exe"; // 替换为你的a.exe文件的实际路径
        String wordFilePath = "E:\\新建文件夹 (22)\\问题排查.docx"; // 替换为你的Word文件路径
 
        try {
            // 将Word文件路径作为命令行参数传递给a.exe
            String[] command = {executablePath, wordFilePath};
            Process process = Runtime.getRuntime().exec(command);
 
            // 等待进程完成
            int exitCode = process.waitFor();
            System.out.println("Process exited with code " + exitCode);
 
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

备注

这里的python文件后来为了防止缺少三方依赖,单独打包成exe文件。Java代码中额外加了对exe文件的调用。

因为doc转pdf的类库没找到,这里处理逻辑改为如果是doc文件,就调用Microsoft Word进行转换。

打包py为exe时,必须指定引入comtypes.client,打包命令如下

pyinstaller --onefile --noconsole --hidden-import=comtypes.stream wwp.py

这段命令解析:把一个叫做wwp.py的文件转换为exe,额外引入comtypes.client,不显示命令行窗口(--noconsole)

拓展

顺手额外写了一个pdf转word的,功能用法基本一样

from pdf2docx import Converter
import sys
import glob
import os
 
 
def pdf_to_word(pdf_path, word_path):
    cv = Converter(pdf_path)
    cv.convert(word_path, start=0, end=None)
    cv.close()
 
 
def p2ws(file_path):
    pdf_file = file_path
    word_file = file_path.replace('.pdf', '.docx')
    pdf_to_word(pdf_file, word_file)
    print(f"转换完成,WORD文件已保存为:{pdf_file}")
 
 
def each():
    # 获取当前工作目录
    current_directory = os.getcwd()
 
    # 使用glob查找所有.doc文件
    doc_files = glob.glob(os.path.join(current_directory, '*.pdf'))
 
    # 遍历文件列表并打印文件路径
    for file_path in doc_files:
        p2ws(file_path)
 
 
if __name__ == "__main__":
    if len(sys.argv) > 1:
        p2ws(sys.argv[1])
    else:
        each()

到此这篇关于Java调用py或者exe文件实现Word转PDF的文章就介绍到这了,更多相关Java Word转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何比较两个对象并获取不相等的字段详解

    Java如何比较两个对象并获取不相等的字段详解

    这篇文章主要给大家介绍了关于Java如何比较两个对象并获取不相等的字段以及JAVA判断(获取)两个相同对象不同的数据的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友可以参考下
    2021-11-11
  • 学习Java之Java中的异常处理机制详解

    学习Java之Java中的异常处理机制详解

    在本文中,小编将带领大家来学习Java的异常处理机制,包括异常机制、异常类型、如何捕获异常、如何抛出异常以及如何创建自定义异常等核心内容,感兴趣的同学跟着小编一起来看看吧
    2023-08-08
  • spring boot 本地图片不能加载(图片路径)的问题及解决方法

    spring boot 本地图片不能加载(图片路径)的问题及解决方法

    这篇文章主要介绍了spring boot 本地图片不能加载(图片路径)的问题,解决的办法其实很简单,只要写一个配置文件,也就是图片位置的转化器,原理是虚拟一个在服务器上的文件夹,与本地图片的位置进行匹配。需要的朋友可以参考下
    2018-04-04
  • SpringBoot中MyBatis使用自定义TypeHandler的实现

    SpringBoot中MyBatis使用自定义TypeHandler的实现

    本文主要介绍了SpringBoot中MyBatis使用自定义TypeHandler,当默认的类型映射不能满足需求时,自定义 TypeHandler 就非常有用,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Sublime Text 打开Java文档中文乱码的解决方案

    Sublime Text 打开Java文档中文乱码的解决方案

    这篇文章主要介绍了Sublime Text 中文乱码的解决方案,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12
  • 解读@SpringBootApplication注解有什么用

    解读@SpringBootApplication注解有什么用

    @SpringBootApplication是SpringBoot的核心注解,主要包含@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个注解,这些注解共同简化了Spring应用的配置工作,并使得通过主程序类就可以启动SpringBoot应用
    2024-09-09
  • JSP服务器端和前端出现乱码问题解决方案

    JSP服务器端和前端出现乱码问题解决方案

    这篇文章主要介绍了JSP服务器端和前端出现乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java简明解读代码块的应用

    Java简明解读代码块的应用

    所谓代码块是指用"{}"括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块、和同步代码块。如果在代码块前加上 synchronized关键字,则此代码块就成为同步代码块
    2022-07-07
  • Apache Commons fileUpload实现文件上传之一

    Apache Commons fileUpload实现文件上传之一

    这篇文章主要介绍了Apache Commons fileUpload实现文件上传之一的相关资料,需要的朋友可以参考下
    2016-03-03
  • Spring项目读取配置文件中文乱码的解决

    Spring项目读取配置文件中文乱码的解决

    这篇文章主要介绍了Spring项目读取配置文件中文乱码的解决方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01

最新评论