利用OpenOffice.org和Swftools进行实现—doc-->pdf-->swf--格式的转换

如果你是使用maven来管理项目的话,你可以在pom.xml 文件下填写如下代码:

<dependency>
     <groupId>com.artofsolving</groupId>
     <artifactId>jodconverter</artifactId>
     <version>2.2.1</version>
  </dependency> 

则会自动下载此jar包

在运行次类之前,你必须确保已经装好 SWFTools 和 openoffice 这两个软件

openoffice 安装:

http://blog.csdn.net/zhaokuo719/article/details/7291243


import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

/*
 * doc docx格式转换
 * @author Administrator
 */
public class DocConverter {
 private static final int environment = 1;// 环境1:windows
           // 2:linux(涉及pdf2swf路径问题)
 private String fileString;
 private String outputPath = "";// 输入路径,如果不设置就输出在默认位置
 private String fileName;
 private File pdfFile;
 private File swfFile;
 private File docFile;
 private String swfToolesPath="D:/SWFTools/pdf2swf.exe";
 private String language ="d:/language";

 public DocConverter(String fileString) {
  ini(fileString);
 }

 /*
  * 重新设置 file
  *
  * @param fileString
  */
 public void setFile(String fileString) {
  ini(fileString);
 }

 /*
  * 初始化
  *
  * @param fileString
  */
 private void ini(String fileString) {
  this.fileString = fileString;
  fileName = fileString.substring(0, fileString.lastIndexOf("."));
  docFile = new File(fileString);
  pdfFile = new File(fileName + ".pdf");
  swfFile = new File(fileName + ".swf");
 }

 /*
  * 转为PDF
  *
  * @param file
  */
 private int doc2pdf() throws Exception {
  int reslut=0;
  if (docFile.exists()) {
   if (!pdfFile.exists()) {
    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    try {
     connection.connect();
     DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
     converter.convert(docFile, pdfFile);
     connection.disconnect();
     System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");
    } catch (java.net.ConnectException e) {
     e.printStackTrace();
     System.out.println("****swf转换异常,openoffice服务未启动!****");
     throw e;
    } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
     e.printStackTrace();
     System.out.println("****swf转换器异常,读取转换文件失败****");
     throw e;
    } catch (Exception e) {
     e.printStackTrace();
     throw e;
    }
    reslut=1;
   } else {
    System.out.println("****已经转换为pdf,不需要再进行转化****"+"\n" +"开始转换swf");
    reslut=2;
    
   }
  } else {
   System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
   
  }
  return reslut;
 }

 /*
  * 转换成swf
  */
 @SuppressWarnings("unused")
 private void pdf2swf(int rs) throws Exception {
  Runtime r = Runtime.getRuntime();
  if (!swfFile.exists()) {
   if (pdfFile.exists()) {
    
    if (environment == 1){
     try {
      String cmd=swfToolesPath.trim()+" -o "+swfFile.getPath().trim()+" -t "+pdfFile.getPath().trim()+" -s languagedir="+language.trim();
      System.out.println(cmd);
      Process p = r.exec(cmd);
      System.out.print(loadStream(p.getInputStream()));
      System.err.print(loadStream(p.getErrorStream()));
      System.out.print(loadStream(p.getInputStream()));
      System.err.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****");
      if (pdfFile.exists()) {
       if(rs!=2){
        pdfFile.delete();
       }
      }
     } catch (Exception e) {
      e.printStackTrace();
      throw e;
     }
    }
   } else {
    System.out.println("****pdf不存在,无法转换****");
   }
  } else {
   System.out.println("****swf已存在不需要转换****");
  }
 }

 static String loadStream(InputStream in) throws IOException {
  int ptr = 0;
  in = new BufferedInputStream(in);
  StringBuffer buffer = new StringBuffer();

  while ((ptr = in.read()) != -1) {
   buffer.append((char) ptr);
  }
  return buffer.toString();
 }

 /*
  * 转换主方法
  */
 @SuppressWarnings("unused")
 public boolean conver() {
  if (swfFile.exists()) {
   System.out.println("****swf转换器开始工作,该文件已经转换为swf****");
   return true;
  }

  if (environment == 1) {
   System.out.println("****swf转换器开始工作,当前设置运行环境windows****");
  } else {
   System.out.println("****swf转换器开始工作,当前设置运行环境linux****");
  }

  try {
   int rs=doc2pdf();
   if(rs==1||rs==2){
    
    pdf2swf(rs);
   }
   
  } catch (Exception e) {
   e.printStackTrace();
   return false;
  }

  if (swfFile.exists()) {
   return true;
  } else {
   return false;
  }
 }

 /*
  * 返回文件路径
  *
  * @param s
  */
 public String getswfPath() {
  if (swfFile.exists()) {
   String tempString = swfFile.getPath();
   tempString = tempString.replaceAll("\\\\", "/");
   return tempString;
  } else {
   return "";
  }
 }

 /*
  * 设置输出路径
  */
 public void setOutputPath(String outputPath) {
  this.outputPath = outputPath;
  if (!outputPath.equals("")) {
   String realName = fileName.substring(fileName.lastIndexOf("/"),
     fileName.lastIndexOf("."));
   if (outputPath.charAt(outputPath.length()) == '/') {
    swfFile = new File(outputPath + realName + ".swf");
   } else {
    swfFile = new File(outputPath + realName + ".swf");
   }
  }
 }

 public static void main(String s[]) {
  DocConverter d = new DocConverter("c://temp//ddddd.pdf");
  d.conver();
 }
}

你可能感兴趣的:(利用OpenOffice.org和Swftools进行实现—doc-->pdf-->swf--格式的转换)