开发者社区> 风月无边> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

构建文件格式转换服务器

简介: 为什么要做文件格式转换服务器      不知道各位是否遇到这样的情况, 当您在浏览IBM SUN等公司的技术网站的时候, 你会发现在每个页面的上方有小图标, 你可以把当前的页面内容以word, pdf或者是其他的格式进行下载, 可能你在想, 恩, 大公司的做法确实很正规, 他们提供了许多的格式版本提供不同的用户下载, 我想你可能是对的, 但是我们换一种想法假设我们构建一个服务器, 让所有的格
+关注继续查看
为什么要做文件格式转换服务器
     不知道各位是否遇到这样的情况, 当您在浏览IBM SUN等公司的技术网站的时候, 你会发现在每个页面的上方有小图标, 你可以把当前的页面内容以word, pdf或者是其他的格式进行下载, 可能你在想, 恩, 大公司的做法确实很正规, 他们提供了许多的格式版本提供不同的用户下载, 我想你可能是对的, 但是我们换一种想法假设我们构建一个服务器, 让所有的格式可以自由地转换成我们所希望地格式:
 

  

假设我们的Java代码是这样写的

Public static FileTransfer{
     Public static convert(File inputFile ,File outputFile){
      ………
}
}
 
那么我们可以在Jsp Servlet里面调用这个静态方法, 实现文档的格式的转换。
 
2.   怎么实现
   好了, 设计思想有了, 怎么实现呢, 好在Java有大量的开源社区,而且我们有google , 不出一分钟, 我们可以从互联网找到答案:
 
这个是一个利用Openoffice来实现的解决方案, 他已经帮忙做好了整个解决方案。
JODConverter是这个项目的子项,Java语言来实现:
n            Microsoft Office 转换成OpenDocument和viceversa
n            Word 格式转换成 OpenDocument Text (odt);
n            OpenDocument Text (odt) 转换成 Word
n            Excel转换成OpenDocument Spreadsheet (ods);
n            OpenDocument Spreadsheet (ods) 转换成Excel
n            PowerPoint转换成OpenDocument Presentation (odp);
n            OpenDocument Presentation (odp) 转换成PowerPoint
n            任何格式转换成 PDF
n            OpenDocument (Text, Spreadsheet, Presentation) 转换成PDF
n            Word to PDF; Excel转换成PDF; PowerPoint转换成PDF
n            RTF转换成PDF; WordPerfect转换成PDF; ...
n            还有:
n            OpenDocument Presentation (ods) 转换成Flash;
n            PowerPoint转换成Flash
n            RTF转换成OpenDocument; WordPerfect转换成OpenDocument
n            任何格式转化成 HTML (with limitations)
n            Support for OpenOffice.org 1.0 and old StarOffice formats
 
 
3.   部署服务
这个文档假设你已经安装了OpenOffice在操作系统上, 在windows上安装OpenOffice是非常简单和愉快的事情, 在linux/unix下面, OpenOffice网站提供的下载包是Tar.gz格式, 用
Gunzip –c **.tar.gz
Tar –xf *.tar
Pkgadd -d /your path/OOo/packages
命令就可以安装
 
为了方便使用我按照不同的操作系统来编写
3.1.           Windows 2k xp 2003 server
1.         下载Windows Server 2003 Resource Kit Tools
2.         利用Srvany.exe创建一个服务, 如OpenOfficeUnoServer
在注册表项 :
 HKEY_LOCAL_MACHINE/SYSTEM/ControlSet001/Services/OpenOfficeUnoServer
创建子项: Parameters 
在parameters下面 创建字符串值 Application 和 AppParameters,
分别设置值为
C:/Program Files/OpenOffice.org 2.2/program/soffice.exe
-accept=socket,host=0.0.0.0,port=8100;urp; -headless
其中soffice.exe的路径根据您安装的路径来修改
在Control Panel / Administrative Tools / Services 打开该服务, 修改属性 Log On account 为  Local Service
3.         修改您安装OpenOffice路径下的share/registry/data/org/openoffice/Setup.xcu文件
找到:

<prop oor:name="ooSetupInstCompleted">
 <value>false</value>
</prop>
<prop oor:name="ooSetupShowIntro">
 <value>true</value>
</prop>
 
修改成

<prop oor:name="ooSetupInstCompleted" oor:type="xs:boolean">
 <value>true</value>
</prop>
<prop oor:name="LicenseAcceptDate" oor:type="xs:string">
 <value>2006-07-25T17:34:04</value>
</prop>
<prop oor:name="FirstStartWizardCompleted" oor:type="xs:boolean">
 <value>true</value>
