首页 > 学院 > 开发设计 > 正文

java调用vbs将word、excel文档转换成pdf

2019-11-14 12:59:17
字体:
来源:转载
供稿:网友

java操作Word挺不方便的,工具是有很多,但是不管如何纯java的方法效果总是不尽人意。例如doc格式转pdf这个需求我试了很多办法都不成功,最后只好另辟蹊径用外部脚本调用com组件的方式去做。毕竟对word操作能力最强大的还是office本身。 这种方法的限制在于,只能在windows服务器上运行,服务器还必须安装了合适版本的office。

实现

vbs是微软自家的东西,调用起com很简单,直接上代码:

path = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.PathSet word = CreateObject("Word.application")Set docx = word.Documents.Open(path & "/" & "tmp.doc")docx.SaveAs path & "/" & "tmp.pdf",17docx.close(doNotSaveChanges)word.Quitset docx = nothingSet word = nothing

保存为word2pdf.vbs文件就可在windows上直接运行,作用是将同目录下的tmp.doc另存为tmp.pdf

java中调用外部程序(这里是调用cmd.exe执行vbs):

package com.poi.test;import java.io.IOException;public class VbsTest { public static void main(String[] args) { String vbsFileName = "D:////word2pdf////word2pdf.vbs"; final String cpCmd = "cmd /c start " + vbsFileName; Thread t = new Thread() { @Override public void run() { try { PRocess process = Runtime.getRuntime().exec(cpCmd); try { int val = process.waitFor(); System.out.println("val = "+val); } catch (InterruptedException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } }; t.start(); try { t.join(5000); } catch (InterruptedException e) { e.printStackTrace(); } }}

注意事项

需要注意几点: 1.office2010版本亲测可行,其他版本未知; 2.格式转换需要时间,如果需要马上读pdf文件则要设置等待; 3.在tomcat以服务方式启动时,web后台java的Runtime.exec()方法失效,需要以命令行方式启动tomcat。 4.vbs脚本一旦运行失败中途退出,很可能导致WORD.EXE进程残留,下次运行需要先杀掉这个进程

扩展

用vbs还可以调用office文档中的vba函数(宏),可以实现各种强大的功能 例如下面这个脚本就是调用宏实现Excel转pdf:

path = createobject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Pathset fs = CreateObject("Scripting.FileSystemObject")dim oExcel,oWb,oSheetSet oExcel= CreateObject("Excel.Application") Set oWb = oExcel.Workbooks.Open(path & "/" & "tmp.xls")Set oSheet = oWb.Sheets(1) oExcel.Run "saveaspdf"oExcel.Quit

宏saveaspdf是在tmp.xls里事先录制好的,保存在Sheet1里。通过录制宏–java调用vbs–vbs调用宏,可以完成对office文档的大部分操作。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表