zoukankan      html  css  js  c++  java
  • 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

    是不是很简单....

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

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

    下面是注意事项:java开发_模仿百度文库_OpenOffice2PDF_注意事项

    ========================================================

    More reading,and english is important.

    I'm Hongten

     

    大哥哥大姐姐,觉得有用打赏点哦!多多少少没关系,一分也是对我的支持和鼓励。谢谢。
    Hongten博客排名在100名以内。粉丝过千。
    Hongten出品,必是精品。

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

    ========================================================

  • 相关阅读:
    合唱队形2 洛谷U5874
    AC日记——石子归并 codevs 1048
    AC日记——舒适的路线 codevs 1001 (并查集+乱搞)
    AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
    常见模板(欧拉筛素数,最小生成树,快排,并查集,单源最短路)
    AC日记——信息传递 洛谷 P2661 (tarjan求环)
    AC日记——逃出克隆岛 (bfs)
    数字对 (长乐一中模拟赛day2T2)
    改造二叉树 (长乐一中模拟赛day2T1)
    AC日记——热浪 codevs 1557 (最短路模板题)
  • 原文地址:https://www.cnblogs.com/hongten/p/java_OpenOffice2PDF.html
Copyright © 2011-2022 走看看