您的位置:首页 > 编程语言 > Java开发

FlexPaper+SWFTools ,java实现在线文档浏览

2016-04-29 16:47 666 查看
1、安装openoffice,OpenOffice_3.4.0_Win_x86_zh-CN.zip,使用新建OpenOfficeService.properties文件,放到src目录下

Java代码


OO_HOME = C:\\Program Files (x86)\\OpenOffice.org 3

oo_host = 127.0.0.1

oo_port = 8100

2、下载 jodconverter-2.2.2,将lib目录所有jar 复制到项目 lib目录

3、 下载swftools-0.9.2.exe 安装后,复制安装目录中到 pdf2swf.exe 到项目附件目录中。

4、下载Flexpaper,引用其中的js

5、在环境变量中的Path配置如下:(注最后的“;”不要)

C:\Program Files (x86)\OpenOffice.org 3\program;D:\IdeaProjects\zsbk\zsbk\out\artifacts\zsbk_war_exploded\JS\StreetMap\flexpaper

Java代码


<%@ page import="com.xxx.util.FlashUtil" %>

<%--

Created by IntelliJ IDEA.

Date: 13-7-11

Time: 上午8:34

To change this template use File | Settings | File Templates.

--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%

String applicationPath = application.getRealPath("");

// String filePath="http://x.x.x.x/JieJing/";

String fileName=request.getParameter("fileName");

String contextPath = request.getContextPath();

String flashFile = null;

String filePath = null;

if(fileName.indexOf("gisPhotos")!=-1){

fileName = fileName.substring(fileName.lastIndexOf("gisPhotos/"),fileName.length());

filePath =applicationPath + "\\JS\\StreetMap";

flashFile = new FlashUtil().beginConvert(filePath,fileName);//绝对路径 相对路径

flashFile = "\\JS\\StreetMap\\" +flashFile;

flashFile = contextPath+flashFile.replace("\\","/");

}else{

filePath =applicationPath + "\\JS\\StreetMap\\flexpaper";

// fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");

flashFile = new FlashUtil().beginConvert(filePath,fileName);//绝对路径 相对路径

}

%>

<html>

<head>

<title>在线文档浏览</title>

<style type="text/css" media="screen">

html, body { height:100%; }

body { margin:0; padding:0; overflow:auto; }

</style>

<script type="text/javascript" src="js/flexpaper_flash.js"></script>

</head>

<body>

<div style="position:absolute;left:0px;top:0px;width:100%;height:100%;">

<a id="viewerPlaceHolder" style="width:100%;height:100%;display:block"></a>

<script type="text/javascript">

var fp = new FlexPaperViewer(

'FlexPaperViewer',

'viewerPlaceHolder', { config : {

SwfFile : escape('<%=flashFile%>'),

Scale : 0.6,

ZoomTransition : 'easeOut',

ZoomTime : 0.5,

ZoomInterval : 0.2,

FitPageOnLoad : true,

FitWidthOnLoad : false,

PrintEnabled : true,

FullScreenAsMaxWindow : false,

ProgressiveLoading : false,

MinZoomSize : 0.2,

MaxZoomSize : 5,

SearchMatchAll : false,

InitViewMode : 'Portrait',

ViewModeToolsVisible : true,

ZoomToolsVisible : true,

NavToolsVisible : true,

CursorToolsVisible : true,

SearchToolsVisible : true,

localeChain: 'zh_CN'

}});

</script>

</div>

</body>

</html>

Java代码


package com.xxx.util;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.net.ConnectException;

import com.artofsolving.jodconverter.DocumentConverter;

import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;

import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;

import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

/**

* Created with IntelliJ IDEA.

* Date: 13-7-11

* Time: 上午10:46

* To change this template use File | Settings | File Templates.

*/

