java pdf 转 swf

来源:互联网 发布:电脑做文档的软件 编辑:程序博客网 时间:2024/05/21 20:21


Java Process.exitValue & Process.waitFor()

Process.exitValue() 采用非阻塞的方式返回,如果没有立即拿到返回值,则抛出异常

Process.waitFor() 当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。但是如果我们在调用此方法时,如果不注意的话,很容易出现主线程阻塞,Process也挂起的情况。在调用waitFor() 的时候,Process需要向主线程汇报运行状况,所以要注意清空缓存区,即InputStream和ErrorStream,在网上,很多只提到处理InputStream,忽略了ErrorStream。以下一段代码,贴出来,仅做参考。

import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.List;/** PDF转SWF工具* @author tangs**/public class Converter {    public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws IOException {////目标路径不存在则建立目标路径        File dest = new File(destPath);        if (!dest.exists()) dest.mkdirs();                //源文件不存在则返回        File source = new File(sourcePath);        if (!source.exists()) return 0;                //调用pdf2swf命令进行转换//        String command = "D:\\swftools\\pdf2swf.exe" + " -o \"" + destPath  + fileName +"\"  <SPAN style='COLOR: #ff0000'>-s languagedir=D:\\xpdf\\xpdf-chinese-simplified</SPAN> -s flashversion=9 \"" + sourcePath + "\"";//        String command = "D:\\swftools\\pdf2swf.exe" + " -o \"" + destPath  +  fileName +"\" -s flashversion=9 \"" + sourcePath + "\"";        String command= "D:/SWFTools/pdf2swf.exe  -t \""+destPath+"\\Java.pdf\" -o  \""+destPath+"\\test.swf\" -s flashversion=9 -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ";          System.out.println("cmd:"+command);//        Process pro = Runtime.getRuntime().exec(command);        Process process = Runtime.getRuntime().exec(command); // 调用外部程序           final InputStream is1 = process.getInputStream();           new Thread(new Runnable() {               public void run() {                   BufferedReader br = new BufferedReader(new InputStreamReader(is1));                    try {                    while(br.readLine()!= null) ;                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }               }           }).start(); // 启动单独的线程来清空process.getInputStream()的缓冲区           InputStream is2 = process.getErrorStream();           BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));            StringBuilder buf = new StringBuilder(); // 保存输出结果流           String line = null;           while((line = br2.readLine()) != null) buf.append(line); // 循环等待ffmpeg进程结束           System.out.println("输出结果为:" + buf);        //        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream()));        while (br2.readLine() != null);                 try {            process.waitFor();        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                return process.exitValue();            }        public static void main(String []args) throws IOException {        String sourcePath = "D:\\Java.pdf";        String destPath = "D:\\";        String fileName = "Javssa.swf";        try{        Converter.convertPDF2SWF(sourcePath, destPath, fileName);                }catch(Exception ex)        {            System.out.println("error");        }        System.out.println("success");                        }}

原创粉丝点击