您的位置:首页 > 编程语言 > Java开发

java实现在线预览功能 swftools+flexPaper

2014-01-28 10:31 806 查看


ava实现在线预览功能 swftools+flexPaper

最近做项目用户有个需求,要求在线预览上传的pdf文件。遂上网寻找解决路线,一阵狂搜,得到答案swftools+flexPaper.

swftools:用来将pdf文件转换成swf文件http://www.swftools.org/download.html

flexPaper:用来在线预览swf文件http://flexpaper.devaldi.com/download/ 下载Download Web Server Package版本。

写了一个工具类用来调用本地应用

在写这个工具类时遇到了两个问题:

第一个问题,在转换大的pdf文件时,运行很慢不能成功转换。上网查了一下原因,有的说是Process类里面I/O流产生阻塞,导致线程不能继续执行,遂查看api

By default, the created subprocess does not have its own terminal or console. All its standard I/O (i.e. stdin, stdout, stderr) operations will be redirected to the parent process, where they can be accessed via the streams obtained using the methods , , and .
The parent process uses these streams to feed input to and get output from the subprocess. Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream
of the subprocess may cause the subprocess to block, or even deadlock.

大致意思,默认情况下被创建的子进程没有终端或控制台。所有的标准I/O流都被重定向到了父线程,可以通过 , 和.方法获得这些流。父进程通过这些流与子进程交互。有一些宿主平台只提供了大小有限制的缓存,来缓存这些输入输出流。当缓冲区填满了,就不能及时写入输入流或读出子进程的输出流,这可能导致子进程阻塞,甚至死锁。

原因找到了,就是因为程序在被调用执行时,产生了大量的输出流,而笔者又没有及时读取子进程的输出,所以导致子进程被阻塞了。(以上工具类已经读取了子进程的输出流)

这里要解释一下和.的区别

以下属于errorStream





一下属于inputStream



这下读者该能够区分什么时候调用哪个方法了吧。

第二个问题:

用flexPaper查看被转换的swf文件时,右上角总是有个小圆圈再转,并且显示已经100%了,但就是打不开。问题是flash版本问题在调用pdf2swf.exe时加上版本信息就好了

这样问题顺利解决。

以下是显示页面主要代码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息