一、需求与目的:
1. 基本界面和功能展示:
2. 主要功能:
通过flex/flash程序使用户可以通过浏览器在线阅读相关的文件或文档,查看相关的资料或信息,
或者打印/下载此pdf文件以及其他的操作等。
二、可行性分析和技术实现:
1. 展示的方式:
文档以flash的形式在网页上展示要解决两个问题:以什么格式展示flash和文档如何转化为符合格式的flash。
(1).展示flash有两种方式
a.使用SWFTools的工具直接将pdf转化成一个整体的flash展示,但这种方式的flash较大,且不容易控制,故用得较少。
b.使用一个开源的flexpaper播放器,它可以播放一帧一页的flash;
在flexpaper的基础上,如果遇到大文档则会出现速度和性能的问题,这个时候需要像百度文库、豆丁一样修改flexpaper,
让它支持一次仅读取指定页数的flash;如果文档安全级别较高,不允许下载查看,则需要给flexpaper加上加密解密算法;
如果需要登录用户才能查看,则要让flexpaper有登录UI。
(2).文档如何转化为符合格式的flash
Flex/flash是不能直接读取及加载pdf和进行相应的操作的,
目前业界的主流应用解决方案(如百度文库和豆丁网)都是通过把相关的pdf文件转化成swf文件,
在通过flex/flash程序的加载和控制来展示出来。
转化文档为flash的思路有一条,但有多种实现方式。一般文档需要先转化为pdf,再从pdf转化为flash。
2.转换的具体的操作实现
针对上述的需求分析,实现此功能的主要思路就是要把一般文档先转化为pdf,再从pdf转化为flash。
(1). 一般文档转化为pdf
一般文档转化为pdf的方法有很多,例如使用虚拟打印机,使用MicrosoftOffice的API,使用OpenOffice转化,
adobe 公司的acrobat等,不过转化的过程中,可能由于文档有误、损坏、加密等原因造成转化失败。
(2). pdf转化为flash
pdf转化为flash可以直接使用swfTools的pdf2swf即可实现多种方式的转化(命令行或java/php语言动态执行等)。
安装上此工具后通过代码(如java/php语言等)或者直接通过命令行操作来实现是现在比较常用的一种方式。
swfTools是一个开源(免费)的工具,可以把pdf或png图像转换为swf格式的文件。
首先要先安装好swftools(本文档以安装在C:\Program Files\SWFTools来说明)。
只有安装好了swftools后才能使用相关的命令行来进行操作。
例1:swfTools常用的命令命令(在cmd命令行把指定目录C:\Program Files\SWFTools)
pdf2swf -o aa.swf -s flashversion=9 aa.pdf
pdf2swf pdf2swf aa.pdf -o aa.swf -T 9
pdf2swf pdf2swf aa.pdf -o aa.swf
例2:通过java程序将指定的pdf文件转换为相应的swf文件:
参见MySwfTools.java文件。
3. flex/flash加载和播放文档转换而来的swf文件
使用第三方插件flexpaper来加载和操作由pdf转换而来的swf文件:
FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与swftools一起使用,
使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。
下载并获取到相应的swc文件,放到我们的flex/flash工程中直接使用。
例3:参见flexPdf.mxml文件。
4. 详细代码
例2: MySwfTools.java
/**
* @title基于swfTools工具和java语言实现pdf文件转换为swf文件
* @author xuechong
* @version 0.1
* @date 2011.06.01
* @environment java6.0 swfTools0.9.1
* @from http://www.iteye.com/topic/538361
*/
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.IOException;
public class MySwfTools{
public static void main(String[] args)throws IOException{
String pdfUrl = "D:/dataTest/aa.pdf";
String destPath = "d:\\";
String fileName = "hello.swf";
convertHandler(pdfUrl, destPath, fileName);
}
public static int convertHandler(String pdfUrl, String destPath, String fileName)throws IOException{
File dest = new File(destPath);
if(!dest.exists()){
dest.mkdirs(); //目标路径不存在则建立目标路径
}
File source = new File(pdfUrl);
if(!source.exists()){ //源文件不存在则返回0
return 0;
}
String swfToolsUrl = "C:/Program Files/SWFTools/pdf2swf.exe"; //swfTools的当前安装目录(绝对路径)
String cmds =
" -o /" + destPath + "/" + fileName + "/ -s languagedir=D:/xpdf -chinese-simplified -s flashversion=9 /" + pdfUrl + "/";
String command = swfToolsUrl + cmds;
Process pro = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while(br.readLine() != null);
try{
pro.waitFor();
}catch(InterruptedException e){
e.printStackTrace();
}
return pro.exitValue();
}
}
例3: flexPdf.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:flexpaper="com.devaldi.controls.flexpaper.*"
minWidth="955" minHeight="600">
<flexpaper:FlexPaperViewer id="swfload" width="800" height="500"
SwfFile="aa.swf"/>
</s:Application>
三.相关工具和插件介绍:
1. swfTools
swfTools是一种实用工具与Adobe Flash文件(swf文件)工作的集合。
该工具集包括用于阅读的swf文件,结合他们,和他们建立从其他内容(如图像,声音文件,视频或源代码)程序。
swfTools是在GPL下发布的。及永久免费。
swfTools是一组用来处理Flash的swf文件的工具包,包括:
(1).合并工具swfcombine
(2).抽取工具swfextract
(3). pdf/jpeg/png/avi/ttf/wav到swf的转换工具:
pdf2swf, jpeg2swf, png2swf, avi2swf, font2swf, and wav2swf
(4).文本解析工具swfstrings
(5). swf解析器swfdump
(6). SWF读写库rfxswflib
2.flexpaper
flexpaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与pdf2swf一起使用,使在flex中显示pdf成为可能,
而这个过程并无需pdf软件环境的支持。它可以被当做Flex的库来使用。
另外你也可以通过将一些例如word/ppt/excel等文档转成pdf,然后实现在线浏览
Flexpaper目前有三个版本的: GPL License (free)/ Commercial License/ Unlimited license
四.相关网站链接和参考资料
swfTools官网: http://www.swftools.org/
swfTools下载: http://www.swftools.org/download.html
介绍swfTools: http://www.iteye.com/topic/538361
http://bbs.9ria.com/thread-40043-1-1.html
http://baike.baidu.com/view/5638152.htm
flexpaper官网: http://flexpaper.devaldi.com
flexpaper下载: http://flexpaper.devaldi.com/download/
介绍flexPaper: http://bbs.9ria.com/thread-40043-1-1.html
http://blog.minidx.com/2010/02/18/3106.html
http://www.oschina.net/p/flexpaper
http://www.cnblogs.com/sobne/articles/1822479.html
flexPaper的中文支持: http://bbs.9ria.com/thread-66129-1-1.html
flexPaper组件用Flex4兼容性问题: http://bbs.9ria.com/thread-81318-1-1.html
flex阅读器延迟加载分页加载: http://bbs.9ria.com/viewthread.php?tid=74836
flexPaper显示word等文档: http://www.oschina.net/question/59911_20089