flash 展现word

上传pdf,word,ppt文档转化为在线阅读的flash文档 [复制链接]

   
 
 
 
【一】一个朋友提出的需求, 想让我帮忙看看,所以自己就简单分析了下, 就是实现类似豆丁和百度文库的功能, 问了下 laruence ,讨论了下 大概有了个思路,方案是:
1 pdf在linux下有命令行的工具可以转化为flash
2 word ,ppt 通过openoffice的服务模式可以在命令行下转化为pdf , 再使用步骤1 就可以了,这里有一个文档介绍:  
http://www.artofsolving.com/opensource/pyodconverter
这样, 可以写一个脚本程序来串联整个流程(如果做成工具的话,就不能再图形界面环境下实现这个)。
里面比较麻烦的是word ,ppt to pdf的步骤,我简单在我的vps上尝试一下:
  1. sudo yum install
  2. python-openoffice.noarch openoffice.org-writer.x86_64
  3. openoffice.org-langpack-zh_CN.x86_64  openoffice.org-pyuno
  4. openoffice.org-impress.x86_64
复制代码
运行 soffice -accept=”socket,port=8100;urp;” 输出:
  1. javaldx: Could not find a Java Runtime Environment!

  2. /usr/lib64/openoffice.org3/program/soffice.bin X11 error: Can‘t open display:

  3.    Set DISPLAY environment variable, use -display option

  4.    or check permissions of your X-Server
复制代码
所以要做两件事情, 1 建立java运行时环境 2 处理display问题
首先下载并安装最新的jdk :
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter;pgid=yYdgaHqkkjVSR0EUPIQsoQ3D0000U2mCVFtF;sid=4k13hkOCk7F3hw–tOL-eFMsxz6zu5DCPg6VLoVcx7E7hi12yJM=?DLWidget=true&AutoWidgetDL=&ADWOptLoginReg=fromLogin
第二个问题的解决方案 ,发现了这个帖子:
http://www.linuxforums.org/forum/linux-desktop-x-windows/1633-use-dummy-display.html
思路是使用Xvfb来没有显示设备的情况下在内存虚拟一个framebuffer 。
  1. [rainx@vps ~][code][rainx@vps ~][code][rainx@vps ~][        DISCUZ_CODE_7        ]nbsp; sudo yum install xorg-x11-server-Xvfb
复制代码
nbsp; sudo yum install xorg-x11-server-Xvfb[/code]nbsp; sudo yum install xorg-x11-server-Xvfb[/code]运行之:[rainx@vps ~]$  sudo Xvfb :1 -screen 0 800x600x16
再次运行 soffice :
  1. sudo soffice -accept=”socket,port=8100;urp;” -display :0
复制代码
PS: 之后又找到一个哥们用类似的方式搞vmware的 :http://www.ixpub.net/thread-2264906-1-1.html
进行转换 :
  1. [rainx@vps ~]$ python DocumentConverter.py who.docx who.pdf
  2. [rainx@vps ~]$ ls -l who.*

  3. -rw-r–r– 1 rainx rainx  51823 Jul 13 20:54 who.docx

  4. -rw-r–r– 1 root  root  690854 Jul 13 20:55 who.pdf
复制代码
who.pdf  就是转换好的文档了, 可以看到转换后的文件还是很大的,不过用阅读器看下,效果还可以..
Ok, 先到这里,后面继续搞pdf 转换为flash文件的部分

原文:http://rainx.cn/blog/archives/140
<script type="text/javascript"></script>
 

 

 

<script type="text/javascript"></script>
   
 
 
 

上传pdf,word,ppt文档转化为在线阅读的flash文档【二】

这步比较简单,主要是应用 swftools 里的 pdf2swf工具,
下载swftools 可以从这里: http://www.swftools.org/download.html
下载编译之:
  1. wget http://www.swftools.org/swftools-0.9.1.tar.gz

  2. tar xvzf swftools-0.9.1.tar.gz

  3. cd swftools-0.9.1

  4. ./configure

  5. make
复制代码


这个时候,遇到报错
  1. jpeg.c:463: error: conflicting types for ‘jpeg_load_from_mem’

  2. jpeg.h:15: error: previous declaration of ‘jpeg_load_from_mem’ was here

  3. make[1]: *** [jpeg.o] Error 1
复制代码


原来是函数的定义和头文件的声明有点冲突,解决方式比较简单,修改 jpeg.c 的 463行:
改为:
  1. int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char**dest, int*width, int*height)
复制代码
继续即可,
然后又遇到问题:
  1. gcc -DHAVE_CONFIG_H swfrender.o -o swfrender ../lib/libgfxswf.a ../lib/librfxswf.a ../lib/libgfx.a ../lib/libbase.a -L/usr/local/lib -lz -lm

  2. ../lib/libgfx.a(gfxfont.o): In function gfxfont_free‘:

  3. gfxfont.c:(.text+0x7c0): undefined reference to glyph_clear’
复制代码


解决方法 :
sudo yum install freetype-devel

