类似百度文库的文档在线预览实现方法

 做这个东西很久了现在终于做完了,看着一台满足需求的电脑运行觉得心里很是舒服。

很想写下来,我相信这个需求挺多人又需要的吧,我就决定记录下来,帮助大家少走弯路,同时重要的也是我自己的一个记录。

1.需求

我们上传的ppt、pptx、doc、docx、txt等等,都希望像现在的百度文库一样提供给用户预览文档内容的功能。

2.环境

我的环境:centos、openoffice、pdf2swf、flexpaper、httpsqs

其中:openoffice是用来将文档转换为pdf格式的文件,然后pdf2swf是用来将pdf格式的文件转换为swf格式的文件。最后使用flexpaper将swf呈现在浏览器中,供用户浏览。httpsqs则是队列服务器,下面就知道它的用处了。

3.开始建设

在网上搜索此类的主题,有很多相关的知识,但是比较重要的几点却很难找到。比如:应用和转换分离怎么做?用户不能提交一个文档还要等你转换半天再反应啊,所以要有个东西来记录用户的转换请求,然后用户正常的进行其他的操作。我这里使用的就是httpsqs队列服务器。

代码如下:

if(!extName.equals("pdf")){
//fileup.uploadFile(7, filename, file.getInputStream());
//pdf文件转换,目录请根据需要进行调整
doc2pdf = "soffice --nologo --nofirststartwizard --headless --convert-to pdf :writer_pdf_Export --outdir /home/test/pdf /home/test/eleTeachPlan/"
+ filename ;
pdf2swf = "pdf2swf -i /home/test/pdf/" + fileNameWithoutExtName + ".pdf" + " -T 9 -o /home/test/swf/" + fileNameWithoutExtName + ".swf";
}else{
pdf2swf = "pdf2swf -i /home/test/eleTeachPlan/" + filename + " -T 9 -o /home/test/swf/" + fileNameWithoutExtName + ".swf";
} if(doc2pdf != null){
//client.putString(new String (doc2pdf.getBytes("UTF-8")));
//默认文件名采用的是gbk2312编码
client.putString(doc2pdf);
}
//client.putString(new String (pdf2swf.getBytes("UTF-8")));
client.putString(pdf2swf);




client是一个httpsqs客户端,当检测到文件的扩展名不是pdf的话,那么需要用soffice命令转换文档,所以发出了"doc2pdf"和"pdf2swf"两个命令,先将文档转换为pdf格式,然后再将之转换为swf格式,这样就可以正常的预览了。

使用putString方法放到队列服务器中的转码命令,需要用客户端将它读出来放在linux上执行,就可以正常的转换了。这里请参考我的上一篇博客。

4.其他

其他的关于安装,flexpaper使用等等网上的内容一堆,就不重复说了。

你可能感兴趣的:(httpsps,Linux学习)