当前位置: 代码网 > it编程>编程语言>Java > Java调用py或者exe文件实现Word转PDF

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

2025年03月05日 Java 我要评论
前言有次上班时小伙伴和我吐槽java实现word转pdf太麻烦,我灵机一动java调用python,python实现转换操作不就行了。开发环境java:jdk1.8python:3.12代码pytho

前言

有次上班时小伙伴和我吐槽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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com