当前位置: 首页 > news >正文

利用SWFTools工具将pdf转换成swf

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();
  }
 }
}

 

 

 

 

///php代码

 

Php代码 
 

 

相关文章:

  • Thrift-java学习小结
  • Flex:使用FlexPaper显示PDF文档
  • SWFObject2.0两种调用方式
  • 异构SOA系统架构之Asp.net实现(兼容dubbo)
  • Spring核心技术(十一)——基于Java的容器配置(一)
  • 让网站禁止某些邮箱的注册
  • oschina github使用指南
  • VC++ 命名空间
  • 数据库字段类型
  • C++对C的扩充(1)
  • JS中创建对象的方法及json
  • C++对C的扩充(2)
  • Chapter1-data access reloaded:Entity Framework(下)
  • 第四讲:面向对象程序设计方法及类、对象的概念
  • 第五讲:类的成员、对象成员的引用
  • [LeetCode] Wiggle Sort
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【前端学习】-粗谈选择器
  • bearychat的java client
  • ES6系列(二)变量的解构赋值
  • IDEA 插件开发入门教程
  • Java知识点总结(JavaIO-打印流)
  • V4L2视频输入框架概述
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 来,膜拜下android roadmap,强大的执行力
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 少走弯路,给Java 1~5 年程序员的建议
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 学习Vue.js的五个小例子
  • 大数据全解:定义、价值及挑战
  • ​ssh免密码登录设置及问题总结
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (接口封装)
  • (五)关系数据库标准语言SQL
  • (转)3D模板阴影原理
  • (转)iOS字体
  • (转)ObjectiveC 深浅拷贝学习
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net专家(张羿专栏)
  • @Controller和@RestController的区别?
  • @RequestMapping-占位符映射
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [20140403]查询是否产生日志
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [BSGS算法]纯水斐波那契数列
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C++]unordered系列关联式容器
  • [DevEpxress]GridControl 显示Gif动画
  • [Gamma]阶段测试报告
  • [LeetCode] NO. 169 Majority Element