使用swftools将pdf转换为swf时遇到的java.lang.process有关问题
使用swftools将pdf转换为swf时遇到的java.lang.process问题
[align=left][/align]
实现方法如下:
可以参考这个帖子:http://www.iteye.com/topic/141606
[align=left][/align]
引用
因为项目需要,这几天在研究仿百度文库的一个例子。网上搜索了一下,发现基本上都是一个思路:先通过 openoffice 和 jodconverter 将office等文档转换为 pdf ,然后再通过java.lang.process 调用 swftools 程序将 pdf 转换为 swf。最后就可以利用 flexpaper 将生成的 swf 显示出来了,效果和百度文库差不多。
思路上没有问题,但是在具体做的时候遇到了一个java.lang.process 阻塞的问题,就是在调用 java process 来启动 swf 转换文件时一直不能生成 pdf,后来自己摸索的好久也没明白是什么问题,无意中找到了一个关于java进程阻塞问题的帖子。后来才知道,通过java.lang.process 调用本地程序的时候,需要将 process 缓存中的输出信息读取出来,不然就会造成进程的阻塞。
思路上没有问题,但是在具体做的时候遇到了一个java.lang.process 阻塞的问题,就是在调用 java process 来启动 swf 转换文件时一直不能生成 pdf,后来自己摸索的好久也没明白是什么问题,无意中找到了一个关于java进程阻塞问题的帖子。后来才知道,通过java.lang.process 调用本地程序的时候,需要将 process 缓存中的输出信息读取出来,不然就会造成进程的阻塞。
实现方法如下:
Process process = Runtime.getRuntime.exec(command); // 调用外部程序 final InputStream is1 = process.getInputStream(); new Thread(new Runnable() { public void run() { BufferedReader br = new Buffered(new InputStreamReader(is)); while(br.readLine() != null) ; } }.start(); // 启动单独的线程来清空process.getInputStream()的缓冲区 InputStream is2 = process.getErrorStream(); BufferedReader br2 = new Buffered(new InputStreamReader(is2)); StringBuilder buf = new StringBuilder(); // 保存输出结果流 String line = null; while((line = br.readLine()) != null) buf.append(line); // 循环等待ffmpeg进程结束 System.out.println("输出结果为:" + buf);
可以参考这个帖子:http://www.iteye.com/topic/141606
1 楼
Roshan2
2011-08-02
顶~~~~~~不错
2 楼
李史斌
2011-11-23
哥们太给力了!解决大忙
3 楼
feitian12325
2012-07-22