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

swftools安装包下载地址:
http://flexpaper.devaldi.com/

利用swftools将pdf转换为swf小例相关推荐

  1. Java使用SWFTools转换PDF为SWF

    上一篇文章说道,我的一个Android项目里需要查看word和pdf文档,由于在移动终端转换格式比较费劲,所以我选择在服务器端转换.针对word我选择转换为html,在上一篇文章中已经说得很清楚了,那 ...

  2. 将PDF转换为SWF文件

    在处理在线阅读PDF文件时,可以将PDF文件转换为SWF的方式.使用SWFTOOLS工具可以实现格式转换. 工具下载:http://www.swftools.org/download.html swf ...

  3. java linux pdf2swf_Linux PDF转换为SWF

    Linux PDF转换为SWF 2010-01-28 15:33:32 由于工程需要把用户上传的PDF转换为SWF,服务器要求也是linux,所以就想到 swftools,官方网站:http://ww ...

  4. linux java pdf2swf_linux PDF转换为SWF

    由于工程需要把用户上传的PDF转换为SWF,服务器要求也是linux,所以就想到 swftools,官方网站:http://www.swftools.org/可以把很多文件转换为swf,他默认只支持 ...

  5. SWFTools PDF转换为SWF

    前言 在iText 制作PDF这篇博文中只是简单的介绍了如何制作PDF,为了能让PDF在Web页面中显示,我还需要通过SWFTools工具将PDF文件转换为SWF文件,然后通过SWF文件显示在Web网 ...

  6. pdf转换为word小工具,挺好

    这个工具不错啊,曾经我一直想找一个pdf转换为word的,但是一直不怎么合心意.感觉转换的格式都不是非常好,但是这个工具转换出来的东西和原来的pdf差点儿相同.是个好东西. 链接 下载链接 只是要注冊 ...

  7. Python 利用pymupdf将pdf转换为图片并拆分,后通过PIL合并生成一张图片

    文章主要内容主要参考几篇文章并合并在一起的,文章链接依次如下,第二和第三的文章链接是从第一篇文章找到的: (1).https://blog.csdn.net/qq_25115281/article/d ...

  8. linux pdf转换swf,CENTOS 5   PDF转换为SWF

    1.Install Language support in CentOS 5 or Red Hat Enterprise Linux(http://www.cyberciti.biz/faq/linu ...

  9. swftools工具将pdf文件转换为swf文件

    开发客户网站时遇到了一个需求,客户要求后台上传pdf文件,前台能以翻书的形式直接访问. 首先想到的是使用js解决,用户访问前端页面时,php将文件路径发送给js,让js呈现出来翻书的效果.在网上百度了 ...

最新文章

  1. epoll监听文件_epoll详解——从功能到内核
  2. cad怎么卸载干净_百度软件中心助手怎么样干净卸载
  3. Python 中__new__()和__init__()的区别
  4. 最好用的日志分析工具ELK
  5. invalid floating point operation什么意思_数据可视化有意思的小例子:Taylor Swift 歌词数据分析和可视化...
  6. java确认rabbitmq_RabbitMQ 消息确认机制
  7. 华为产品技术学习笔记之路由原理(一)
  8. 王校长一分钟能吃多少热狗?| 小游戏
  9. ETL数据清洗的案例
  10. 班尼路信息化系统基础选型的简单分析
  11. Spring 依赖注入中 Field 注入的有害性
  12. 微信小程序的基础实现
  13. Github上的1000多本免费电子书重磅来袭!
  14. 微信小程序--对接萤石云视频监控
  15. 2021全新整合单机游戏 PC电脑版中文合集系列下载持续更新
  16. css版权备案等居于页面底部与超出不换行可滑动
  17. Keil MDK 和 IAR 两款ARM开发工具区别比较
  18. error MSB4184: 无法计算表达式
  19. 银河麒麟系统共享打印机方法
  20. 九章算术卷第八 方程

热门文章

  1. 区块链工作原理(区块链治理系统、比特币、以太坊、智能合约)
  2. 青少年python系列 33.python安装非内置模块
  3. 多目标优化算法平台PlatEMO的基本使用方法
  4. 计算机考试计划,全国网络考试计算机复习计划
  5. 思科网络安全 第九章考试答案
  6. 如何输入罗马数字I,II,III
  7. pythonweb开发实战pdf百度贴吧_Python Web自动化测试入门与实战,从入门到入行
  8. 十一、Actix-web 拦截器中间件
  9. 自动驾驶的自行车——GitHub 热点速览 v.21.24
  10. 让一个灰度矩阵显示为图片python