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

1 pdf在linux下有命令行的工具可以转化为flash
2 word ,ppt 通过openoffice的服务模式可以在命令行下转化为pdf , 再使用步骤1 就可以了,这里有一个文档介绍:
http://www.artofsolving.com/opensource/pyodconverter

这样, 可以写一个脚本程序来串联整个流程(如果做成工具的话,就不能再图形界面环境下实现这个)。
里面比较麻烦的是word ,ppt to pdf的步骤,我简单在我的vps上尝试一下:
sudo yum install python-openoffice.noarch openoffice.org-writer.x86_64 openoffice.org-langpack-zh_CN.x86_64  openoffice.org-pyuno openoffice.org-impress.x86_64

运行 soffice -accept=”socket,port=8100;urp;” 输出:
javaldx: Could not find a Java Runtime Environment!
/usr/lib64/openoffice.org3/program/soffice.bin X11 error: Can‘t open display:
   Set DISPLAY environment variable, use -display option
   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 。
[rainx@vps ~]$  sudo yum install xorg-x11-server-Xvfb

运行之:[rainx@vps ~]$ sudo Xvfb :1 -screen 0 800x600x16
再次运行 soffice :
sudo soffice -accept=”socket,port=8100;urp;” -display :0

PS: 之后又找到一个哥们用类似的方式搞vmware的 :http://www.ixpub.net/thread-2264906-1-1.html

进行转换 :
[rainx@vps ~]$ python DocumentConverter.py who.docx who.pdf
[rainx@vps ~]$ ls -l who.*
-rw-r–r– 1 rainx rainx  51823 Jul 13 20:54 who.docx
-rw-r–r– 1 root  root  690854 Jul 13 20:55 who.pdf

who.pdf 就是转换好的文档了, 可以看到转换后的文件还是很大的,不过用阅读器看下,效果还可以..

这步比较简单,主要是应用 swftools 里的 pdf2swf工具,
下载swftools 可以从这里: http://www.swftools.org/download.html

下载编译之:
wget http://www.swftools.org/swftools-0.9.1.tar.gz
tar xvzf swftools-0.9.1.tar.gz
cd swftools-0.9.1
./configure 
make

这个时候,遇到报错
jpeg.c:463: error: conflicting types for ‘jpeg_load_from_mem’
jpeg.h:15: error: previous declaration of ‘jpeg_load_from_mem’ was here
make[1]: *** [jpeg.o] Error 1
原来是函数的定义和头文件的声明有点冲突,解决方式比较简单,修改 jpeg.c 的 463行:
改为:
int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char**dest, int*width, int*height)

继续即可,


然后又遇到问题:
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
../lib/libgfx.a(gfxfont.o): In function gfxfont_free‘:
gfxfont.c.text+0x7c0): undefined reference to glyph_clear’

解决方法 :
sudo yum install freetype-devel

再继续(需要重新./configure )
在 sudo make install 就可以了


我了个擦,发现没编译pdf2swf,仔细看下./configure提示信息:
* The following headers/libraries are missing:  jpeglib ungif jpeglib.h gif_lib.h
* Disabling pdf2swf tool…

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

关于乱码问题,可以参考这个链接: http://www.iteye.com/topic/538361

这样的swf文件有一个问题, 是自动播放的,我们无法对其进行控制,这显然不是我们期望的,所以我们可以通过 -b 来附加一个默认的阅读器, 加上-T9 强制版本为v9(据说可以避免一些单页的pdf显示问题)
pdf2swf -T9 -b who.pdf -o who.swf

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

引用自:

  http://www.tech-q.cn/thread-9672-1-1.html

猜你喜欢

转载自crocodile.iteye.com/blog/785821
今日推荐