PDF2SWF

1、swfTools安装

2、代码:

//InputStreamWathThread.java

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;
	}
}</pre>
&nbsp;

//ErrorInputStreamWathThread.java
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;
	}
}</pre>
&nbsp;

//PDF2SWF .java

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import com.config.system.SystemConfig;

public class PDF2SWF {
	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();
		}
	}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值