flash 展现word
企业开发
2018-05-31 06:22:52
阅读次数: 0
|
【一】一个朋友提出的需求, 想让我帮忙看看,所以自己就简单分析了下, 就是实现类似豆丁和百度文库的功能, 问了下 laruence ,讨论了下 大概有了个思路,方案是: 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 ~][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 :
- 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 就是转换好的文档了, 可以看到转换后的文件还是很大的,不过用阅读器看下,效果还可以.. 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 下载编译之:
- 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.javaeye.com/topic/538361 这样的swf文件有一个问题, 是自动播放的,我们无法对其进行控制,这显然不是我们期望的,所以我们可以通过 -b 来附加一个默认的阅读器, 加上-T9 强制版本为v9(据说可以避免一些单页的pdf显示问题)
- 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文件里
- pdf2swf -T9 -s insertstop who.pdf -o who.swf
复制代码
即可, 由于这个项目是基于maven管理的,所以编译需要配置maven环境, 并且用到了 flexmojos 插件, 编译的方式是在主目录,
- 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>
|
|
|
|
通过代码将PDF转换成SWF来说,现在比较常用的一种方式就是利用SWFTools工具中的pdf2swf(http://www.swftools.org/)。这个工具还是比较好用的。转换成的SWF文件质量也不错。
- /** * PDF转SWF工具
- * @author tangs
- *
- */
- public class Converter {
- public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws IOException {
- //目标路径不存在则建立目标路径
- File dest = new File(destPath);
- if (!dest.exists()) dest.mkdirs();
-
- //源文件不存在则返回
- File source = new File(sourcePath);
- if (!source.exists()) return 0;
-
- //调用pdf2swf命令进行转换
- 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 + "\"";
-
- Process pro = Runtime.getRuntime().exec(command);
-
- BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
- while (bufferedReader.readLine() != null);
-
- try {
- pro.waitFor();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- return pro.exitValue();
-
- }
-
- public static void main(String []args) throws IOException {
- String sourcePath = "c:\\test.pdf";
- String destPath = "c:\\";
- String fileName = "test.swf";
- Converter.convertPDF2SWF(sourcePath, destPath, fileName);
- }
- }
复制代码
就这么简单的几行代码就可以了。但是在程序中遇到中文就会出现意想不到的情况,这个也不例外。在转换中,我发现有些中文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文件。将里面的路径设为自己的路径:
4.参照上面的代码,在调用pdf2swf命令中加入“ -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ”参数。
这样乱码的问题就解决了。 |
|
转载自shen-zhenbiao.iteye.com/blog/1407137