public class FlashUtil {

public static void main(String[] args){

String outPath = new FlashUtil().beginConvert("","附件.pdf");

System.out.println("生成swf文件:" + outPath);

// boolean outPath = new FlashUtil().isExistFlash("123.pdf");

// System.out.println("是否存在swf文件:" + outPath);

}

private static final String DOC = ".doc";

private static final String DOCX = ".docx";

private static final String XLS = ".xls";

private static final String XLSX = ".xlsx";

private static final String PDF = ".pdf";

private static final String SWF = ".swf";

private static final String TOOL = "pdf2swf.exe";

/**

* 入口方法-通过此方法转换文件至swf格式

* @param filePath 上传文件所在文件夹的绝对路径

* @param fileName 文件名称

* @return 生成swf文件名

*/

public String beginConvert(String filePath,String fileName) {

String outFile = "";

String fileNameOnly = "";

String fileExt = "";

if (null != fileName && fileName.indexOf(".") > 0) {

int index = fileName.indexOf(".");

fileNameOnly = fileName.substring(0, index);

fileExt = fileName.substring(index).toLowerCase();

}

String inputFile = filePath + File.separator + fileName;

String outputFile = "";

//如果是flash文件,直接显示

if(fileExt.equals(SWF)){

outFile = fileName;

}else {

//主要是针对中文汉字转拼音

fileNameOnly = new CnToSpell().getPinYin(fileNameOnly);

//如果存在对应的flash文件

boolean isExistFlash = isExistFlash(filePath,fileNameOnly);

if(isExistFlash){

outFile = fileNameOnly + SWF;

}else {

//如果是office文档,先转为pdf文件

if (fileExt.equals(DOC) || fileExt.equals(DOCX) || fileExt.equals(XLS)

|| fileExt.equals(XLSX)) {

outputFile = filePath + File.separator + fileNameOnly + PDF;

File pdfFile = new File(outputFile);

if(!pdfFile.exists()){//判断pdf文件是否已经生成

office2PDF(inputFile, outputFile);

}

inputFile = outputFile;

fileExt = PDF;

}

if (fileExt.equals(PDF)) {

outputFile = filePath + File.separator + fileNameOnly + SWF;

outputFile = outputFile.replace("\\","/");

File swfFile = new File(outputFile);

if(!swfFile.exists()){//判断swf文件是否已经生成

File parentFolder = swfFile.getParentFile();

if(parentFolder!=null&&!parentFolder.exists()){

parentFolder.mkdirs();

}

String toolFile = null;

if(filePath.indexOf("flexpaper")==-1){

toolFile = filePath + File.separator +"flexpaper"+ File.separator + TOOL;

}else{

toolFile = filePath + File.separator + TOOL;

}

convertPdf2Swf(inputFile, outputFile, toolFile);

}

outFile = fileNameOnly + SWF;

}

}

}

return outFile;

}

/**

* 将pdf文件转换成swf文件

* @param sourceFile pdf文件绝对路径

* @param outFile swf文件绝对路径

* @param toolFile 转换工具绝对路径

*/

private void convertPdf2Swf(String sourceFile, String outFile,

String toolFile) {

String command = toolFile + " \"" + sourceFile + "\" -o \"" + outFile

+ "\" -s flashversion=9 ";

try {

Process process = Runtime.getRuntime().exec(command);

System.out.println(loadStream(process.getInputStream()));

System.err.println(loadStream(process.getErrorStream()));

System.out.println(loadStream(process.getInputStream()));

System.out.println("###--Msg: swf 转换成功");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 检测文件夹下是否已存在对应的flash文件

* @return

*/

private boolean isExistFlash(String filePath,String fileNameOnly){

String fileName = fileNameOnly.substring(fileNameOnly.lastIndexOf("/")+1);

String newFilePath = fileNameOnly.substring(0 ,fileNameOnly.lastIndexOf("/")+1);

File file = new File(filePath + File.separator+newFilePath);

if(!file.exists()){//判断是否已经生成新文件夹,然后再去判断文件夹是否存在对应的flash文件

return false;

}

File[] files = file.listFiles();

for(int j=0;j<files.length;j++){

if(files[j].isFile()){

String filesName = files[j].getName();

if(filesName.indexOf(".")!=-1){

if(SWF.equals(filesName.substring(filesName.lastIndexOf(".")).toLowerCase())){

if(fileName.equals(filesName.substring(0,filesName.lastIndexOf(".")))){

return true;

}

}

}

}

}

return false;

}

/**

* office文档转pdf文件

* @param sourceFile office文档绝对路径

* @param destFile pdf文件绝对路径

* @return

*/

private int office2PDF(String sourceFile, String destFile) {

String OpenOffice_HOME = CommUtil.OpenOffice_HOME;

String host_Str = CommUtil.host_Str;

String port_Str = CommUtil.port_Str;

try {

File inputFile = new File(sourceFile);

if (!inputFile.exists()) {

return -1; // 找不到源文件

}

// 如果目标路径不存在, 则新建该路径

File outputFile = new File(destFile);

if (!outputFile.getParentFile().exists()) {

outputFile.getParentFile().mkdirs();

}

// 启动OpenOffice的服务

String command = OpenOffice_HOME

+ "\\program\\soffice.exe -headless -accept=\"socket,host="

+ host_Str + ",port=" + port_Str + ";urp;\"";

System.out.println("###\n" + command);

Process pro = Runtime.getRuntime().exec(command);

// 连接openoffice服务

OpenOfficeConnection connection = new SocketOpenOfficeConnection(

host_Str, Integer.parseInt(port_Str));

connection.connect();

// 转换

DocumentConverter converter = new OpenOfficeDocumentConverter(

connection);

converter.convert(inputFile, outputFile);

// 关闭连接和服务

connection.disconnect();

pro.destroy();

return 0;

} catch (FileNotFoundException e) {

System.out.println("文件未找到!");

e.printStackTrace();

return -1;

} catch (ConnectException e) {

System.out.println("OpenOffice服务监听异常!");

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return 1;

}

static String loadStream(InputStream in) throws IOException{

int ptr = 0;

in = new BufferedInputStream(in);

StringBuffer buffer = new StringBuffer();

while ((ptr=in.read())!= -1){

buffer.append((char)ptr);

}

return buffer.toString();

}

}

Java代码


package xxx.platform.util;

import net.sourceforge.pinyin4j.PinyinHelper;

import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;

import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;

import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;

import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;

import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**

* Created with IntelliJ IDEA.

* User: xxx

* Date: 13-7-12

* Time: 下午3:52

* To change this template use File | Settings | File Templates.

*/

public class CnToSpell {

public String getPinYin(String src) {

char[] t1 = null;

t1 = src.toCharArray();

String[] t2 = new String[t1.length];

// 设置汉字拼音输出的格式

HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();

t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);

t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

t3.setVCharType(HanyuPinyinVCharType.WITH_V);

String t4 = "";

int t0 = t1.length;

try {

for (int i = 0; i < t0; i++) {

// 判断是否为汉字字符

if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {

t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中

t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后

} else {

// 如果不是汉字字符,直接取出字符并连接到字符串t4后

t4 += Character.toString(t1[i]);

}

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

if(t4.indexOf("【")!=-1){

t4 = t4.replace("【","[");

}

if(t4.indexOf("】")!=-1){

t4 = t4.replace("】","]");

}

if(t4.indexOf("(")!=-1){

t4 = t4.replace("(","(");

}

if(t4.indexOf(")")!=-1){

t4 = t4.replace(")",")");

}

return t4;

}

public String getPinYinHeadChar(String str) {

String convert = "";

for (int j = 0; j < str.length(); j++) {

char word = str.charAt(j);

// 提取汉字的首字母

String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);

if (pinyinArray != null) {

convert += pinyinArray[0].charAt(0);

} else {

convert += word;

}

}

return convert;

}

public String getCnASCII(String cnStr) {

StringBuffer strBuf = new StringBuffer();

// 将字符串转换成字节序列

byte[] bGBK = cnStr.getBytes();

for (int i = 0; i < bGBK.length; i++) {

strBuf.append(Integer.toHexString(bGBK[i] & 0xff));

}

return strBuf.toString();

}

public static void main(String[] args) {

CnToSpell cnToSpell = new CnToSpell();

String cnStr = "中华人民共和国(A-C)(12)_12345";

System.out.println(cnToSpell.getPinYin(cnStr));

System.out.println(cnToSpell.getPinYinHeadChar(cnStr));

System.out.println(cnToSpell.getCnASCII(cnStr));

}

}

Java代码


package xxx.platform.util;

import java.util.ResourceBundle;

/**

* Created with IntelliJ IDEA.

* User: xxx

* Date: 13-7-12

* Time: 上午8:42

* To change this template use File | Settings | File Templates.

*/

public class CommUtil {

public static final String OpenOffice_HOME;

public static final String host_Str;

public static final String port_Str;

static {

ResourceBundle rb = ResourceBundle.getBundle("OpenOfficeService");

OpenOffice_HOME = rb.getString("OO_HOME");

host_Str = rb.getString("oo_host");

port_Str = rb.getString("oo_port");

}

public static int strToInt(String str){

int i =0;

if(str!=null&&!"".equals(str)){

i = Integer.parseInt(str);

}

return i;

}

public static double strToDouble(String str){

double d =0.0;

if(str!=null&&!"".equals(str)){

d = Double.parseDouble(str);

}

return d;

}

}

参考:

/article/8412518.html

/article/5306601.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: