为了实现word能够在web上尽量以原始的排版样式展现出来,选择基于activex控件的方式太过于依赖某种浏览器,并且存在可能需要花费金钱购买相应的控件产品;于是借助flexpaper这种flash展现方式就成为了首选的解决方案。该方案的实现过程主要是先将word文档转换成pdf文档,接着再通过SWFTOOLS工具将pdf文档转换成swf文件,然后flexpaper加载这些swf文件进行展示。

访问flexpaper的官网地址:http://flexpaper.devaldi.com/download/  下载web版的flexpaper,同时把需要用到的3个软件也下载下来。我当前下载的最新版本是FlexPaper_2.3.6版。

先安装好下载好的3个软件包:

接着解压FlexPaper_2.3.6

可以看到解压后的文件目录里提供了asp.net版本、java版本和php版本,在这里我选择部署的是java版本,打开java目录,可以看到一个war包,将其部署到tomcat里,然后启动tomcat访问所部署的flexpaper的根路径。初次访问会跳转到一个配置的页面,通过该页面进行设置管理员账号密码、配置上面所提到的3个软件的安装路径,然后还有配置需要转换的pdf所在的目录及转换后的swf文件存放的目录,这两个目录都需要事先创建好。还有另外一个重要的配置是swf的生成模式,flexpaper提供了单文件模式和多文件模式,如果选择单文件模式,那么一个pdf文档转换成swf时,就只生成一个swf文件;如果选择多文件模式,那么一个pdf文档里如果有好几页的内容,那么就会生成多个相对应的swf文件。

之后只要根据你所配置的文件模式访问刚部署的flexpaper的对应url,并且在url上的doc参数里传递你所配置的pdf目录下的pdf文件名就可以直接在线预览到pdf文件了。

单文件模式时访问的url:http://127.0.0.1:8080/FlexPaper/common/simple_document.jsp?doc=660521783206862.pdf

多文件模式时访问的url:http://127.0.0.1:8080/FlexPaper/common/split_document.jsp?doc=660521783206862.pdf

接下来就是需要在程序中把word文档转换成pdf文档,并将其保存到上面所提到的pdf目录下,以便实现word文档的在线浏览。

在这里我使用的是java语言,使用了artofsolving的jodconverter包来进行doc到pdf的转换,转换需要借助OpenOffice,所以还需要下载安装OpenOffice。

我当前下载安装的OpenOffice版本为4.1.2版。

jodconverter用得多的主要有两个版本,一个是2.2.1版,另外一个是3.0-beta4版本。

2.2.1版

2.2.1不支持docx格式,并且需要事先通过命令行开启OpenOffice的服务,

开启OpenOffice服务的命令行代码如下:

cd d:\Program Files (x86)\OpenOffice 4\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

java关键代码:

// connect to an OpenOffice.org instance running on port 8100
OpenOfficeConnection connection = new SocketOpenOfficeConnection(
"127.0.0.1", 8100);
connection.connect(); // convert
DocumentConverter converter = new OpenOfficeDocumentConverter(
connection);
converter.convert(inputFile, outputFile); // close the connection
connection.disconnect();

如果使用maven来进行管理的,那么2.2.1版的依赖配置如下:

<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>

3.0-beta4版

3.0-beta4支持docx版本,并且不需要事先通过命令行开启OpenOffice服务,而是可以通过java代码来进行开启和关闭。

java关键代码:

private  static OfficeManager officeManager;

public static void convert(File originFile,File destFile){
long startTime = System.currentTimeMillis();
startService();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(originFile,destFile);
log.info("转换完成.耗时" +( (System.currentTimeMillis() - startTime) / 1000)+ "秒");
stopService();
} private static void startService(){
DefaultOfficeManagerConfiguration configuration=new DefaultOfficeManagerConfiguration();
log.info("准备启动office转换服务...");
configuration.setOfficeHome("D:/Program Files (x86)/OpenOffice 4");
configuration.setPortNumber(8100);
configuration.setTaskExecutionTimeout(1000*60);//任务超时时间1分钟
try {
officeManager=configuration.buildOfficeManager();
officeManager.start();//启动服务
log.info("office转换服务启动成功!");
} catch (OfficeException e) {
log.error("office转换服务启动失败!");
} catch (IllegalStateException e) {
log.error("office转换服务启动失败!");
}
} private static void stopService(){
if(officeManager!=null){
officeManager.stop();
log.info("office转换服务关闭成功!");
}else{
log.info("office转换服务未启动!");
}
}

如果使用maven来进行管理的,3.0-beta4版通过maven中央库下载不到,需要自己通过artofsolving的网站把jar下载下来,然后注册到自己本地的maven仓库里。

jodconverter-core-3.0-beta-4.bat:

