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