再继续(需要重新./configure )
在 sudo make install 就可以了
我了个擦,发现没编译pdf2swf,仔细看下./configure提示信息:
  1. * The following headers/libraries are missing:  jpeglib ungif jpeglib.h gif_lib.h

  2. * Disabling pdf2swf tool…
复制代码


所以先安装上述的库,再重新编译 : sudo yum install libjpeg-devel
试一下 :
pdf2swf who.pdf -o who.swf

关于乱码问题,可以参考这个链接: http://www.javaeye.com/topic/538361
这样的swf文件有一个问题, 是自动播放的,我们无法对其进行控制,这显然不是我们期望的,所以我们可以通过 -b 来附加一个默认的阅读器, 加上-T9 强制版本为v9(据说可以避免一些单页的pdf显示问题)
  1. pdf2swf -T9 -b who.pdf -o who.swf
复制代码


到这里,生成过程就差不多了,不过显然这个viewer还需要美化,这个我们后面再继续研究
...
 

 

<script type="text/javascript"></script>
   
 
 
 

上传 pdf,word,ppt文档转化为在线阅读的flash文档【三】

经过前两个步骤后,我们最后只需要一个阅读器来对生成的swf文件进行展示就行了, pdf2swf 默认生产的那个viewer显然有点难看,需要美化一下, 这里可以找到一个开源的项目 cfviewer进行处理,  可以从 github上找到这个项目:
http://github.com/ktarou/cfviewer
和之前合并阅读器的方式不同的是,这个阅读器是和数据文件分离的,所以这样pdf2swf输出的时候也不必将阅读器合并输出到swf生成的swf文件里
  1. pdf2swf -T9 -s insertstop who.pdf -o who.swf
复制代码


即可,
由于这个项目是基于maven管理的,所以编译需要配置maven环境, 并且用到了 flexmojos 插件, 编译的方式是在主目录,
  1. mvn flexmojos:compile-swf
复制代码


即可
具体引用的方式可以在它的example目录下找到,如果觉得这个阅读器的样式不太满意,可以直接修改这个src/main/flex/Main.mxml文件进行调整..
Update: 之前步骤1的时候如果编译出现问题,可以尝试安装如下的包:
sudo yum install zlib-devel libjpeg-devel giflib-devel freetype-devel

                                        
          
                                
 
 

<script type="text/javascript"></script>

   
 
 
利用pdf2swf将PDF转换成SWF
通过代码将PDF转换成SWF来说,现在比较常用的一种方式就是利用SWFTools工具中的pdf2swf(http://www.swftools.org/)。这个工具还是比较好用的。转换成的SWF文件质量也不错。

  1. /** * PDF转SWF工具
  2. * @author tangs
  3. *
  4. */
  5. public class Converter {
  6.     public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws IOException {
  7.         //目标路径不存在则建立目标路径
  8.         File dest = new File(destPath);
  9.         if (!dest.exists()) dest.mkdirs();
  10.         
  11.         //源文件不存在则返回
  12.         File source = new File(sourcePath);
  13.         if (!source.exists()) return 0;
  14.         
  15.         //调用pdf2swf命令进行转换
  16.         String command = "D:\\Program Files\\SWFTools\\pdf2swf.exe" + " -o \"" + destPath + "\\" + fileName + "\"  <span style="color: #ff0000;">-s languagedir=D:\\xpdf\\xpdf-chinese-simplified</span> -s flashversion=9 \"" + sourcePath + "\"";
  17.         
  18.         Process pro = Runtime.getRuntime().exec(command);
  19.         
  20.         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
  21.         while (bufferedReader.readLine() != null);
  22.         
  23.         try {
  24.             pro.waitFor();
  25.         } catch (InterruptedException e) {
  26.             // TODO Auto-generated catch block
  27.             e.printStackTrace();
  28.         }
  29.         
  30.         return pro.exitValue();
  31.         
  32.     }
  33.    
  34.     public static void main(String []args) throws IOException {
  35.         String sourcePath = "c:\\test.pdf";
  36.         String destPath = "c:\\";
  37.         String fileName = "test.swf";
  38.         Converter.convertPDF2SWF(sourcePath, destPath, fileName);
  39.     }
  40. }
复制代码

就这么简单的几行代码就可以了。但是在程序中遇到中文就会出现意想不到的情况,这个也不例外。在转换中,我发现有些中文PDF文件转换后会出现乱码的现象,因此这里还要处理一下乱码的问题。看到上面代码中红色的一段了吗?这就是解决乱码的方法。这个方法是参考了http://hi.baidu.com/xwx520/blog/item/1d0c423885b392fab311c72e.html这篇文章,感谢作者。

1.下载XPDF:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz,并解压到xpdf-chinese-simplified目录下。


2.下载字体:http://blog.pjoke.com/wp-content/uploads/2009/02/font.zip,并解压到xpdf-chinese-simplified/CMap目录下。


3.修改xpdf-chinese-simplified目录下的add-to-xpdfrc文件。将里面的路径设为自己的路径:
00.jpg

4.参照上面的代码,在调用pdf2swf命令中加入“ -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ”参数。


这样乱码的问题就解决了。

猜你喜欢

转载自shen-zhenbiao.iteye.com/blog/1407137