加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

openoffcie+swftools+flexpaper实现类似百度文库的阅读效果

发布时间:2020-12-15 06:10:31 所属栏目:百科 来源:网络整理
导读:这是我的处女作,有什么写的不好的还请大家见谅,好了下面开始正题openoffcie+swftools+flexpaper实现类似百度文库的阅读效果: 所用到的包的下载: OpenOffice 下载地址http://www.openoffice.org/ JodConverter 下载地址http://sourceforge.net/projects/j
这是我的处女作,有什么写的不好的还请大家见谅,好了下面开始正题openoffcie+swftools+flexpaper实现类似百度文库的阅读效果:

所用到的包的下载:

OpenOffice 下载地址http://www.openoffice.org/

JodConverter 下载地址http://sourceforge.net/projects/jodconverter/files/JODConverter/,也可以直接从附件里面下载

Swftools下载http://www.swftools.org/download.html

?源代码下载:http://download.csdn.net/detail/zhangwenlong136/4228945

下面是代码的实现部分:

第一步,将office文档转化为pdf文档,代码如下

1,.先安装好openoffce软件,引入JodConverter里面的包

2执行如下代码

import java.io.File;

importjava.io.IOException;

importjava.net.ConnectException;

importjava.util.Date;

importcom.artofsolving.jodconverter.DocumentConverter;

importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;

importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;

importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

/**

?*

?* @author lvzf

?*

?*/

public classJOD4DocToPDF extends Thread{??

? //private static final Log log =LogFactory.getLog(JOD4DocToPDF.class);

? private File inputFile;// 需要转换的文件??

??? private File outputFile;// 输出的文件??

??? private Integer id;

??? public JOD4DocToPDF(String sourceFile,String destFile,Integer id) {

???????????File inputFile = newFile(sourceFile);

???????????if (!inputFile.exists()){

???????????????????return;//找不到源文件,则返回-1?

???????????}?

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

???????????File outputFile = newFile(destFile);?

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

???????????????????outputFile.getParentFile().mkdirs();?

???????????}

??????? this.inputFile = inputFile;??

??????? this.outputFile = outputFile;?

??????? this.id=id;

??? }

??? public void docToPdf(){

??????? Date start = new Date();

??????? String OpenOffice_HOME = "C:Program FilesOpenOffice.org3";//OpenOffice.org 3的存放路径

??????? if(OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != ''){?

??????????????????????? OpenOffice_HOME +="";

??????? }

??????? //要执行的cmd代码

??????? String command = OpenOffice_HOME +"programsoffice.exe -headless -accept="socket," +

???????????????????????"host=127.0.0.1,port=8100;urp;""+ "-nofirststartwizard";

??????? //连接自己的服务器与端口

??????? OpenOfficeConnection connection = newSocketOpenOfficeConnection("127.0.0.1",8100);

??????? try {

???????????????//创建进程调用cmd执行命令

Processpro = Runtime.getRuntime().exec(command);

??????? connection.connect();

??????? DocumentConverter converter = newOpenOfficeDocumentConverter(connection);

??????? converter.convert(inputFile,outputFile);????

??????? //关闭进程

??????? pro.destroy();

??????? } catch (ConnectException e) {

???????????????e.printStackTrace();?

??????? } catch (IOException e) {

???????????????e.printStackTrace();?

??????? }finally{

???????????????if(connection != null) {

?????????? connection.disconnect();??

?????????? connection = null;??

??? }

??????? }

??????? long l = (start.getTime() - newDate().getTime());??

??????? long day = l / (24 * 60 * 60 *1000);??

??????? long hour = (l / (60 * 60 * 1000) - day* 24);??

??????? long min = ((l / (60 * 1000)) - day *24 * 60 - hour * 60);??

??????? long s = (l / 1000 - day * 24 * 60 * 60- hour * 60 * 60 - min * 60);??

??????? System.out.println("生成" +outputFile.getName() + "耗费:" + min + "分" + s??

??????????????? + "秒");??

??????? //结束转换

?????? //DocService.getInstance().endConverPdfOrder(id);

??? }????

??? /**?

???? * 由于服务是线程不安全的,所以……需要启动线程?

???? */?

??? public void run() {

??????? this.docToPdf();??

??? }??

??? public File getInputFile() {??

??????? return inputFile;??

??? }????

??? public void setInputFile(File inputFile){??

??????? this.inputFile = inputFile;??

??? }??

??? public File getOutputFile() {??

??????? return outputFile;??

??? }??

