这几天在研究模仿着做类似于百度文库的东西,在这里给大家分享一下我自己做的东西。
由于需要做这样的项目,我查阅了很多资料,最后选定一下方案去做:
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
希望大家多多交流,一起进步...
原文:http://www.cnblogs.com/hongten/archive/2012/11/05/java_OpenOffice2PDF.html