mvn install:install-file -DgroupId=com.artofsolving -DartifactId=jodconverter -Dversion=3.0-beta- -Dpackaging=jar -Dfile=%CD%\jodconverter-core-3.0-beta-.jar

pom配置:

<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>3.0-beta-4</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>

由于3.0-beta4的jar包是自己写命令行注册到本地maven库里的,所以没带有其依赖包的关系,因此需要手动将其所依赖的其他jar包给配置到pom文件里。

借助flexpaper实现word在线预览和打印的更多相关文章

  1. .net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法

    FlexPaper插件可以实现在浏览器中在线预览pdf,word,excel等. 在网上看到很多关于这个插件实现预览的技术,但是很难做到word和excel在线预览. pdf很好实现. 首先下载相关的 ...

  2. 实现word在线预览 有php的写法 也有插件似

    <?php //header("Content-type:text/html;charset=utf-8"); //word转html 展示 $lj=$_GET['file' ...

  3. word,excel,ppt转Pdf,Pdf转Swf,通过flexpaper+swftools实现在线预览

    其实这是我好几年前的项目,现在再用这种方式我也不建议了,毕竟未来flash慢慢会淘汰,此方式也是因为目测大部分人都装了flash,才这么做的,但是页面展示效果也不好.其实还是考虑收费的控件,毕竟收费的 ...

  4. word在线预览编辑器

    https://blog.csdn.net/liuli283/article/details/73776685 https://blog.csdn.net/mxljiayou/article/deta ...

  5. 在线预览文档(支持word、excel、ppt、pdf)+在线预览文档html版(转)

    1.首先上网搜索一下有什么解决方案 (1).将文档转换为html,只支持支持office文档 (2).将文档转换为flash,实现类似百度文库的效果,除支持office文档外还支持pdf (1) a. ...

  6. java实现在线预览--poi实现word、excel、ppt转html

    java实现在线预览 - -之poi实现word.excel.ppt转html 简介 java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服 ...

  7. java实现在线预览 - -之poi实现word、excel、ppt转html

    简介 java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,例如永中office.office web 365(http://w ...

  8. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

  9. [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!

    引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点: ...

随机推荐

  1. ThinkPHP 3.2.2跨控制器调用方法

     所谓跨控制器调用,指的是在一个控制器中调用另一个控制器的某个方法.在ThinkPHP中有三种方式实现跨控制器调用: 直接实例化: A()函数实例化; R()函数实例化. (1)直接实例化  直接实例 ...

  2. 11G ORACLE RAC DBCA 无法识别asm磁盘组

    ASM磁盘无法识别几种现象: 1) gi家目录或者其子目录权限错误 2)asm磁盘的权限错误 3)asm实例未启动或者asm磁盘组没有mount上 4)asm磁盘组资源没有在线 5)oracle用户的 ...

  3. ios中的XMPP简介

      1.XMPP的定义 •XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)   •XMPP可用于服务类实时通讯.表示和需求 ...

  4. Swift Explore - 关于 Swift 中的 isEqual 的一点探索

    在我们进行 App 开发的时候,经常会用到的一个操作就是判断两个对象是否相等.比如两个字符串是否相等.而所谓的 相等 有着两层含义.一个是值相等,还有一个是引用相等.如果熟悉 Objective-C ...

  5. 关于Swift中实现Lazy initialize的方式

    在oc中我们通过 -(CardMatchingGame *)game { if(!_game) _game=[[CardMatchingGame alloc] initWithCardCount:[s ...

  6. win8.1上安装vc6

    win8.1上安装vc6 1.以管理员方式运行SETUP.EXE,然后一路下一步 2.这里需要一点点耐心,等10分钟左右就能过去,电脑会比较卡,有点像假死,还是没有死掉,等等就好了 3.这里选择vc6 ...

  7. tcp传输黏包

    tcp传输黏包 tcpip协议使用"流式"(套接字)进行数据的传输,就是说它保证数据的可达以及数据抵达的顺序,但并不保证数据是否在你接收的时候就到达,特别是为了提高效率,充分利用带 ...

  8. java 顺序表

    想看看java版的数据结构,了解一下树的一些操作,写了个顺序表熟悉一下 package com.sqlist; /** * @author xiangfei * 定义一个顺序表 * */ public ...

  9. PSP0级 周活动总结表+时间记录日志+缺陷记录日志 表格模板

    一.项目计划总结: 周活动总结表 姓名:               日期: 日期\任务 听课 编写程序 阅读课本 准备考试     日总计 周日               周一           ...

  10. 如何维护SSH安全

    遇到两次,一次是公司服务器搭建好后,有人尝试ssh暴力破解,auth.log不停出现错误提示 还有买的米国vps,很荣幸地遭到来自波兰的ssh破解尝试 不得不重视ssh的安全 方法: 修改sshd_c ...