??? public void setOutputFile(File outputFile){??

??????? this.outputFile = outputFile;??

??? }??

??? /**?

???? * @param args?

???? */?

??? public static void main(String[] args){??

???????????boolean tend=false;

??????? JOD4DocToPDF tools = newJOD4DocToPDF("F:99.doc",

?????????????? "F:88.pdf",3);

??????? tools.start();

??? }

}

?

第二部,将pdf文档转化为swf

1.先安装swftools

2.执行如下代码

package com.test;

importjava.io.BufferedReader;??

importjava.io.File;??

importjava.io.IOException;??

importjava.io.InputStreamReader;??

/**??

?*??

?* @version 1.0?

?* @author lvzf

?*/?

public class PdfToSwf{??

//finalStringsource=SystemConfig.getInstance().getProperty("PDFTOSWF_PATH");

publicvoid convertPDF2SWF(String fromPath,String toPath) throws IOException {

Stringcommand = "D:/百度文库软件/swftools/pdf2swf.exe" + " -t " +fromPath + " -o " + toPath + " -s flashversion=9";

System.out.println(command);

Runtime.getRuntime().exec("cmd/c" + command);

}

??? private int convertPDF2SWF(StringsourcePath,String destPath,??

??????????? String fileName) throws IOException{??

??????? // 目标路径不存在则建立目标路径??

??????? File dest = new File(destPath);??

??????? if (!dest.exists()) {??

??????????? dest.mkdirs();??

??????? }??

??????? // 源文件不存在则返回??

??????? File source = newFile(sourcePath);??

??????? if (!source.exists()) {??

??????????? return 0;??

??????? }??

??????? // 调用pdf2swf命令进行转换??

??????? // C:ProgramFilesSWFTools>pdf2swf.exe -z -B rfxview.swf -s flashversion=9??

??????? // d:/人员管理系??

??????? // 统PersonalManagementSystem简介.pdf -od:/test.swf??

??????? // 要把D:toolsSWFTools放在path里面……不然使用不了播放器??

??????? // 先生成flash??

??????? String[] envp = new String[1];??

??????? envp[0] = "PATH=C:Program FilesSWFTools";?

??????? //-z -s flashversion=9?? -T 9

??????? String command = "pdf2swf"" + sourcePath??

??????????????? + "" -o"" + destPath + fileName + """;??

??????? //Process pro =Runtime.getRuntime().exec(command,envp);??

??????? //Process pro =Runtime.getRuntime().exec("cmd /c?d:score.txt");?

??????? Process pro?=Runtime.getRuntime().exec("/"+source+" d:displaytag.pdf -o d:displaytag.swf");

??????? // System.out.println(command);??

??????? BufferedReader bufferedReader = newBufferedReader(??

??????????????? newInputStreamReader(pro.getInputStream()));??

??????? while (bufferedReader.readLine() !=null) {??

??????????? String text =bufferedReader.readLine();??

??????????? System.out.println(text);??

??????? }??

??????? try {??

??????????? pro.waitFor();???

??????? } catch (InterruptedException e) {??

??????????? // TODO Auto-generated catchblock??

??????????? e.printStackTrace();??

??????? }??

??????? // 然后在套播放器??

??????? /*?

???????? * swfcombine -z -X 720 -Y 540"D:toolsSWFToolsswfsrfxview.swf"?

???????? * viewport="d:/人?

???????? *员管理系统PersonalManagementSystem简介.swf" -o"d:/人员管理系统PersonalManagemen?

???????? * tSystem简介.swf"?

???????? */?

//??????? command = "swfcombine -z -X 720 -Y540 "C:/Program Files/SWFTools/swfs/rfxview.swf"viewport=""?

//??????????????? + destPath + fileName +"" -o "" + destPath + fileName +""";??

//??????? pro =Runtime.getRuntime().exec(command,envp);??

//??????? System.out.println(command);??

//??????? bufferedReader = new BufferedReader(newInputStreamReader(pro??

//??????????????? .getInputStream()));??

//??????? while (bufferedReader.readLine() !=null) {??

//??????????? String text =bufferedReader.readLine();??

//??????????? System.out.println(text);??

//??????? }??

//??????? try {??

//??????????? pro.waitFor();??

//??????? } catch (InterruptedException e) {??

//??????????? // TODO Auto-generated catchblock??

//??????????? e.printStackTrace();??

//??????? }??

??????? return pro.exitValue();??

??? }??

??? public static void main(String[] args){

??????? try {??

//???????????????int r=newtest().convertPDF2SWF(sourcePath,??

//??????????????????? destPath,fileName);

//??????????? System.out.println(r);

???????????????newPdfToSwf().convertPDF2SWF("F:在线文档库.pdf","F:000.swf");

??????? } catch (IOException e) {??

??????????? // TODO Auto-generated catchblock??

??????????? e.printStackTrace();??

??????? }?

??? }

}?

