项目需要一个模块:将一些 资料 按照指定的格式写入doc文档,然后提供下载。
下载模块已经初步完成,如何实现将资料写入doc文档?
OpenOffice java api:
简单的说就是利用java程序可以操作OpenOffice的所有功能,比如创建doc文档,插入文字,设置文字格式等等。
1. OpenOffice 给程序员提供了一个叫UNO (UniversalNetwork Objects)的组件技术.我理解的UNO:
OpenOffice
类似于web程序中的服务器,程序员写的代码类似于客户端,利用UNO提供的接口和服务去完成对OpenOffice文档的操作。所以写程序首先要搭建
UNO环境:
1. 下载 OpenOffice: http://download.openoffice.org/index.html. (ps
:一定要安装 Software
Development Kit (SDK)
)
2.复制UNO提供的jar包: unoil.jar, java_uno.jar, juh.jar, jurt.jar, ridl.jar,
unoloader.jar. (ps: 安装了SDK之后在文件夹找)到自己的工程中,引入它们。
3. 下载文档:DevelopersGuide.pdf. http://api.openoffice.org/docs/DevelopersGuide/DevelopersGuide.pdf
4. 安装了SDK后,重新启动一下机器,然后就可以按照 DevelopersGuide 来学习 UNO 编程了。
5. 需要ava 环境。
补充: 安装了SDK后, java, c++帮助文档,样例程序,其他关于sdk的信息
都放在本地openOffice安装路径一个叫sdk目录下面,enjoy it !
总结一下已经实现的功能和碰到的问题汇总:
1. 首先要得到远程office组件的上下文.通过:
com.sun.star.uno.XComponentContext xContext =
com.sun.star.comp.helper.Bootstrap.bootstrap();
得到,如果OpenOffice安装路径不是在工程的路径下面(我自己猜的), 就会报:
com.sun.star.comp.helper.BootstrapException: no office executable
found!
解决办法: 黑其源代码,
看了源代码就会发现其实OpenOffice是在寻找本地的soffice的shell文件,所以弄个变量来保存soffice在系统中的路径,重新写一
个Bootstrap就可以了。详细请参照:论坛
。
2. 得到 XMultiComponentFactory (ComponentFactory 工厂)
com.sun.star.lang.XMultiComponentFactory xMCF =
xContext.getServiceManager();
3. 得到各种组件可以通过下面代码:
// docType 是 与 soffice 同目录下面的OpenOffice的其他shell文件,swrite等等
protected XComponent newDocComponent(String docType)
throws java.lang.Exception {
String loadUrl = "private:factory/" + docType;
mxRemoteServiceManager = this.getRemoteServiceManager();
Object desktop =
mxRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", mxRemoteContext);
XComponentLoader xComponentLoader = (XComponentLoader)
UnoRuntime
.queryInterface(XComponentLoader.class, desktop);
PropertyValue[] loadProps = new PropertyValue[0];
return xComponentLoader.loadComponentFromURL(loadUrl, "_blank",
0,
loadProps);
}
4.得到 XTextDocument
XComponent xEmptyWriterComponent = newDocComponent("swriter");
XTextDocument mxDoc = (XTextDocument)
UnoRuntime.queryInterface(XTextDocument.class,
xEmptyWriterComponent);
5. 得到一个文档的引用
XText mxDocText = mxDoc.getText();
6. 得到文档的属性列表
XPropertySet mxDocProps = (XPropertySet)
UnoRuntime.queryInterface(
XPropertySet.class, mxDoc);
7. 建立光标,用来插入新的内容。
XTextCursor mxDocCursor = mxDocText.createTextCursor();
XSentenceCursor xSentenceCursor = (XSentenceCursor)
UnoRuntime
.queryInterface(XSentenceCursor.class, mxDocCursor);
XWordCursor xWordCursor = (XWordCursor)
UnoRuntime.queryInterface(
XWordCursor.class, mxDocCursor);
8.得到光标属性列表
XPropertySet xCursorProps = (XPropertySet) UnoRuntime
.queryInterface(XPropertySet.class, mxDocCursor);
9.设置插入文字格式
xCursorProps.setPropertyValue("CharFontName", "宋体");
xCursorProps.setPropertyValue("CharWeight", new
Float(FontWeight.BOLD));
xCursorProps.setPropertyValue("CharHeight", new Float(10.5));
// 居中显示
xCursorProps.setPropertyValue("ParaAdjust",
com.sun.star.style.ParagraphAdjust.CENTER);
10.在该光标处插入信息
mxDocText.insertString(xSentenceCursor, “Hello World", true);
11. 保存的关键代码
protected void storeDocComponent(XComponent xDoc, String
storeUrl)
throws java.lang.Exception {
XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
XStorable.class, xDoc);
PropertyValue[] storeProps = new PropertyValue[1];
storeProps[0] = new PropertyValue();
storeProps[0].Name = "FilterName";
storeProps[0].Value = "MS Word 97";
openOfficeJavaLogger.debug("... store \"" + xDoc.toString() +
"\" to \"" + storeUrl
+ "\".");
xStorable.storeAsURL(storeUrl, storeProps);
}
未解决问题:
中文不能正确的设置字体格式,段落格式。
2010-9-15 解决办法:http://user.services.openoffice.org/en/forum/viewtopic.php?f=20&t=34092
分享到:
相关推荐
Apache OpenOffice API 不仅可以与 Apache OpenOffice Basic 一起使用,而且还可以与其他编程语言(如 Java 和 C++)一起使用。这是通过一种称为通用网络对象 (Universal Network Objects, UNO) 的技术实现的,该...
OpenOffice API ,提供全面的开发API文档和示例,值得一看。
OpenOffice_math完全教程,清楚明晰,相信会对你有帮助
OpenOffice.org提供了多语言的开发API,对于JAVA支持也比较好。资源文件中包括了OpenOffice.org 3.0版本开发的所需要的JAR包文件,同时还有本文总结的关于Eclipse环境下OpenOffice.org开发环境搭建过程,以及说明...
基于Java,利用OpenOffice转换office为PDF, 内附有jar包,java实现,OpenOffice下载地址,及OpenOffice在Linux下的安装实现。
java使用OpenOffice实现的Excel转pfd,Excel中存在图片也可以完美的完成转换
OpenOffice.org2.0电子书教程,用得着的就下吧
实现C++调研OpenOffice接口,对OpenOffice实例化,创建类似MS的word/excel文件
java调用openOffice转换office为pdf的jar包
JAVA,word to pdf用的jar
word、excel、txt文件,浏览器预览功能实现工具类,OpenOfficeUtil,openoffice插件!
openoffice StarSuite 7开发指南 中文版
相关资源 http://wiki.services.openoffice.org/wiki/API/Samples/Java/Office/DocumentHandling ... ...
JodConverter一个Java的OpenDocument 文件转换器,可以进行许多文件格式的转换,它利用OpenOffice所提供的转换介面来进行转换工作,它能进行以下的转换工作: 一、Microsoft Office格式转换为OpenDocument,以及...
java实现附件预览(openoffice+PDF.js),将office文档,通过openoffice工具转换为PDF文件,使用PDF.js进行前端展示 是对openoffice+swftools+flexpaper的升级版,减少一次swf文件转换,及flexpaper只能预览十页内容...
我从官网下载openoffice4.1.0版的,资源包含有openoffice相关jar包以及java调用文件和部署文档
OpenOffice SDK
OPenOffice 实现用Java实现文件转换, 已封装,可直接使用
java OpenOffice wordExcel转换PDF.zip 带jar包
Entry.java这个类的原理是先通过OfficeToPDF.java把文档转成pdf,然后再通过Pdf2Jpg.java这个类把PDF转成JPG或者PNG,想转成什么格式图片在Pdf2Jpg.java这个类当中设置一下,代码经过测试,完全没有问题,如果碰到...