昨天PM让用LIbreOffice 将doc文档转换成pdf,转换效果很差,BUT,这不重要,本文介绍的是使用java代码 在指定目录下执行DOS命令。
开门见山:
Runtime.getRuntime().exec(command) 这句代码是执行系统命令的关键。
exec()函数有很多重构方法,主要包含如下
public Process exec(String command)-----在单独的进程中执行指定的字符串命令。 public Process exec(String [] cmdArray)---在单独的进程中执行指定命令和变量 public Process exec(String command, String [] envp)----在指定环境的独立进程中执行指定命令和变量 public Process exec(String [] cmdArray, String [] envp)----在指定环境的独立进程中执行指定的命令和变量 public Process exec(String command,String[] envp,File dir)----在有指定环境和工作目录的独立进程中执行指定的字符串命令 public Process exec(String[] cmdarray,String[] envp,File dir)----在指定环境和工作目录的独立进程中执行指定的命令和变量
实现代码:
public static void convert(String docPath,String storePath){ try { File dir = new File("F:\\install\\install_LibreOffice5\\program");//此处是指定路径 String[] cmd = new String[] { "cmd", "/c", "soffice --headless -invisible --convert-to pdf "+docPath+ " --outdir "+storePath };// cmd[2]是要执行的dos命令 System.out.println(cmd[2]); Process process = Runtime.getRuntime().exec(cmd,null,dir); // 记录dos命令的返回信息 StringBuffer resStr = new StringBuffer(); // 获取返回信息的流 InputStream in = process.getInputStream(); Reader reader = new InputStreamReader(in); BufferedReader bReader = new BufferedReader(reader); for (String res = ""; (res = bReader.readLine()) != null;) { resStr.append(res + "\n"); } System.out.println(resStr.toString()); bReader.close(); reader.close(); process.getOutputStream().close(); // 不要忘记了一定要关 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void main(String[] args) { System.out.println("开始转译-------------"); convert("F:\\Work\\Testdoc.doc","F:\\work"); System.out.println("结束转译-------------"); }
运行结果
参考文章:点击打开链接
----------------------------------------------------欢迎留言 指正---------------------------------------------------------------