</prop>
4.         从开始, 程序里面启动一次OpenOffice 将注册选项设置成不注册 
5.         启动OpenOfficeUnoServer服务
6.         查看是否服务已经存在telnet 127.0.0.1 8100
3.2.           Linux / Unix
Linux和Unix创建服务相对简单, 但是由于soffice需要使用到Xwindow界面, 所以在做服务的时候, 由于在命令行状态, 没有图形界面的支持, 所以需要使用Xvfb来设置一个虚拟的界面。
在soffice.bin目录创建一个ooService文件
# touch ooService
# vi ./ooService
将以下内容写入这个文件

#!/sbin/sh
case "$1" in
start)
     DISPLAY=:5.0
     export DISPLAY
     /usr/openwin/bin/Xvfb :5 screen 1024x768x24 &
        /usr/opt/openoffice.org2.2/program/soffice.bin -headless -display:5 -accept="socket,host=0.0.0.0,port=8100;urp;" &
       ;;
stop)
       pkill soffice
       ;;
*)
       echo "Usage: $0 { start | stop }"
       exit 1
       ;;
esac
exit 0
以上代码在solaris 10下面测试通过, 其他的版本, 根据Xvfb的版本不一 进行调整参数即可:/usr/openwin/bin/Xvfb :5 screen 1024x768x24  &
# chmod a+x ./ooService
 
在/etc/rc3.d 或者init.d里面创建一个文件 S90ooService
# touch S90ooService
# vi S90ooService
将里面的内容改成

#!/sbin/sh
/usr/opt/openoffice.org2.2/program/ooservice start
#chmod a+x ./S90ooService
 
4.   使用实例
下载:jodconverter
实例代码如下
<%@ page import="java.io.File"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection"%>
<%@ page import="com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter"%>
<%@ page import="com.artofsolving.jodconverter.DocumentConverter"%>
<%--
 Created by IntelliJ IDEA.
 User: Henry
 Date: 
2007-7-27
 Time: 
15:30:43
 To change 
this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
 File inputFile 
= new File("c://temp//111.ppt");
    File outputFile 
= new File("c://temp//111.html");
 
    
// 链接 一个运行在8100端口的OpenOffice.org 实例
    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    connection.connect();
 
    
// 创建一个converter对象并转换格式
    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    converter.convert(inputFile, outputFile);
 
    
// 关闭连接
    connection.disconnect();
%>
 
 
<html>
 
<head><title>Simple jsp page</title></head>
 
<body>Place your content here</body>
</html>
5.   扩展使用
在上述代码里, 使用onverter.convert(inputStream , DocumentFormat, outputStream , DocumentFormat);方法, 可以直接将servlet的outwriter对象作为输出流, 既可以实现在serverlet里面转换文件了。
 
关于作者
OldJavaMan,长期致力于Java相关领域的技术工作, 主要参与J2EE相关程序的设计, 目前在南京的一家软件企业就职,他希望和广大的Java爱好者结交朋友。大家可以通过mail联系他 。
  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
全方位解读服务网格(Service Mesh)的背景和概念
为了解决微服务框架的侵入性问题,我们引入服务网格。
1438 0
PolarDB 并行查询的前世今生
本文会深入介绍PolarDB MySQL在并行查询这一企业级查询加速特性上做的技术探索、形态演进和相关组件的实现原理,所涉及功能随PolarDB MySQL 8.0.2版本上线。
627 0
企业内部应用接入钉钉获取部门及人员信息
企业内部应用接入钉钉,同时通过API获取当前企业下部门及人员信息
1391 0
MySQL模糊查询再也用不着 like+% 了!
我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。 通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。
25787 0
阿里云云原生一体化数仓正式发布  助力企业数据驱动业务创新
云原生一体化数仓是集阿里云大数据产品MaxCompute、DataWorks、Hologres三种产品能力于一体的一站式大数据处理平台。核心是3个一体化和全链路数据治理能力,包括离线实时一体、湖仓一体、分析服务一体、全链路数据治理。
1735 0
全面公测|Grafana服务:一张图表胜过千行指标&日志
Grafana 帮助运维人员轻松处理各类运维过程中遇到的各类数据可视化与分析难题。目前阿里云 Grafana 服务全面免费公测,帮助企业轻松构建运维数据可视化平台,轻松实现数据驱动运维!
1322 0
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
1085 0
设备接入--海康摄像头SDK
springboot-对接海康摄像头,兼容window和Linux环境
1616 0
Flink SQL 在快手的扩展和实践
快手实时计算团队技术专家张静、张芒在 FFA 2021 的分享
1522 0
无影云桌面,企业与个人的应用神器
阿里云无影云桌面( Elastic Desktop Service)的原产品名为弹性云桌面,融合了无影产品技术后更名升级。它可以为您提供易用、安全、高效的云上桌面服务,帮助您快速构建、高效管理桌面办公环境,提供安全、灵活的办公体系。
276577 0
+关注
风月无边
java,架构方面专家
367
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载