java开发_模仿百度文库_SWFTools_源码下载

在之前有做了一篇文章:java开发_模仿百度文库_OpenOffice2PDF_源码下载

今天做第二步:PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)

做之前,我们也要先做一些准备:

1.下载SWFTools

下载地址:http://www.swftools.org/download.html

我下载的是:swftools-2012-10-15-1307.exe

2.安装SWFTools

注意:这里的是我电脑的SWFTools安装目,因为程序中需要用到....所以这里需要注意一下..

到这里,我们就安装完成啦...

3.新建一个java project

/pdf2swf/src/com/b510/pdf2swf/PDF2SWF.java

  1 /**
  2  * 
  3  */
  4 package com.b510.pdf2swf;
  5 
  6 import java.io.BufferedReader;
  7 import java.io.File;
  8 import java.io.IOException;
  9 import java.io.InputStream;
 10 import java.io.InputStreamReader;
 11 import java.util.Date;
 12 
 13 /**
 14  * PDF转SWF工具
 15  * 
 16  * @date 2012-11-5
 17  * @author xhw
 18  * 
 19  */
 20 public class PDF2SWF {
 21 
 22     /**
 23      * SWTOOLS的安装路径,我的SWFTools安装目录为:"C:/Program Files (x86)/SWFTools"
 24      */
 25     public static final String SWFTOOLS_PATH = "C:/Program Files (x86)/SWFTools";
 26     /**
 27      * pdf文件后缀名
 28      */
 29     public static final String FILE_NAME_OF_PDF = "pdf";
 30     /**
 31      * swf文件后缀名
 32      */
 33     public static final String FILE_NAME_OF_SWF = "swf";
 34 
 35     /**
 36      * 获得文件的路径
 37      * 
 38      * @param file
 39      *            文件的路径 ,如:"c:/test/test.swf"
 40      * @return 文件的路径
 41      */
 42     public static String getFilePath(String file) {
 43         String result = file.substring(0, file.lastIndexOf("/"));
 44         if (file.substring(2, 3) == "/") {
 45             result = file.substring(0, file.lastIndexOf("/"));
 46         } else if (file.substring(2, 3) == "\\") {
 47             result = file.substring(0, file.lastIndexOf("\\"));
 48         }
 49         return result;
 50     }
 51 
 52     /**
 53      * 新建一个目录
 54      * 
 55      * @param folderPath
 56      *            新建目录的路径 如:"c:\\newFolder"
 57      */
 58     public static void newFolder(String folderPath) {
 59         try {
 60             File myFolderPath = new File(folderPath.toString());
 61             if (!myFolderPath.exists()) {
 62                 myFolderPath.mkdir();
 63             }
 64         } catch (Exception e) {
 65             System.out.println("新建目录操作出错");
 66             e.printStackTrace();
 67         }
 68     }
 69 
 70     /**
 71      * the exit value of the subprocess represented by this Process object. By
 72      * convention, the value 0 indicates normal termination.
 73      * 
 74      * @param sourcePath
 75      *            pdf文件路径 ,如:"c:/hello.pdf"
 76      * @param destPath
 77      *            swf文件路径,如:"c:/test/test.swf"
 78      * @return 正常情况下返回:0,失败情况返回:1
 79      * @throws IOException
 80      */
 81     public static int convertPDF2SWF(String sourcePath, String destPath) throws IOException {
 82         // 如果目标文件的路径是新的,则新建路径
 83         newFolder(getFilePath(destPath));
 84 
 85         // 源文件不存在则返回
 86         File source = new File(sourcePath);
 87         if (!source.exists()) {
 88             return 0;
 89         }
 90 
 91         // 调用pdf2swf命令进行转换
 92         String command = SWFTOOLS_PATH + "/pdf2swf.exe  -t \"" + sourcePath + "\" -o  \"" + destPath + "\" -s flashversion=9 -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ";
 93         System.out.println("命令操作:" + command + "\n开始转换...");
 94         // 调用外部程序
 95         Process process = Runtime.getRuntime().exec(command);
 96         final InputStream is1 = process.getInputStream();
 97         new Thread(new Runnable() {
 98             public void run() {
 99                 BufferedReader br = new BufferedReader(new InputStreamReader(is1));
100                 try {
101                     while (br.readLine() != null)
102                         ;
103                 } catch (IOException e) {
104                     e.printStackTrace();
105                 }
106             }
107         }).start(); // 启动单独的线程来清空process.getInputStream()的缓冲区
108         InputStream is2 = process.getErrorStream();
109         BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));
110         // 保存输出结果流
111         StringBuilder buf = new StringBuilder();
112         String line = null;
113         while ((line = br2.readLine()) != null)
114             // 循环等待ffmpeg进程结束
115             buf.append(line);
116         while (br2.readLine() != null)
117             ;
118         try {
119             process.waitFor();
120         } catch (InterruptedException e) {
121             e.printStackTrace();
122         }
123         System.out.println("转换结束...");
124         return process.exitValue();
125     }
126 
127     /**
128      * pdf文件转换为swf文件操作
129      * 
130      * @param sourcePath
131      *            pdf文件路径 ,如:"c:/hello.pdf"
132      * @param destPath
133      *            swf文件路径,如:"c:/test/test.swf"
134      */
135     public static void pdf2swf(String sourcePath, String destPath) {
136         long begin_time = new Date().getTime();
137         try {
138             PDF2SWF.convertPDF2SWF(sourcePath, destPath);
139         } catch (Exception ex) {
140             System.out.println("转换过程失败!!");
141         }
142         long end_time = new Date().getTime();
143         System.out.println("转换共耗时 :[" + (end_time - begin_time) + "]ms");
144         System.out.println("转换文件成功!!");
145     }
146 
147     public static void main(String[] args) throws IOException {
148         String sourcePath = "e:/test_1352107155307." + FILE_NAME_OF_PDF;
149         String destPath = "e:/hello/test_1352107155307_" + new Date().getTime() + "." + FILE_NAME_OF_SWF;
150         pdf2swf(sourcePath, destPath);
151     }
152 }

