java开发_模仿百度文库_OpenOffice2PDF_源码下载
这几天在研究模仿着做类似于百度文库的东西,在这里给大家分享一下我自己做的东西。
由于需要做这样的项目,我查阅了很多资料,最后选定一下方案去做:
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
下载后得到:Apache_OpenOffice_incubating_3.4.1_Win_x86_install_zh-CN.exe
2.安装Apache_OpenOffice
双击Apache_OpenOffice_incubating_3.4.1_Win_x86_install_zh-CN.exe进行安装操作
注意:这里的安装位置,要在项目中用到....我安装在:C:/Program Files (x86)/OpenOffice.org 3目录下面
到这里,OpenOffice就算是安装完成了。
3.创建一个项目
/Office2PDF/src/com/b510/office2pdf/Office2PDF.java
1 /** 2 * 3 */ 4 package com.b510.office2pdf; 5 6 import java.io.File; 7 import java.util.Date; 8 import java.util.regex.Pattern; 9 10 import org.artofsolving.jodconverter.OfficeDocumentConverter; 11 import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration; 12 import org.artofsolving.jodconverter.office.OfficeManager; 13 14 /** 15 * 这是一个工具类,主要是为了使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 16 * 转化为pdf文件<br> 17 * Office2010的没测试<br> 18 * 19 * @date 2012-11-5 20 * @author xhw 21 * 22 */ 23 public class Office2PDF { 24 25 /** 26 * office中.doc格式 27 */ 28 public static final String OFFICE_DOC = "doc"; 29 /** 30 * office中.docx格式 31 */ 32 public static final String OFFICE_DOCX = "docx"; 33 /** 34 * office中.xls格式 35 */ 36 public static final String OFFICE_XLS = "xls"; 37 /** 38 * office中.xlsx格式 39 */ 40 public static final String OFFICE_XLSX = "xlsx"; 41 /** 42 * office中.ppt格式 43 */ 44 public static final String OFFICE_PPT = "ppt"; 45 /** 46 * office中.pptx格式 47 */ 48 public static final String OFFICE_PPTX = "pptx"; 49 /** 50 * pdf格式 51 */ 52 public static final String OFFICE_TO_PDF = "pdf"; 53 54 public static void main(String[] args) { 55 Office2PDF office2pdf = new Office2PDF(); 56 office2pdf.openOfficeToPDF("e:/test." + OFFICE_DOCX, "e:/test_" + new Date().getTime() + "." + OFFICE_TO_PDF); 57 office2pdf.openOfficeToPDF("e:/test." + OFFICE_PPTX, null); 58 } 59 60 /** 61 * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件<br> 62 * 63 * @param inputFilePath 64 * 源文件路径,如:"e:/test.docx" 65 * @param outputFilePath 66 * 目标文件路径,如:"e:/test_docx.pdf" 67 * @return 68 */ 69 public boolean openOfficeToPDF(String inputFilePath, String outputFilePath) { 70 return office2pdf(inputFilePath, outputFilePath); 71 } 72 73 /** 74 * 根据操作系统的名称,获取OpenOffice.org 3的安装目录<br> 75 * 如我的OpenOffice.org 3安装在:C:/Program Files (x86)/OpenOffice.org 3<br> 76 * 77 * @return OpenOffice.org 3的安装目录 78 */ 79 public String getOfficeHome() { 80 String osName = System.getProperty("os.name"); 81 if (Pattern.matches("Linux.*", osName)) { 82 return "/opt/openoffice.org3"; 83 } else if (Pattern.matches("Windows.*", osName)) { 84 return "C:/Program Files (x86)/OpenOffice.org 3"; 85 } else if (Pattern.matches("Mac.*", osName)) { 86 return "/Application/OpenOffice.org.app/Contents"; 87 } 88 return null; 89 } 90 91 /** 92 * 连接OpenOffice.org 并且启动OpenOffice.org 93 * 94 * @return 95 */ 96 public OfficeManager getOfficeManager() { 97 DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); 98 // 获取OpenOffice.org 3的安装目录 99 String officeHome = getOfficeHome(); 100 config.setOfficeHome(officeHome); 101 // 启动OpenOffice的服务 102 OfficeManager officeManager = config.buildOfficeManager(); 103 officeManager.start(); 104 return officeManager; 105 } 106 107 /** 108 * 转换文件 109 * 110 * @param inputFile 111 * @param outputFilePath_end 112 * @param inputFilePath 113 * @param outputFilePath 114 * @param converter 115 */ 116 public void converterFile(File inputFile, String outputFilePath_end, String inputFilePath, String outputFilePath, OfficeDocumentConverter converter) { 117 File outputFile = new File(outputFilePath_end); 118 // 假如目标路径不存在,则新建该路径 119 if (!outputFile.getParentFile().exists()) { 120 outputFile.getParentFile().mkdirs(); 121 } 122 converter.convert(inputFile, outputFile); 123 System.out.println("文件:" + inputFilePath + "\n转换为\n目标文件:" + outputFile + "\n成功!"); 124 } 125 126 /** 127 * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件<br> 128 * 129 * @param inputFilePath 130 * 源文件路径,如:"e:/test.docx" 131 * @param outputFilePath 132 * 目标文件路径,如:"e:/test_docx.pdf" 133 * @return 134 */ 135 public boolean office2pdf(String inputFilePath, String outputFilePath) { 136 boolean flag = false; 137 OfficeManager officeManager = getOfficeManager(); 138 // 连接OpenOffice 139 OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); 140 long begin_time = new Date().getTime(); 141 if (null != inputFilePath) { 142 File inputFile = new File(inputFilePath); 143 // 判断目标文件路径是否为空 144 if (null == outputFilePath) { 145 // 转换后的文件路径 146 String outputFilePath_end = getOutputFilePath(inputFilePath); 147 if (inputFile.exists()) {// 找不到源文件, 则返回 148 converterFile(inputFile, outputFilePath_end, inputFilePath, outputFilePath, converter); 149 flag = true; 150 } 151 } else { 152 if (inputFile.exists()) {// 找不到源文件, 则返回 153 converterFile(inputFile, outputFilePath, inputFilePath, outputFilePath, converter); 154 flag = true; 155 } 156 } 157 officeManager.stop(); 158 } else { 159 System.out.println("con't find the resource"); 160 } 161 long end_time = new Date().getTime(); 162 System.out.println("文件转换耗时:[" + (end_time - begin_time) + "]ms"); 163 return flag; 164 } 165 166 /** 167 * 获取输出文件 168 * 169 * @param inputFilePath 170 * @return 171 */ 172 public String getOutputFilePath(String inputFilePath) { 173 String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf"); 174 return outputFilePath; 175 } 176 177 /** 178 * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"<br> 179 * 180 * @param inputFilePath 181 * @return 182 */ 183 public String getPostfix(String inputFilePath) { 184 return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1); 185 } 186 187 }
4.效果
5.控制台效果
1 十一月 05, 2012 5:19:15 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager <init> 2 INFO: ProcessManager implementation is PureJavaProcessManager 3 十一月 05, 2012 5:19:15 下午 org.artofsolving.jodconverter.office.OfficeProcess start 4 INFO: starting process with acceptString 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' and profileDir 'C:\Users\ADMINI~1\AppData\Local\Temp\.jodconverter_socket_host-127.0.0.1_port-2002' 5 十一月 05, 2012 5:19:15 下午 org.artofsolving.jodconverter.office.OfficeProcess start 6 INFO: started process 7 十一月 05, 2012 5:19:16 下午 org.artofsolving.jodconverter.office.OfficeConnection connect 8 INFO: connected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' 9 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop 10 INFO: stopping 11 文件:e:/test.docx 12 转换为 13 目标文件:e:\test_1352107155307.pdf 14 成功! 15 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.OfficeConnection$1 disposing 16 INFO: disconnected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' 17 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ManagedOfficeProcess doEnsureProcessExited 18 INFO: process exited with code 0 19 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop 20 INFO: stopped 21 文件转换耗时:[2838]ms 22 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager <init> 23 INFO: ProcessManager implementation is PureJavaProcessManager 24 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.OfficeProcess start 25 INFO: starting process with acceptString 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' and profileDir 'C:\Users\ADMINI~1\AppData\Local\Temp\.jodconverter_socket_host-127.0.0.1_port-2002' 26 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.OfficeProcess start 27 INFO: started process 28 十一月 05, 2012 5:19:20 下午 org.artofsolving.jodconverter.office.OfficeConnection connect 29 INFO: connected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' 30 文件:e:/test.pptx 31 转换为 32 目标文件:e:\test.pdf 33 成功! 34 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop 35 INFO: stopping 36 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.OfficeConnection$1 disposing 37 INFO: disconnected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1' 38 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.ManagedOfficeProcess doEnsureProcessExited 39 INFO: process exited with code 0 40 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop 41 INFO: stopped 42 文件转换耗时:[6417]ms
是不是很简单....
如果你想尝试一下,这里提供源码下载:http://files.cnblogs.com/hongten/Office2PDF.rar
希望大家多多交流,一起进步...
我的怎么报以下错误呢?
java.lang.NoClassDefFoundError: com/sun/star/lang/DisposedException
at org.artofsolving.jodconverter.office.PooledOfficeManager.(PooledOfficeManager.java:65)
at org.artofsolving.jodconverter.office.ProcessPoolOfficeManager.(ProcessPoolOfficeManager.java:55)
at org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration.buildOfficeManager(DefaultOfficeManagerConfiguration.java:185)
at com.kingdee.eas.cp.odm.util.Byte2LocalFileServlet.getOfficeManager(Byte2LocalFileServlet.java:156)
我之前查过资料,使用word转换为swf有三种方式:
我只是选择其中的一种,即上面的方式,不过我没有去试过其他方法
还有就是使用上面的方法,我的做法是按照OpenOffice,而你所说的库文件之类的你可以到OpenOffice的官网看看: http://www.openoffice.org/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
public
void
convertPDF2SWF(String param, String orginName,
String savePath)
throws
IOException {
Process process =
null
;
String ext = param.substring(param.lastIndexOf(
"."
) +
1
);
if
(ext !=
null
&& !(
""
.equals(ext)) &&
"done"
.equals(ext)) {
File tmp =
new
File(param);
if
(tmp !=
null
&& tmp.exists()) {
tmp.renameTo(
new
File(param
.substring(
0
, param.lastIndexOf(
"."
))));
}
}
param = param.substring(
0
);
String cmd = PDF2SWF + param +
"\""
;
cmd = cmd.replace(
"%?%"
, savePath );
process = Runtime.getRuntime().exec(cmd);
// 调用外部程序
final
InputStream is1 = process.getInputStream();
new
Thread(
new
Runnable() {
public
void
run() {
BufferedReader br =
new
BufferedReader(
new
InputStreamReader(is1));
try
{
while
(br.readLine()!=
null
) ;
}
catch
(IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
// 启动单独的线程来清空process.getInputStream()的缓冲区
InputStream is2 = process.getErrorStream();
BufferedReader br2 =
new
BufferedReader(
new
InputStreamReader(is2));
StringBuilder buf =
new
StringBuilder();
// 保存输出结果流
String line =
null
;
while
((line = br2.readLine()) !=
null
){
buf.append(line);
// 循环等待ffmpeg进程结束
}
// BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while
(br2.readLine() !=
null
);
try
{
process.waitFor();
}
catch
(InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
process.exitValue();
}
|
pdf转swf,楼主可以下载《JavaScript高级程序设计.pdf》自己测试下浏览速度
命令操作:D:\SWFTools/pdf2swf.exe -t "e:/javascript高级程序设计.pdf" -o "e:/test_1352107155307_1399195936609.swf" -s flashversion=9 -s languagedir=D:\xpdf\xpdf-chinese-simplified
开始转换...
转换结束...
转换共耗时 :[43453]ms
转换文件成功!!
差不多是40多秒的样子!
我的电脑配置: Hongten's Computer
开始转换...
转换结束...
转换共耗时 :[355358]ms
转换文件成功!!
直接用的你的代码。。。
电脑配置8G内存,4核 ,win7 64位 ,jdk6.0。
我装的swf软件是swftools-2013-04-09-1007.exe。难道是这个软件问题,因为我直接在命令窗口转换也是几分钟
换了一个版本swftools-0.9.0.exe
命令操作:E:/Program Files (x86)/SWFTools/pdf2swf.exe -t "d:/JavaScript高级程序设计.pdf" -o "e:/test_1352107155307_1399269794612.swf" -s flashversion=9 -s languagedir=D:\xpdf\xpdf-chinese-simplified
开始转换...
转换结束...
转换共耗时 :[101129]ms
转换文件成功!!
竟然快了3倍,当然跟你的比还是慢了将近3倍
» 更多知识库文章...
搜索
我的标签
随笔分类
- ActionScript(AS)
- Android(15)
- Apache(7)
- C/C++
- Crystal Reports(4)
- dedeCMS(1)
- django框架(3)
- eclipse(2)
- Hibernate(6)
- HTML5(3)
- java (122)
- Java Web(58)
- JavaScript(9)
- java多线程(5)
- Linux(9)
- Lucene(13)
- maven(2)
- mysql(5)
- OpenOffice(2)
- Oracle(6)
- photoshop(1)
- php(7)
- pygame系列(13)
- Python(97)
- Ruby(1)
- software(3)
- spring(20)
- Struts2(9)
- 百度文库(4)
- 读书(Readed Books)(53)
- 工作经验(6)
- 人生-生活(20)
- 设计模式(5)
- 算法与数据结构(12)
随笔档案
- 2014年9月 (2)
- 2014年8月 (9)
- 2014年7月 (10)
- 2014年6月 (10)
- 2014年5月 (8)
- 2014年4月 (8)
- 2014年3月 (11)
- 2014年2月 (14)
- 2014年1月 (9)
- 2013年12月 (6)
- 2013年11月 (6)
- 2013年10月 (16)
- 2013年9月 (22)
- 2013年8月 (41)
- 2013年7月 (24)
- 2013年6月 (5)
- 2013年5月 (9)
- 2013年4月 (18)
- 2013年3月 (23)
- 2013年2月 (14)
- 2013年1月 (5)
- 2012年12月 (11)
- 2012年11月 (28)
- 2012年10月 (8)
- 2012年7月 (15)
- 2012年6月 (4)
- 2012年5月 (2)
- 2012年4月 (12)
- 2012年3月 (22)
- 2012年2月 (7)
- 2011年12月 (3)
- 2011年11月 (4)
- 2011年10月 (3)
- 2011年9月 (1)
- 2011年8月 (6)
- 2011年7月 (48)
- 2011年6月 (5)
- 2011年5月 (9)
- 2011年4月 (2)
- 2011年3月 (14)
积分与排名
- 积分 - 371045
- 排名 - 227
最新评论
- 1. Re:java画图程序_图片用字母画出来
- 怎么操作的吧
- 2. Re:java画图程序_图片用字母画出来
- 厉害
- 3. Re:Windows7下面手把手教你安装Django
- 请问博主的django下载路径是哪来的?
我看官网上windows下载django的方式很麻烦的 - 4. Re:python开发_mysqldb安装
- 为什么我安装的时候,选择正确的路径后,点击next就程序无响应了呢?
我是win7 的64位 - 5. Re:你也可以用java的swing可以做出这么炫的mp3播放器_源码下载
- @linapex
如果你指的是图片中话,那是1800元/年