package com.tx.config.flexPager;
package com.tx.config.flexPager;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;
//这个类主要用来处理一个系统调用而新创建一个线程或进程执行期间所产生的输入流的处理
public class InputStreamWathThread extends Thread {
private static Logger logger=Logger.getLogger(ErrorInputStreamWathThread.class);
private Process process = null;
private boolean over = false;
public InputStreamWathThread(Process p) {
process = p;
over = false;
}
public void run() {
try {
if (process == null) {
logger.info("process为null,无法处理文件转换");
return;
}
//对输入流,可能是一个回车之类的输入
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
while (true) {
if (process == null || over) {
logger.info("处理完成");
break;
}
String temp;
while ((temp = br.readLine()) != null) {
// logger.info("输入流信息:" + temp);//如这些信息:NOTICE processing PDF page 10 (595x842:0:0) (move:0:0)等等的打印时提示信息
;
}
}
} catch (Exception e) {
e.printStackTrace();
logger.info("发生异常" + e.getMessage());
}
}
public void setOver(boolean over) {
this.over = over;
}
}
package com.tx.config.flexPager;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;
//这个类主要用来处理一个系统调用而新创建一个线程或进程执行期间所产生的出错流的处理
public class ErrorInputStreamWathThread extends Thread {
private static Logger logger=Logger.getLogger(ErrorInputStreamWathThread.class);
private Process process = null;
private boolean over = false;
public ErrorInputStreamWathThread(Process p) {
process = p;
over = false;
}
public void run() {
try {
if (process == null) {
logger.info("process为null,无法处理文件转换");
return;
}
//对出错流的处理
BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while (true) {
if (process == null || over) {
logger.info("处理完成");
break;
}
String temp;
while ((temp = br.readLine()) != null) {
// logger.info("出错流信息:" + temp);
;
}
}
} catch (Exception e) {
e.printStackTrace();
logger.info("发生异常" + e.getMessage());
}
}
public void setOver(boolean over) {
this.over = over;
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.tx.config.system.SystemConfig;
public class PDF2SWF2 {
private static Logger logger=Logger.getLogger(PDF2SWF2.class);
//注意destPath最后必须带文件分隔符
//这个用来转换的swfTool工具,一但待转换的文件有不可识别的字符在里面时,它就会堵塞在那里。这个情况要处理掉
public String PDF2SWF(String sourcePath,String destPath) throws Exception {
// 源文件不存在则返回
File source = new File(sourcePath);
if (!source.exists()) {
logger.info("pdf转换swf失败,源文件不存在!");
throw new Exception();
}
// 目标路径不存在则建立目标路径
File dest=new File(new File(destPath).getPath().substring(0, new File(destPath).getPath().lastIndexOf("\\")+1));
if (!dest.exists()) {
dest.mkdirs();
}
//因为下面进行系统调用,这样就会把系统执行的操作新开启一个线程(在此linux也叫进程),所以它和主扫描程序是独立运行,所以下次还会扫描这个转换中的文件,所以这里要将它设置为不可读,
source.setReadable(false);
String outputFile =destPath.replace(".swf", "_%.swf");//每页生成一个swf文件
// String outputFile =destPath;//只生成一个swf文件
logger.info("开始调用swftools转换pdf文件:" + outputFile);
List<String> command = new ArrayList<String>();
command.add(SystemConfig.getSWFTools_SERCER_URL());//从配置文件里读取
command.add("-z");
// command.add("-B");
// command.add("rfxview.swf");
// command.add("-s");
// command.add("poly2bitmap");//加入poly2bitmap的目的是为了防止出现大文件或图形过多的文件转换时的出错,没有生成swf文件的异常
command.add("-s");
command.add("drawonlyshapes");
command.add("-s");
command.add("flashversion=9");
//windows平台下
// command.add("languagedir=C:/xpdf/chinese-simplified/");
command.add(sourcePath);
command.add("-o");
command.add(outputFile);
ProcessBuilder processBuilder = new ProcessBuilder();
processBuilder.command(command);
Process process = processBuilder.start();
// dealWith(process);//改用下面的方式来处理:
InputStreamWathThread inputWathThread = new InputStreamWathThread(process);
inputWathThread.start();
ErrorInputStreamWathThread errorInputWathThread = new ErrorInputStreamWathThread(process);
errorInputWathThread.start();
try {
process.waitFor();//等待子进程的结束,子进程就是系统调用文件转换这个新进程
inputWathThread.setOver(true);//转换完,停止流的处理
errorInputWathThread.setOver(true);
} catch (InterruptedException e) {
e.printStackTrace();
System.err.println(e);
}
logger.info("转换完成");
return outputFile;
}
public static void main(String[] args) {
PDF2SWF2 pdf2swf = new PDF2SWF2();
String sourcePath = "D://Test2PDf.pdf";
String destPath = "d://dest_3.swf";
try {
System.out.println(pdf2swf.PDF2SWF(sourcePath, destPath));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
将PDF转换成SWF可以使用SWFTools工具中的pdf2swf(http://www.swftools.org/),1、首先下载安装,一直默认下一步即可。 2、java代码: import java.io.BufferedReader; import java.io.File; import java.io....
PDF2SWF Pages Sutie 是一款操作极为简便的转换工具,它可以将PDF文件转换成分页的SWF文件或独立的SWF文件。转换过程一键生成,无需任何人工对文档进行解析操作。每个PDF转换过程序只需几秒至几分钟即可完成。 PDF2...
PDF2SWF ,它可以将PDF文件转换成分页的SWF文件
安装后里面会有pdf2swf.exe jpeg2swf.exe png2swf.exe gif2swf.exe 等。我只用到了pdf2swf.exe。分享给大家
PDF2SWF Pages Sutie 是一款操作极为简便的转换工具,它可以将PDF文件转换成分页的SWF文件或独立的SWF文件。转换过程一键生成,无需任何人工对文档进行解析操作。每个PDF转换过程序只需几秒至几分钟即可完成。 PDF...
PDF2SWF Pages Suite 是由残象制作组(www.zinewow.com)开发的一整套功能极为强大的数字出版套装工具软件,它除了能将PDF转换FLASH的SWF格式之外,还能直接使用套装工具将SWF格式转换成多种桌面系统与移动系统的...
解决pdf2swf中文乱码问题文件全套
工具:pdf2swf及相应的中文语言包。 pdf文件转换成swf格式
pdf2swf pdf转化为flash的软件 支持Java等程序调用
最新windows绿色版 * 转swf文件软件 font2swf.exe gif2swf.exe jpeg2swf.exe pdf2swf.exe png2swf.exe wav2swf.exe
需要pdf转换成swf格式文件的,请下载,一般应用到flash paper里
本人刚做了个项目,实现功能Linux,window)openOffice+pdf2swf+flexpaper(类百度文库) :
swftools 是在开发FlexPaper项目时使用到的,可以有效的将pdf转换为swf文件在线浏览。
pdf2swf 国外的pdf转swf软件
个人整理的openOffice与pdf2swf与flashpaper弄的类似百度在线浏览文档主要类与工具,只需要下载 openOffice 3.4.1 安装,注意版本一定要与调用该工具的ddl版本一致,不然会出现 外部组件错误,我的压缩包里的调用sdk ...
最新linux 版 pdf 转 swf 软件
批量将PDF文件转换成SWF文件的工具。