4.运行效果:

5.后台运行情况

1 命令操作:C:/Program Files (x86)/SWFTools/pdf2swf.exe  -t "e:/test_1352107155307.pdf" -o  "e:/hello/test_1352107155307_1352171476399.swf" -s flashversion=9 -s languagedir=D:\xpdf\xpdf-chinese-simplified 
2 开始转换...
3 转换结束...
4 转换共耗时 :[1226]ms
5 转换文件成功!!

====================================================================

/pdf2swf/src/com/b510/pdf2swf/ConvertToSwf.java

  1 /**
  2  * 
  3  */
  4 package com.b510.pdf2swf;
  5 
  6 import java.io.BufferedReader;
  7 import java.io.File;
  8 import java.io.IOException;
  9 import java.io.InputStreamReader;
 10 import java.util.ArrayList;
 11 import java.util.Date;
 12 import java.util.List;
 13 
 14  
 15 /**
 16  * @author nlb
 17  * @version 1.0 把pdf,jpeg,font,gif,pgn,wav转化为swf文件
 18  */ 
 19 public class ConvertToSwf { 
 20  
 21     private final String CONVERTFILETYPE = "pdf,jpg,jpeg,font,gif,png,wav"; 
 22     private String swftoolsPath; 
 23     /**
 24      * @param swftoolsPath
 25      *            用于进行把文件转化为swf的工具地址
 26      */ 
 27     public ConvertToSwf(String swftoolsPath) { 
 28         this.swftoolsPath=swftoolsPath; 
 29     } 
 30     /**
 31      * 把文件转化为swf格式支持"pdf,jpg,jpeg,font,gif,png,wav"
 32      * 
 33      * @param sourceFilePath
 34      *            要进行转化为swf文件的地址
 35      * @param swfFilePath
 36      *            转化后的swf的文件地址
 37      * @return
 38      */ 
 39     public boolean convertFileToSwf(String sourceFilePath, String swfFilePath) { 
 40         System.out.println("开始转化文件到swf格式");
 41         if (swftoolsPath == null || swftoolsPath == "") { 
 42            System.out.println("未指定要进行swf转化工具的地址!!!");
 43             return false; 
 44         } 
 45         String filetype = sourceFilePath.substring(sourceFilePath 
 46                 .lastIndexOf(".") + 1); 
 47         // 判读上传文件类型是否符合转换为pdf 
 48        System.out.println("判断文件类型通过");
 49         if (CONVERTFILETYPE.indexOf(filetype.toLowerCase()) == -1) { 
 50             System.out.println("当前文件不符合要转化为SWF的文件类型!!!");
 51             return false; 
 52         } 
 53         File sourceFile = new File(sourceFilePath); 
 54  
 55         if (!sourceFile.exists()) { 
 56             System.out.println("要进行swf的文件不存在!!!");
 57             return false; 
 58         } 
 59         System.out.println("准备转换的文件路径存在");
 60         if (!swftoolsPath.endsWith(File.separator)) { 
 61             swftoolsPath += File.separator; 
 62         } 
 63         StringBuilder commandBuidler = new StringBuilder(swftoolsPath); 
 64         File swfFile = new File(swfFilePath); 
 65         if (!swfFile.getParentFile().exists()) { 
 66             swfFile.getParentFile().mkdirs(); 
 67         } 
 68         if (filetype.toLowerCase().equals("jpg")) { 
 69             filetype = "jpeg"; 
 70         } 
 71         List<String>  command = new   ArrayList<String>();   
 72             command.add(this.swftoolsPath+"\\"+filetype.toLowerCase()+"2swf.exe");//从配置文件里读取     
 73             command.add("-z");     
 74             command.add("-s");     
 75             command.add("flashversion=9");     
 76             command.add("-s");     
 77             command.add("poly2bitmap");//加入poly2bitmap的目的是为了防止出现大文件或图形过多的文件转换时的出错,没有生成swf文件的异常     
 78             command.add(sourceFilePath);     
 79             command.add("-o");     
 80             command.add(swfFilePath);     
 81         try { 
 82             ProcessBuilder processBuilder = new ProcessBuilder();     
 83             processBuilder.command(command);     
 84             Process process = processBuilder.start();     
 85             System.out.println("开始生成swf文件..");
 86             dealWith(process); 
 87             try {     
 88                 process.waitFor();//等待子进程的结束,子进程就是系统调用文件转换这个新进程     
 89             } catch (InterruptedException e) {     
 90                 e.printStackTrace();     
 91             }     
 92             File swf = new File(swfFilePath); 
 93             if (!swf.exists()) { 
 94                 return false; 
 95             } 
 96             System.out.println("转化SWF文件成功!!!");
 97         } catch (IOException e) { 
 98             // TODO Auto-generated catch block 
 99             System.out.println("转化为SWF文件失败!!!");
100             e.printStackTrace(); 
101             return false; 
102         } 
103  
104         return true; 
105     } 
106     public static void main(String[] args) { 
107         ConvertToSwf a=new ConvertToSwf("C:/Program Files (x86)/SWFTools"); 
108         long begin_time=new Date().getTime();
109         a.convertFileToSwf("e:/test_1352107155307.pdf", "e:/test_1352107155307.swf"); 
110         long end_time=new Date().getTime();
111         System.out.println("result:"+(end_time-begin_time));
112     } 
113     private void dealWith(final Process pro){     
114         // 下面是处理堵塞的情况     
115         try {     
116             new Thread(){     
117                 public void run(){     
118                     BufferedReader br1 = new BufferedReader(new InputStreamReader(pro.getInputStream()));     
119                     String text;     
120                     try {     
121                         while ( (text = br1.readLine()) != null) {     
122                             System.out.println(text);     
123                         }     
124                     } catch (IOException e) {     
125                         e.printStackTrace();     
126                     }     
127                 }     
128             }.start();     
129         } catch (Exception e) {     
130             e.printStackTrace();     
131         }     
132         try {     
133             new Thread(){     
134                 public void run(){     
135                     BufferedReader br2 = new BufferedReader(new InputStreamReader(pro.getErrorStream()));//这定不要忘记处理出理时产生的信息,不然会堵塞不前的     
136                     String text;     
137                     try {     
138                         while( (text = br2.readLine()) != null){     
139                             System.err.println(text);     
140                         }     
141                     } catch (IOException e) {     
142                         e.printStackTrace();     
143                     }     
144                 }     
145             }.start();     
146         } catch (Exception e) {     
147             e.printStackTrace();     
148         }     
149     }     
150 } 

