`
正在路上丶
  • 浏览: 3898 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

PDF2SWF

    博客分类:
  • Java
 
阅读更多
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(); } } }

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics