Swftools+FlexPaper实现PDF上传在线预览功能

阅读更多

      最近项目需要在线预览功能,经过各方面的资料研究,可行的方案是swftools+FlexPaper,现把实现思路及碰到问题总结一下:

      1、swftools-2013-04-09-1007.exe提供pdf转swf文件,供FlexPaper调用。

      2、FlexPaper由开源变为商业化,新版本只提供前十页显示,购买后才能实现全功能,功能更强大,支持FLASH、HTML4、HTML5等模式,为免费实现在线预览功能,本项目在此使用此前的开源版本,但是自带水印,介意的化可考虑破解版,网上自寻。

      3、本项目仅支持pdf上传预览,如扩展word上传,可考虑word转pdf在转swf。

      4、FlexPaperViewer.swf和FlexPaperViewer.htm必须放在WebRoot根目录下才可以,这也是多次尝试之后得出的结论,网上的资料大致相同,但是根据步骤始终无法实现正常预览的原因。

      5、服务器必须安装swftools,以保证上传文件时调用pdf转swf文件。

     

目录结构如下:

Swftools+FlexPaper实现PDF上传在线预览功能_第1张图片
 

显示效果如下:

Swftools+FlexPaper实现PDF上传在线预览功能_第2张图片

 

================华丽的分割线==========以下为代码==============

1、文件上传时调用:

// =================================PDF2SWF===============================================
			String uploadDir = request.getSession().getServletContext().getRealPath("/");
			String pdfPath = ""; 
			if (list.size() > 0) {
				for (int i = 0; i < list.size(); i++) {
					DicWsjsFj wj = new DicWsjsFj();
					wj.setMid(id);
					wj.setFjmc(list.get(i).get("name").toString());
					wj.setPath(list.get(i).get("newname").toString());
					wsjsDao.saveOrUpdateFj(wj);
					// =================================PDF2SWF===============================================
					pdfPath = uploadDir.substring(0, uploadDir.length()-1) + list.get(i).get("newname").toString().replace("/", "\\");
					PDF2SwfHelper.execPdfToSwf(pdfPath);
//					request.getSession().setAttribute("filePath", pdfPath);
				}
			}

 

2、PDF2SwfHelper.java

package com.zljy.oa.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class PDF2SwfHelper {


	public static void execPdfToSwf(String pdfPath) {
		String SWFPath = PropUtil.getProperties("SWFPath");
		Process process = null;
		String cmd = "\"" + SWFPath + "\\pdf2swf.exe\" \"" + pdfPath + "\" -s flashversion=9 \"" + pdfPath + ".swf\"";
		System.out.println("cmd--->" + cmd);
		
		try {
			process = Runtime.getRuntime().exec(cmd);// 执行命令
			
			System.out.print(loadStream(process.getInputStream()));
			System.err.print(loadStream(process.getErrorStream()));
			System.out.print(loadStream(process.getInputStream()));
			int result = process.waitFor();
			if (result == 0) {
				try {
					// TODO:
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("cmd over!");
	}
	
	public static void main(String[] args){
		try {
			//System.out.println(Runtime.getRuntime().exec("cmd /c start c://swf.bat"));
			System.out.println("11");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		execPdfToSwf("D:\\ActivitiTomcat\\webapps\\oa\\upload\\winPlan\\201503201530571522746426268764261.pdf");
	}
	
	private static String loadStream(InputStream in) throws IOException {
		int ptr = 0;
		// 把InputStream字节流 替换为BufferedReader字符流
		BufferedReader reader = new BufferedReader(new InputStreamReader(in));
		StringBuilder buffer = new StringBuilder();
		while ((ptr = reader.read()) != -1) {
			buffer.append((char) ptr);
		}
		return buffer.toString();
	}
}

 

3、前台页面

在线阅读(仅支持PDF格式)

 

4、 FlexPaperViewer.htm

 
 
	
     
        在线阅读         
         
         
		
		 
		 
		 
		
		 
        
     
     
    	

To view this page ensure that Adobe Flash Player version 10.0.0 or greater is installed.

 

附:

1、FlexPaperDemo仅含前台例子

2、swftools-2013-04-09-1007安装文件

PS:文件10M限制,安装文件自行百度 

  • Swftools+FlexPaper实现PDF上传在线预览功能_第3张图片
  • 大小: 166.2 KB
  • Swftools+FlexPaper实现PDF上传在线预览功能_第4张图片
  • 大小: 268.5 KB
  • FlexPaperDemo.rar (897.5 KB)
  • 下载次数: 1
  • 查看图片附件

你可能感兴趣的:(swftools,FlexPaper,在线预览)