利用swftools将pdf转换为swf小例

13年前
package com.iori.webapp.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class PDF2SWFUtil {
 
 /**
  * 利用SWFTools工具将pdf转换成swf,转换完后的swf文件与pdf同名
  * @author iori
  * @param fileDir PDF文件存放路径(包括文件名)
  * @param exePath 转换器安装路径
  * @throws IOException
  */
 public static synchronized void pdf2swf(String fileDir, String exePath) throws IOException {
  //文件路径
  String filePath = fileDir.substring(0, fileDir.lastIndexOf("/"));
  //文件名,不带后缀
  String fileName = fileDir.substring((filePath.length() + 1), fileDir.lastIndexOf("."));
  Process pro = null;
  if (isWindowsSystem()) {
   //如果是windows系统
   //命令行命令
   String cmd = exePath + " \"" + fileDir + "\" -o \"" + filePath + "/" + fileName + ".swf\"";
   //Runtime执行后返回创建的进程对象
   pro = Runtime.getRuntime().exec(cmd);
  } else {
   //如果是linux系统,路径不能有空格,而且一定不能用双引号,否则无法创建进程
   String[] cmd = new String[3];
   cmd[0] = exePath;
   cmd[1] = fileDir;
   cmd[2] = filePath + "/" + fileName + ".swf";
   //Runtime执行后返回创建的进程对象
   pro = Runtime.getRuntime().exec(cmd);
  }
  //非要读取一遍cmd的输出,要不不会flush生成文件(多线程)
  new DoOutput(pro.getInputStream()).start();
  new DoOutput(pro.getErrorStream()).start();
  try {
   //调用waitFor方法,是为了阻塞当前进程,直到cmd执行完
         pro.waitFor();
     } catch (InterruptedException e) {
         e.printStackTrace();
     }
 }
 
 /**
  * 判断是否是windows操作系统
  * @author iori
  * @return
  */
 private static boolean isWindowsSystem() {
  String p = System.getProperty("os.name");
  return p.toLowerCase().indexOf("windows") >= 0 ? true : false;
 }
 
 /**
  * 多线程内部类
  * 读取转换时cmd进程的标准输出流和错误输出流,这样做是因为如果不读取流,进程将死锁
  * @author iori
  */
 private static class DoOutput extends Thread {
  public InputStream is;
 
  //构造方法
  public DoOutput(InputStream is) {
   this.is = is;
  }
 
  public void run() {
   BufferedReader br = new BufferedReader(new InputStreamReader(this.is));
   String str = null;
   try {
    //这里并没有对流的内容进行处理,只是读了一遍
    while ((str = br.readLine()) != null);
   } catch (IOException e) {
    e.printStackTrace();
   } finally {
    if (br != null) {
     try {
      br.close();
     } catch (IOException e) {
      e.printStackTrace();
     }
    }
   }
  }
 }
 
 /**
  * 测试main方法
  * @param args
  */
 public static void main(String[] args) {
  //转换器安装路径
  String exePath = "c:/SWFTools/pdf2swf.exe";
  try {
   PDF2SWFUtil.pdf2swf("c:/test.pdf", exePath);
  } catch (IOException e) {
   System.err.println("转换出错!");
   e.printStackTrace();
  }
 }
}
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/FG2006/archive/2010/08/19/5823420.aspx