效果是一样的,不过后台的运行情况不同:

1 开始转化文件到swf格式
2 判断文件类型通过
3 准备转换的文件路径存在
4 开始生成swf文件..
5 NOTICE  File contains links
6 NOTICE  Writing SWF file e:/test_1352107155307.swf
7 转化SWF文件成功!!!
8 result:4131

这个程序处理的时间要长一点.....

源码下载地址:http://files.cnblogs.com/hongten/pdf2swf.rar

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java 源码分析

JavaWeb基础

1. XML xml一般就用来存放少量的数据,或者是作为配置文件。 xml的声明<?xml version=”1.0” encoding=”utf-8”?> ...

36550
来自专栏李航的专栏

Shell 主要逻辑源码级分析:SHELL 运行流程 (1)

分享一下在学校的时候分析shell源码的一些收获,帮助大家了解shell的一个工作流程,从软件设计的角度,看看shell这样一个历史悠久的软件的一些设计优点和缺...

2.2K00
来自专栏Golang语言社区

GO语言标准库概览

在Go语言五周系列教程的最后一部分中,我们将带领大家一起来浏览一下Go语言丰富的标准库。 Go标准库包含了大量包,提供了丰富广泛的功能特性。这里提供了概览仅仅是...

76360
来自专栏老马说编程

(72) 显式条件 / 计算机程序的思维逻辑

上节我们介绍了显式锁,本节介绍关联的显式条件,介绍其用法和原理。显式条件也可以被称做条件变量、条件队列、或条件,后文我们可能会交替使用。 用法 基本概念和方法...

20460
来自专栏点滴积累

geotrellis使用(三十)使用geotrellis读取PostGIS空间数据

前言 最近事情很多,各种你想不到的事情——such as singing and dancing——再加上最近又研究docker上瘾,所以geotrellis看...

44570
来自专栏杂烩

大话HelloWord是如何出现在面前的-浅谈虚拟机运行流程

    初学Java,大都会用记事本写个Hello Word,然后用CMD编译出class文件,最后执行一下。当控制台输出Hello Word的时候,一个简单的...

17020
来自专栏Python、Flask、Django

PHP htmlspecialchars_decode()函数

13940
来自专栏Java编程技术

结合JVM源码谈Java类加载器

之前文章 Java 类加载器揭秘 从Java层面讲解了Java类加载器的原理,这里我们结合JVM源码在稍微深入讲解下。

13210
来自专栏吴伟祥

手写tomcat监控工具---宕机重启 原

35430
来自专栏大内老A

ASP.NET MVC基于标注特性的Model验证:ValidationAttribute

通过前面的介绍我们知道ModelValidatorProviders的静态只读Providers维护着一个全局的ModelValidatorProvider列表...

239100

扫码关注云+社区

领取腾讯云代金券