java将office文档pdf文档转换成swf文件在线预览.docx
- 文档编号:9872602
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:34
- 大小:25.82KB
java将office文档pdf文档转换成swf文件在线预览.docx
《java将office文档pdf文档转换成swf文件在线预览.docx》由会员分享,可在线阅读,更多相关《java将office文档pdf文档转换成swf文件在线预览.docx(34页珍藏版)》请在冰豆网上搜索。
java将office文档pdf文档转换成swf文件在线预览
java将office文档pdf文档转换成swf文件在线预览
第一步,安装openoffice.org
openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行。
主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库)
笔者下载的是openoffice.org3.3.0。
下载完直接安装即可。
但是,我们还需要启动openofficeserver。
有两种做法:
1.以命令行方式启动openofficeserver,缺点是每次系统重启,都需要手动去把openofficeserver启动。
2.将openofficeserver作为操作系统的服务启动,既然成为了系统服务,就可以设定开机自动启动了。
我们先来看第一种方式,
1.以命令行方式启动openofficeserver
在cmd命令下,cdopeonofiice的安装路径/program如:
cdc:
\programfiles\openoffice.org3\program\soffice-headless-accept="socket,host=127.0.0.1,port=8100;urp;"-nofirststartwizard
2.以系统服务的方式启动
这里我们还需要WindowsResourceKittools,将openofficeserver设为系统服务。
WindowsResourceKittools是微软专为管理人员、开发人员和高级用户开发的,包括管理活动目录、组策略、TCP/IP网络、注册表、系统安全、监测等涉及WindowsServer2003操作系统的其它很多方面的非常规安装的工具组件。
ResourceKitToolsforXP的发布使得XP用户也能使用ResourceKitTools对这些问题进行处理。
下载windowsresourcekittools,我们进行默认安装。
1.打开WindowsResourceKitTools
在CommandShell执行以下命令:
"C:
\ProgramFiles\WindowsResourceKits\Tools\instsrv"OpenOfficeUnoServer"C:
\ProgramFiles\WindowsResourceKits\Tools\srvany.exe"
打开管理工具->服务可以找到以OpenOfficeUnoServer命名的服务
2.打开注册表寻找以下路径
HKEY_LOCAL_MACHINE->SYSTEM->ControlSet001->Services->OpenOfficeUnoServer
新建项Parameters,在该项下添加两个字符串值:
key:
Application
value:
C:
\ProgramFiles\OpenOffice.org3\program\soffice.exe
key:
AppParameters
value:
-invisible-headless-accept=socket,host=127.0.0.1,port=8100;urp;-nofirststartwizard
3.在服务控制台,启动openoffice服务
4.在CMD中用以下命令查看8100是否已被监听:
netstat-anoptcp
这样OpenOffice3.0就以服务方式运行在Windows系统上了。
(使用cmd命令:
netstat-anptcp查看8100端口是否工作)
然後可以通过socket方式连接openOffice,以使用openoffice提供的某些服务,如文件转换服务,msoffice转pdf等等。
开源项目JODConverter就是结合openoffice来进行文档转换的java组件。
另外有一个命令行工具swftools,该工具可以将pdf转换为swf格式的文档,提供给ie客戶端流览。
另外,我们可以将该配置用bat文件来快速实现,运行前请先修改相应目录参数:
openofficeservice.bat文件
"C:
\ProgramFiles\WindowsResourceKits\Tools\instsrv"OpenOfficeUnoServer"C:
\ProgramFiles\WindowsResourceKits\Tools\srvany.exe"
regaddHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters/ve/d
regaddHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters/vApplication/tREG_SZ/d"C:
\ProgramFiles\OpenOffice.org3\program\soffice.exe"
regaddHKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\OpenOfficeUnoServer\Parameters/vAppParameters/tREG_SZ/d"-invisible-headless-accept=socket,host=127.0.0.1,port=8100;urp;-nofirststartwizard"
第二步,使用JODConverter将office文档转换为pdf
JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用
OpenOffice来进行转换工作,它能进行以下的转换工作:
1.MicrosoftOffice格式转换为OpenDucument,以及OpenDucument转换为MicrosoftOffice
2.OpenDucument转换为PDF,Word、Excel、PowerPoint转换为PDF,RTF转换为PDF等。
它是一个开源项目。
我的项目是在MyEclipse下开发的。
下载最新版的jodconverter-2.2.2,把lib文件夹的包导入到你的DocConverter项目的lib文件夹内。
(假设你的项目是DocConverter)
新建DOC2PDFUtil.java
packagecom.iori.webapp.util;
importjava.io.File;
importjava.io.IOException;
import.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;
publicclassDOC2PDFUtilextendsjava.lang.Thread{
privateFileinputFile;//需要转换的文件
privateFileoutputFile;//输出的文件
publicDOC2PDFUtil(FileinputFile,FileoutputFile){
this.inputFile=inputFile;
this.outputFile=outputFile;
}
publicvoiddocToPdf(){
Datestart=newDate();
OpenOfficeConnectionconnection=newSocketOpenOfficeConnection(8100);
try{
connection.connect();
DocumentConverterconverter=newOpenOfficeDocumentConverter(connection);
converter.convert(inputFile,outputFile);
}catch(ConnectExceptioncex){
cex.printStackTrace();
}finally{
//closetheconnection
if(connection!
=null){
connection.disconnect();
connection=null;
}
}
}
/**
*由于服务是线程不安全的,所以……需要启动线程
*/
publicvoidrun(){
this.docToPdf();
}
publicFilegetInputFile(){
returninputFile;
}
publicvoidsetInputFile(FileinputFile){
this.inputFile=inputFile;
}
publicFilegetOutputFile(){
returnoutputFile;
}
publicvoidsetOutputFile(FileoutputFile){
this.outputFile=outputFile;
}
/**
*测试main方法
*@paramargs
*/
publicstaticvoidmain(String[]args){
FileinputFile=newFile("c:
//temp//333.xls");
FileoutputFile=newFile("c:
//temp//333.pdf");
DOC2PDFUtildp=newDOC2PDFUtil(inputFile,outputFile);
dp.start();
}
}
在DOC2PDFUtil.java,右键属性->Runas->JavaApplication,输出main的测试结果。
在jsp中执行
新建MyDOC2PDFTest.jsp
<%@pageimport="java.io.*"%>
<%@pageimport="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@pageimport="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@pageimport="com.artofsolving.jodconverter.openoffice.converter.*"%>
<%@pageimport="com.artofsolving.jodconverter.*"%>
<%@pageimport="java.util.*"%>
<%@pageimport="com.iori.webapp.util.*"%>
<%
FileinputFile=newFile("c:
//temp//333.xls");
FileoutputFile=newFile("c:
//temp//333.pdf");
DOC2PDFUtildp=newDOC2PDFUtil(inputFile,outputFile);
dp.start();
%>
--下面这些html可以去掉-->
在项目DocConverter根目录,右键属性->Runas->MyEclipseServerApplication
发布到之前安装的Tomcat6.0的根目录,然后用url路径访问:
Http:
//localhost:
8080/DocConverter/MyDOC2PDFTest.jsp 进行测试。
JODConverter将office文档转换pdf,用到的代码如下:
FileinputFile=newFile("c:
//temp//333.xls");
FileoutputFile=newFile("c:
//temp//333.pdf");
//链接一个运行在8100端口的OpenOffice.org实例
OpenOfficeConnectionconnection=newSocketOpenOfficeConnection(8100);
connection.connect();
//创建一个converter对象并转换格式
DocumentConverterconverter=newOpenOfficeDocumentConverter(connection);
converter.convert(inputFile,outputFile);
//关闭连接
connection.disconnect();
第三步,使用swftools将pdf转换为swf
建议下载swftools-0.9.1,笔者起先下载的是最新版的swftools-1.0版。
貌似转换时出错,缺少什么组件。
继续笔者的DocConverter项目。
笔者使用的开发环境是MyEclipse9.0。
新建PDF2SWFUtil.java
packagecom.iori.webapp.util;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
publicclassPDF2SWFUtil{
/**
*利用SWFTools工具将pdf转换成swf,转换完后的swf文件与pdf同名
*@authoriori
*@paramfileDirPDF文件存放路径(包括文件名)
*@paramexePath转换器安装路径
*@throwsIOException
*/
publicstaticsynchronizedvoidpdf2swf(StringfileDir,StringexePath)throwsIOException{
//文件路径
StringfilePath=fileDir.substring(0,fileDir.lastIndexOf("/"));
//文件名,不带后缀
StringfileName=fileDir.substring((filePath.length()+1),fileDir.lastIndexOf("."));
Processpro=null;
if(isWindowsSystem()){
//如果是windows系统
//命令行命令
Stringcmd=exePath+"\""+fileDir+"\"-o\""+filePath+"/"+fileName+".swf\"";
//Runtime执行后返回创建的进程对象
pro=Runtime.getRuntime().exec(cmd);
}else{
//如果是linux系统,路径不能有空格,而且一定不能用双引号,否则无法创建进程
String[]cmd=newString[3];
cmd[0]=exePath;
cmd[1]=fileDir;
cmd[2]=filePath+"/"+fileName+".swf";
//Runtime执行后返回创建的进程对象
pro=Runtime.getRuntime().exec(cmd);
}
//非要读取一遍cmd的输出,要不不会flush生成文件(多线程)
newDoOutput(pro.getInputStream()).start();
newDoOutput(pro.getErrorStream()).start();
try{
//调用waitFor方法,是为了阻塞当前进程,直到cmd执行完
pro.waitFor();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
/**
*判断是否是windows操作系统
*@authoriori
*@return
*/
privatestaticbooleanisWindowsSystem(){
Stringp=System.getProperty("os.name");
returnp.toLowerCase().indexOf("windows")>=0?
true:
false;
}
/**
*多线程内部类
*读取转换时cmd进程的标准输出流和错误输出流,这样做是因为如果不读取流,进程将死锁
*@authoriori
*/
privatestaticclassDoOutputextendsThread{
publicInputStreamis;
//构造方法
publicDoOutput(InputStreamis){
this.is=is;
}
publicvoidrun(){
BufferedReaderbr=newBufferedReader(newInputStreamReader(this.is));
Stringstr=null;
try{
//这里并没有对流的内容进行处理,只是读了一遍
while((str=br.readLine())!
=null);
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(br!
=null){
try{
br.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
/**
*测试main方法
*@paramargs
*/
publicstaticvoidmain(String[]args){
//转换器安装路径
StringexePath="c:
/ProgramFiles/SWFTools/pdf2swf.exe";
try{
PDF2SWFUtil.pdf2swf("c:
/temp/333.pdf",exePath);
}catch(IOExceptione){
System.err.println("转换出错!
");
e.printStackTrace();
}
}
}
在PDF2SWFUtil.java,右键属性->Runas->JavaApplication,输出main的测试结果。
在jsp中执行
新建MyPDF2SWFTest.jsp
<%@pageimport="java.io.*"%>
<%@pageimport="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@pageimport="com.artofsolving.jodconverter.openoffice.connection.*"%>
<%@pageimport="com.artofsolving.jodconverter.openoffice.converter.*"%>
<%@pageimport="com.artofsolving.jodconverter.*"%>
<%@pageimport="java.util.*"%>
<%@pageimport="com.iori.webapp.util.*"%>
<%
//转换器安装路径
StringexePath="c:
/ProgramFiles/SWFTools/pdf2swf.exe";
try{
PDF2SWFUtil.pdf2swf("c:
/temp/333.pdf",exePath);
}catch(IOExceptione){
System.err.println("转换出错!
");
e.printStackTrace();
}
%>
--下面这些html可以去掉-->
在项目DocConverter根目录,右键属性->Runas->MyEclipseServerApplication
发布到之前安装的Tomcat6.0的根目录,然后用url路径访问:
Http:
//localhost:
8080/DocConverter/MyPDF2SWFTest.jsp 进行测试。
第四步,office文档转为pdf,同时进一步转为swf
网上资料有很多office文档转为pdf,pdf转为swf,但都是单步转换。
关
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java office 文档 pdf 转换 swf 文件 在线 预览