第三步,在页面中导入flexpaper

具体代码如下

<%@ pagelanguage="java" pageEncoding="UTF-8"%>

<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"xmlns:xn="http://www.renren.com/2009/xnml"xmlns:og="http://ogp.me/ns#">

<head>

<metahttp-equiv="Content-Type" content="text/html;charset=UTF-8" />

<title>在线文档库</title>

<scripttype="text/javascript"src="js/swfobject/swfobject.js"></script>

<scripttype="text/javascript">

if(window.addEventListener)

window.addEventListener('DOMMouseScroll',handleWheel,false);

window.onmousewheel= document.onmousewheel = handleWheel;

if(window.attachEvent)

window.attachEvent("onmousewheel",handleWheel);

?

functionhandleWheel(event){

try{

if(!window.document.FlexPaperViewer.hasFocus()){returntrue;}

window.document.FlexPaperViewer.setViewerFocus(true);

window.document.FlexPaperViewer????????????

?

?

??????? <scripttype="text/javascript">

??????????? <!-- For version detection,setto min. required Flash Player version,or 0 (or 0.0.0),for no versiondetection. -->

??????????? var swfVersionStr ="9.0.124";

??????????? <!-- To use express install,setto playerProductInstall.swf,otherwise the empty string. -->

?

?????????? var status="1";

?????????? //alert(status);

??????????? if(status=="1"){

??????????? var xiSwfUrlStr ="playerProductInstall.swf";

??????????? var flashvars = {

????????????????? SwfFile :escape("0000.swf"),

? Scale : 0.6,

? ZoomTransition : "eaSEOut",

? ZoomTime : 0.5,

?????????????????????????????????? ZoomInterval : 0.1,

?????????????????????????????????? FitPageOnLoad : false,

?????????????????????????????????? FitWidthOnLoad : true,

?????????????????????????????????? PrintEnabled : true,

?????????????????????????????????? FullScreenAsMaxWindow : true,

? ProgressiveLoading : true,

?????????????????????????????????? localeChain: "en_US"

? };

?var params = {

?

??? }

??????????? params.quality = "high";

??????????? params.bgcolor ="#ffffff";

??????????? params.allowscriptaccess ="sameDomain";

??????????? params.allowfullscreen ="true";

??????????? var attributes = {};

??????????? attributes.id ="FlexPaperViewer";

??????????? attributes.name ="FlexPaperViewer";

??????????? swfobject.embedSWF(

???????????????"FlexPaperViewer.swf","flashContent",

??????????????? "600","500",

??????????????? swfVersionStr,xiSwfUrlStr,

??????????????? flashvars,params,attributes);

swfobject.createCSS("#flashContent","display:block;text-align:center;");

??????????? }

??????? </script>

</head>

<body>

?

? <imgsrc="docin_93278439_90x80.jpg"/>

?

?<div class="grid clear">

?

????? <div class="doc-player"id="flashContent">

???????????????

<spanid="message">播放器加载中,请稍候...</span>

?</div>

?</div>

</body>

</html>

PS: 在进程中soffice.exe不能关闭 选用如下的方式进行关闭

1.cmd下运行 taskkill /?查看关闭.exe的方法

? /S???system?????????? 指定要连接的远程系统。

? /U???[domain]user???指定应该在哪个用户上下文执行这个命令。

? /P???[password]??????为提供的用户上下文指定密码。如果忽略,提示输入

? /FI??filter?????????? 应用筛选器以选择一组任务。

???????????????????????? 允许使用"*"。例如,映像名称 eq acme*

? /PID?processid??????? 指定要终止的进程的 PID。

???????????????????????? 使用 TaskList 取得 PID。

? /IM??imagename??????? 指定要终止的进程的映像名称。通配符'*'可用来

???????????????????????? 指定所有任务或映像名称。

? /T???????????????????? 终止指定的进程和由它启用的子进程。

? /F???????????????????? 指定强制终止进程。

? /????????????????????? 显示帮助消息。

?

2.选择运行 taskkill /F /IMsoffice.exe /T 出现下述结果

成功: 已终止 PID 13500 (属于PID 12412 子进程)的进程。

成功: 已终止 PID 12412 (属于PID 4836 子进程)的进程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读