---恢复内容开始---
方案:
Txt/Word/Excel/PPT=>PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)=>FlexPaper浏览
第一步:
Txt/Word/Excel/PPT=>PDF(OpenOffice+JodConverter)
准备:
1.下载:Apache_OpenOffice_incubating_3.4.1_Win_x86_install_zh-CN.exe
下载地址:http://www.openoffice.org/download/index.html
2:所需jar包:
3:源文件
package com.wyh.toPdf;
import java.io.File;
import java.util.Date;
import java.util.regex.Pattern;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
/**
* 这是一个工具类,主要是为了使Office全部格式的文档转化为pdf文件
*
*/
public class Office2PDF {
/**
* office中.doc格式
*/
public static final String OFFICE_DOC = "doc";
/**
* office中.docx格式
*/
public static final String OFFICE_DOCX = "docx";
/**
* office中.xls格式
*/
public static final String OFFICE_XLS = "xls";
/**
* office中.xlsx格式
*/
public static final String OFFICE_XLSX = "xlsx";
/**
* office中.ppt格式
*/
public static final String OFFICE_PPT = "ppt";
/**
* office中.pptx格式
*/
public static final String OFFICE_PPTX = "pptx";
/**
* pdf格式
*/
public static final String OFFICE_TO_PDF = "pdf";
public static void main(String[] args) {
Office2PDF office2pdf = new Office2PDF();
office2pdf.openOfficeToPDF("E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test002." + OFFICE_DOC, "E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test002_" + new Date().getTime() + "." + OFFICE_TO_PDF);
}
/**
* 使Office全部格式的文档转化为pdf文件
*
* @param inputFilePath 源文件路径,
* @param outputFilePath 目标文件路径,
* @return
*/
public boolean openOfficeToPDF(String inputFilePath, String outputFilePath) {
return office2pdf(inputFilePath, outputFilePath);
}
/**
* 根据操作系统的名称,获取OpenOffice.org 3的安装目录<br>
* 如我的OpenOffice安装在:D:/Program Files (x86)/OpenOffice 4<br>
*
* @return OpenOffice.org 3的安装目录
*/
public String getOfficeHome() {
String osName = System.getProperty("os.name");
if (Pattern.matches("Linux.*", osName)) {
return "/opt/openoffice.org3";
} else if (Pattern.matches("Windows.*", osName)) {
return "D:\\Program Files (x86)\\OpenOffice 4";
} else if (Pattern.matches("Mac.*", osName)) {
return "/Application/OpenOffice.org.app/Contents";
}
return null;
}
/**
* 连接OpenOffice.org 并且启动OpenOffice.org
*
* @return
*/
public OfficeManager getOfficeManager() {
DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
// 获取OpenOffice.org 3的安装目录
String officeHome = getOfficeHome();
config.setOfficeHome(officeHome);
// 启动OpenOffice的服务
OfficeManager officeManager = config.buildOfficeManager();
officeManager.start();
return officeManager;
}
/**
* 转换文件
*
* @param inputFile
* @param outputFilePath_end
* @param inputFilePath
* @param outputFilePath
* @param converter
*/
public void converterFile(File inputFile, String outputFilePath_end, String inputFilePath, String outputFilePath, OfficeDocumentConverter converter) {
File outputFile = new File(outputFilePath_end);
// 假如目标路径不存在,则新建该路径
if (!outputFile.getParentFile().exists()) {
outputFile.getParentFile().mkdirs();
}
converter.convert(inputFile, outputFile);
System.out.println("文件:" + inputFilePath + "\n转换为\n目标文件:" + outputFile + "\n成功!");
}
/**
* 使Office全部格式的文档 转化为pdf文件<br>
*
* @param inputFilePath
* 源文件路径,如:"E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test001.docx
* @param outputFilePath
* 目标文件路径,如:"E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test001.pdf"
* @return
*/
public boolean office2pdf(String inputFilePath, String outputFilePath) {
boolean flag = false;
OfficeManager officeManager = getOfficeManager();
// 连接OpenOffice
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
long begin_time = new Date().getTime();
if (null != inputFilePath) {
File inputFile = new File(inputFilePath);
// 判断目标文件路径是否为空
if (null == outputFilePath) {
// 转换后的文件路径
String outputFilePath_end = getOutputFilePath(inputFilePath);
if (inputFile.exists()) {// 找不到源文件, 则返回
converterFile(inputFile, outputFilePath_end, inputFilePath, outputFilePath, converter);
flag = true;
}
} else {
if (inputFile.exists()) {// 找不到源文件, 则返回
converterFile(inputFile, outputFilePath, inputFilePath, outputFilePath, converter);
flag = true;
}
}
officeManager.stop();
} else {
System.out.println("con't find the resource");
}
long end_time = new Date().getTime();
System.out.println("文件转换耗时:[" + (end_time - begin_time) + "]ms");
return flag;
}
/**
* 获取输出文件
*
* @param inputFilePath
* @return
*/
public String getOutputFilePath(String inputFilePath) {
String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf");
return outputFilePath;
}
/**
* 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br>
*
* @param inputFilePath
* @return
*/
public String getPostfix(String inputFilePath) {
return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
}
第二步:PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)
1.下载SWFTools
下载地址:http://www.swftools.org/download.html
我下载的是:swftools-2012-10-15-1307.exe
2.安装SWFTools
3:源码(一下有两种方式)
源码1
1 package com.wyh.toPdf;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.InputStreamReader;
8 import java.util.Date;
9
10 /**
11 * PDF转SWF工具
12 * 15 *
16 */
17 public class PDF2SWF {
18
19 /**
20 * SWTOOLS的安装路径,我的SWFTools安装目录为:"D:\Program Files (x86)\SWFTools"
21 */
22 public static final String SWFTOOLS_PATH = "D:\\Program Files (x86)\\SWFTools";
23 /**
24 * pdf文件后缀名
25 */
26 public static final String FILE_NAME_OF_PDF = "pdf";
27 /**
28 * swf文件后缀名
29 */
30 public static final String FILE_NAME_OF_SWF = "swf";
31
32 /**
33 * 获得文件的路径
34 *
35 * @param file
36 * 文件的路径 ,如:"c:/test/test.swf"
37 * @return 文件的路径
38 */
39 public static String getFilePath(String file) {
40 String result = file.substring(0, file.lastIndexOf("/"));
41 if (file.substring(2, 3) == "/") {
42 result = file.substring(0, file.lastIndexOf("/"));
43 } else if (file.substring(2, 3) == "\\") {
44 result = file.substring(0, file.lastIndexOf("\\"));
45 }
46 return result;
47 }
48
49 /**
50 * 新建一个目录
51 *
52 * @param folderPath
53 * 新建目录的路径 如:"c:\\newFolder"
54 */
55 public static void newFolder(String folderPath) {
56 try {
57 File myFolderPath = new File(folderPath.toString());
58 if (!myFolderPath.exists()) {
59 myFolderPath.mkdir();
60 }
61 } catch (Exception e) {
62 System.out.println("新建目录操作出错");
63 e.printStackTrace();
64 }
65 }
66
67 /**
68 * the exit value of the subprocess represented by this Process object. By
69 * convention, the value 0 indicates normal termination.
70 *
71 * @param sourcePath
72 * pdf文件路径 ,如:"c:/hello.pdf"
73 * @param destPath
74 * swf文件路径,如:"c:/test/test.swf"
75 * @return 正常情况下返回:0,失败情况返回:1
76 * @throws IOException
77 */
78 public static int convertPDF2SWF(String sourcePath, String destPath) throws IOException {
79 // 如果目标文件的路径是新的,则新建路径
80 newFolder(getFilePath(destPath));
81
82 // 源文件不存在则返回
83 File source = new File(sourcePath);
84 if (!source.exists()) {
85 return 0;
86 }
87
88 // 调用pdf2swf命令进行转换
89 String command = SWFTOOLS_PATH + "/pdf2swf.exe -t \"" + sourcePath + "\" -o \"" + destPath + "\" -s flashversion=9 -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ";
90 System.out.println("命令操作:" + command + "\n开始转换...");
91 // 调用外部程序
92 Process process = Runtime.getRuntime().exec(command);
93 final InputStream is1 = process.getInputStream();
94 new Thread(new Runnable() {
95 public void run() {
96 BufferedReader br = new BufferedReader(new InputStreamReader(is1));
97 try {
98 while (br.readLine() != null)
99 ;
100 } catch (IOException e) {
101 e.printStackTrace();
102 }
103 }
104 }).start(); // 启动单独的线程来清空process.getInputStream()的缓冲区
105 InputStream is2 = process.getErrorStream();
106 BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
107 // 保存输出结果流
108 StringBuilder buf = new StringBuilder();
109 String line = null;
110 while ((line = br2.readLine()) != null)
111 // 循环等待ffmpeg进程结束
112 buf.append(line);
113 while (br2.readLine() != null)
114 ;
115 try {
116 process.waitFor();
117 } catch (InterruptedException e) {
118 e.printStackTrace();
119 }
120 System.out.println("转换结束...");
121 return process.exitValue();
122 }
123
124 /**
125 * pdf文件转换为swf文件操作
126 *
127 * @param sourcePath
128 * pdf文件路径 ,如:"c:/hello.pdf"
129 * @param destPath
130 * swf文件路径,如:"c:/test/test.swf"
131 */
132 public static void pdf2swf(String sourcePath, String destPath) {
133 long begin_time = new Date().getTime();
134 try {
135 PDF2SWF.convertPDF2SWF(sourcePath, destPath);
136 } catch (Exception ex) {
137 System.out.println("转换过程失败!!");
138 }
139 long end_time = new Date().getTime();
140 System.out.println("转换共耗时 :[" + (end_time - begin_time) + "]ms");
141 System.out.println("转换文件成功!!");
142 }
143
144 public static void main(String[] args) throws IOException {
145 String sourcePath = "E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test002." + FILE_NAME_OF_PDF;
146 String destPath = "E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test002_" + new Date().getTime() + "." + FILE_NAME_OF_SWF;
147 pdf2swf(sourcePath, destPath);
148 }
149 }
3:源码2:
1 package com.wyh.toPdf;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.util.ArrayList;
8 import java.util.Date;
9 import java.util.List;
10
11
12 /**
13 * @author nlb
14 * @version 1.0 把pdf,jpeg,font,gif,pgn,wav转化为swf文件
15 */
16 public class ConvertToSwf {
17
18 private final String CONVERTFILETYPE = "pdf,jpg,jpeg,font,gif,png,wav";
19 private String swftoolsPath;
20 /**
21 * @param swftoolsPath
22 * 用于进行把文件转化为swf的工具地址
23 */
24 public ConvertToSwf(String swftoolsPath) {
25 this.swftoolsPath=swftoolsPath;
26 }
27 /**
28 * 把文件转化为swf格式支持"pdf,jpg,jpeg,font,gif,png,wav"
29 *
30 * @param sourceFilePath
31 * 要进行转化为swf文件的地址
32 * @param swfFilePath
33 * 转化后的swf的文件地址
34 * @return
35 */
36 public boolean convertFileToSwf(String sourceFilePath, String swfFilePath) {
37 System.out.println("开始转化文件到swf格式");
38 if (swftoolsPath == null || swftoolsPath == "") {
39 System.out.println("未指定要进行swf转化工具的地址!!!");
40 return false;
41 }
42 String filetype = sourceFilePath.substring(sourceFilePath
43 .lastIndexOf(".") + 1);
44 // 判读上传文件类型是否符合转换为pdf
45 System.out.println("判断文件类型通过");
46 if (CONVERTFILETYPE.indexOf(filetype.toLowerCase()) == -1) {
47 System.out.println("当前文件不符合要转化为SWF的文件类型!!!");
48 return false;
49 }
50 File sourceFile = new File(sourceFilePath);
51
52 if (!sourceFile.exists()) {
53 System.out.println("要进行swf的文件不存在!!!");
54 return false;
55 }
56 System.out.println("准备转换的文件路径存在");
57 if (!swftoolsPath.endsWith(File.separator)) {
58 swftoolsPath += File.separator;
59 }
60 StringBuilder commandBuidler = new StringBuilder(swftoolsPath);
61 File swfFile = new File(swfFilePath);
62 if (!swfFile.getParentFile().exists()) {
63 swfFile.getParentFile().mkdirs();
64 }
65 if (filetype.toLowerCase().equals("jpg")) {
66 filetype = "jpeg";
67 }
68 List<String> command = new ArrayList<String>();
69 command.add(this.swftoolsPath+"\\"+filetype.toLowerCase()+"2swf.exe");//从配置文件里读取
70 command.add("-z");
71 command.add("-s");
72 command.add("flashversion=9");
73 command.add("-s");
74 command.add("poly2bitmap");//加入poly2bitmap的目的是为了防止出现大文件或图形过多的文件转换时的出错,没有生成swf文件的异常
75 command.add(sourceFilePath);
76 command.add("-o");
77 command.add(swfFilePath);
78 try {
79 ProcessBuilder processBuilder = new ProcessBuilder();
80 processBuilder.command(command);
81 Process process = processBuilder.start();
82 System.out.println("开始生成swf文件..");
83 dealWith(process);
84 try {
85 process.waitFor();//等待子进程的结束,子进程就是系统调用文件转换这个新进程
86 } catch (InterruptedException e) {
87 e.printStackTrace();
88 }
89 File swf = new File(swfFilePath);
90 if (!swf.exists()) {
91 return false;
92 }
93 System.out.println("转化SWF文件成功!!!");
94 } catch (IOException e) {
95 // TODO Auto-generated catch block
96 System.out.println("转化为SWF文件失败!!!");
97 e.printStackTrace();
98 return false;
99 }
100
101 return true;
102 }
103 public static void main(String[] args) {
104 ConvertToSwf a=new ConvertToSwf("D:\\Program Files (x86)\\SWFTools");
105 long begin_time=new Date().getTime();
106 a.convertFileToSwf("E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test002.pdf", "E:\\Workspaces\\MyEclipse2013\\DataTemp\\baiduwenkuModel\\test002_001.swf");
107 long end_time=new Date().getTime();
108 System.out.println("result:"+(end_time-begin_time));
109 }
110 private void dealWith(final Process pro){
111 // 下面是处理堵塞的情况
112 try {
113 new Thread(){
114 public void run(){
115 BufferedReader br1 = new BufferedReader(new InputStreamReader(pro.getInputStream()));
116 String text;
117 try {
118 while ( (text = br1.readLine()) != null) {
119 System.out.println(text);
120 }
121 } catch (IOException e) {
122 e.printStackTrace();
123 }
124 }
125 }.start();
126 } catch (Exception e) {
127 e.printStackTrace();
128 }
129 try {
130 new Thread(){
131 public void run(){
132 BufferedReader br2 = new BufferedReader(new InputStreamReader(pro.getErrorStream()));//这定不要忘记处理出理时产生的信息,不然会堵塞不前的
133 String text;
134 try {
135 while( (text = br2.readLine()) != null){
136 System.err.println(text);
137 }
138 } catch (IOException e) {
139 e.printStackTrace();
140 }
141 }
142 }.start();
143 } catch (Exception e) {
144 e.printStackTrace();
145 }
146 }
147 }
最后:
1.下载flexpaper
下载地址:http://code.google.com/p/flexpaper/downloads/list
2.然后解压,需要的文件如下:
上面是我重新组合的,你也可以把解压缩文件夹整个的拷贝到WebRoot下面。
不过路径在设置的时候,就需要注意啦.....
3.新建一个jsp文件
index.jsp
1 <%@ page contentType="text/html; charset=utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>showWenKU</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript"
src="${pageContext.request.contextPath}/flexpaper/swfobject/swfobject.js"></script>
<script type="text/javascript"
src="${pageContext.request.contextPath}/flexpaper/flexpaper_flash.js"></script>
<script type="text/javascript">
<!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. -->
var swfVersionStr = "9.0.124";
<!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
var xiSwfUrlStr = "${expressInstallSwf}";
var flashvars = {
SwfFile : escape("${pageContext.request.contextPath}/flexpaper/swf/test_1352107155307_1352172932517.swf?v1.4.0final"),
Scale : 0.8, //放大因子,是一个0以上的数(带小数 1 = 100%) 。
ZoomTransition : "easeOut",//光学变焦过渡,默认值是easeOut,可取值: easenone, easeout, linear, easeoutquad
ZoomTime : 0.5, //时间过渡让变焦达到新的放大因子,值为0或更大的数。
ZoomInterval : 0.1,//区间的滑动缩放。放大因子缺省值是0.1。如同在工具栏上使用滑动条按钮的效果。
FitPageOnLoad : true, //(布尔) 适合初始页大小(依高度而定)的装载页。如同在工具栏上使用fit-page按钮的效果。
FitWidthOnLoad : true, // (布尔)适合初始页宽度大小的装载页。如同在工具栏上使用fit-width按钮的效果。
PrintEnabled : true, //是否支持打印
FullScreenAsMaxWindow :false, //是否支持全屏
ProgressiveLoading : false, //是否支持延迟加载
SearchMatchAll : true,//设置为true时,单击搜索所有符合条件的地方高亮显示
PrintToolsVisible : false,
ViewModeToolsVisible : true,//(布尔)显示或隐藏视图模式与工具栏
ZoomToolsVisible : true,//(布尔) 从工具栏显示或隐藏变焦工具
FullScreenVisible : true,//(布尔)以最大化方式打开一个新浏览器窗口。
NavToolsVisible : true,//(布尔)显示或隐藏导航工具
CursorToolsVisible : false,//(布尔) 显示或隐藏光标工具
SearchToolsVisible : true,
localeChain: "en_US" //语言
};
var params = {
}
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "FlexPaperViewer";
attributes.name = "FlexPaperViewer";
swfobject.embedSWF(
"${pageContext.request.contextPath}/flexpaper/swf/FlexPaperViewer.swf", "flashContent",
"800", "532",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
</script>
</head>
<body>
<div id="flashContent" ></div>
</body>
</html>
具体的参数可以参考:
官方文档1:http://flexpaper.org/docs_api.jsp
官方文档2:http://flexpaper.org/docs_parameters.jsp