zoukankan      html  css  js  c++  java
  • OpenOffice2PDF,利用openoffice实现将word和excel转为pdf

      1 package com.xfzx.test.POI.main;
      2 
      3 import java.io.File;
      4 import java.util.ArrayList;
      5 import java.util.Collections;
      6 import java.util.Date;
      7 import java.util.regex.Pattern;
      8 
      9 import org.artofsolving.jodconverter.OfficeDocumentConverter;
     10 import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
     11 import org.artofsolving.jodconverter.office.OfficeManager;
     12 
     13 public class OpenOffice2PDF {
     14 
     15     /**
     16      * office中各种格式
     17      */
     18     private static final String[] OFFICE_POSTFIXS = { "doc", "docx", "xls",
     19             "xlsx", "ppt", "pptx" };
     20     private ArrayList<String> Office_Formats = new ArrayList<String>();
     21 
     22     /**
     23      * pdf格式
     24      */
     25     private static final String PDF_POSTFIX= "pdf";
     26     
     27     /**
     28      * 根据操作系统的名称,获取OpenOffice.org 3的安装目录 如我的OpenOffice.org 3安装在:C:/Program
     29      * Files/OpenOffice.org 3
     30      */
     31     
     32     public String getOfficeHome() {
     33         String osName = System.getProperty("os.name");
     34         if (Pattern.matches("Linux.*", osName)) {
     35             return "/opt/openoffice.org3";
     36         } else if (Pattern.matches("Windows.*", osName)) {
     37             return "D:/Program Files/OpenOffice.org 3";
     38         }
     39         return null;
     40     }
     41     /**
     42      * 转换文件
     43      * @param inputFilePath
     44      * @param outputFilePath
     45      * @param converter
     46      */
     47     public void converterFile(String inputFilePath, String outputFilePath,
     48             OfficeDocumentConverter converter) {
     49         File inputFile=new File(inputFilePath);
     50         File outputFile = new File(outputFilePath);
     51         // 假如目标路径不存在,则新建该路径
     52         if (!outputFile.getParentFile().exists()) {
     53             outputFile.getParentFile().mkdirs();
     54         }
     55         converter.convert(inputFile, outputFile);
     56         System.out.println("文件:" + inputFilePath + "\n转换为\n目标文件:" + outputFile
     57                 + "\n成功!");
     58     }
     59 
     60     /**
     61      * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
     62      * 
     63      * @param inputFilePath
     64      *            源文件路径,如:"e:/test.docx"
     65      * @param outputFilePath
     66      *            如果指定则按照指定方法,如果未指定(null)则按照源文件路径自动生成目标文件路径,如:"e:/test_docx.pdf"
     67      * @return
     68      */
     69     public boolean openOffice2Pdf(String inputFilePath, String outputFilePath) {
     70         boolean flag = false;
     71         /*
     72          * 连接OpenOffice.org 并且启动OpenOffice.org
     73          */
     74         DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration();
     75         // 获取OpenOffice.org 3的安装目录
     76         String officeHome = getOfficeHome();
     77         config.setOfficeHome(officeHome);
     78         // 启动OpenOffice的服务
     79         OfficeManager officeManager = config.buildOfficeManager();
     80         officeManager.start();
     81         // 连接OpenOffice
     82         OfficeDocumentConverter converter = new OfficeDocumentConverter(
     83                 officeManager);
     84         long begin_time = new Date().getTime();
     85         File inputFile=new File(inputFilePath);
     86         Collections.addAll(Office_Formats, OFFICE_POSTFIXS);
     87         if ((null != inputFilePath) && (inputFile.exists())) {
     88             // 判断目标文件路径是否为空
     89             if (Office_Formats.contains(getPostfix(inputFilePath))) {
     90                 if (null == outputFilePath) {
     91                     // 转换后的文件路径
     92                     String outputFilePath_new = generateDefaultOutputFilePath(inputFilePath);
     93                     converterFile(inputFilePath, outputFilePath_new, converter);
     94                     flag = true;
     95 
     96                 } else {
     97                     converterFile(inputFilePath, outputFilePath, converter);
     98                     flag = true;
     99                 }
    100             }
    101 
    102         } else {
    103             System.out.println("con't find the resource");
    104         }
    105         long end_time = new Date().getTime();
    106         System.out.println("文件转换耗时:[" + (end_time - begin_time) + "]ms");
    107         officeManager.stop();
    108         return flag;
    109     }
    110 
    111     /**
    112      * 如果未设置输出文件路径则按照源文件路径和文件名生成输出文件地址。例,输入为 D:/fee.xlsx 则输出为D:/fee_xlsx.pdf
    113      */
    114     public String generateDefaultOutputFilePath(String inputFilePath) {
    115         String outputFilePath = inputFilePath.replaceAll("."
    116                 + getPostfix(inputFilePath), "_" + getPostfix(inputFilePath)
    117                 + ".pdf");
    118         return outputFilePath;
    119     }
    120 
    121     /**
    122      * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"
    123      */
    124     public String getPostfix(String inputFilePath) {
    125         String[] p = inputFilePath.split("\\.");
    126         if (p.length > 0) {// 判断文件有无扩展名
    127             // 比较文件扩展名
    128             return p[p.length - 1];
    129         } else {
    130             return null;
    131         }
    132     }
    133     
    134     public static void main(String[] args) {
    135 
    136         OpenOffice2PDF office2pdf = new OpenOffice2PDF();
    137         office2pdf.openOffice2Pdf("D:/国家知识产权局第二届运动会拔河及田进比赛的通知.doc",
    138                 "D:/国家知识产权局第二届运动会拔河及田进比赛的通知_" + new Date().getTime() + "."
    139                         + PDF_POSTFIX);
    140         office2pdf.openOffice2Pdf("D:/函件自定义调用字段_20130220_GC.xls",null);
    141     }
    142 
    143 
    144 }
  • 相关阅读:
    将字符串指针ps1 和 ps2之间的内存拷贝出来
    wm_copydata不等返回值处理 SendMessage SendMessageTimeout
    成为编程高手的八大奥秘
    成功老板防骗反骗技巧
    创业者怎样掌握简便的创业机会
    爱过了,恨过了,在这里留下最想对他/她说的那句话!(转)
    创业者须知的8条创业逻辑
    超越无形, 做只“一天到晚会游的鱼”
    男性的12种健康食物!
    原始商人的深度思考(二)市场准入时机的把握
  • 原文地址:https://www.cnblogs.com/hold/p/2952855.html
Copyright © 2011-2022 走看看