2012年11月5日星期一

java开发_模仿百度文库_OpenOffice2PDF_源码下载

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 inputFile111      * @param outputFilePath_end112      * @param inputFilePath113      * @param outputFilePath114      * @param converter115      */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 inputFilePath130      *            源文件路径,如:"e:/test.docx"131      * @param outputFilePath132      *            目标文件路径,如:"e:/test_docx.pdf"133      * @return134      */135     public boolean office2pdf(String inputFilePath, String outputFilePath) {136         boolean flag = false;137         OfficeManager officeManager = getOfficeManager();138         // 连接OpenOffice139         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 inputFilePath170      * @return171      */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 inputFilePath181      * @return182      */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 stop10 INFO: stopping11 文件:e:/test.docx12 转换为13 目标文件:e:\test_1352107155307.pdf14 成功!15 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.OfficeConnection$1 disposing16 INFO: disconnected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1'17 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ManagedOfficeProcess doEnsureProcessExited18 INFO: process exited with code 019 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop20 INFO: stopped21 文件转换耗时:[2838]ms22 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager <init>23 INFO: ProcessManager implementation is PureJavaProcessManager24 十一月 05, 2012 5:19:19 下午 org.artofsolving.jodconverter.office.OfficeProcess start25 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 start27 INFO: started process28 十一月 05, 2012 5:19:20 下午 org.artofsolving.jodconverter.office.OfficeConnection connect29 INFO: connected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1'30 文件:e:/test.pptx31 转换为32 目标文件:e:\test.pdf33 成功!34 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop35 INFO: stopping36 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.OfficeConnection$1 disposing37 INFO: disconnected: 'socket,host=127.0.0.1,port=2002,tcpNoDelay=1'38 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.ManagedOfficeProcess doEnsureProcessExited39 INFO: process exited with code 040 十一月 05, 2012 5:19:26 下午 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager stop41 INFO: stopped42 文件转换耗时:[6417]ms

是不是很简单....

如果你想尝试一下,这里提供源码下载:http://files.cnblogs.com/hongten/Office2PDF.rar

希望大家多多交流,一起进步...




TAG: