项目需要一个模块:将一些 资料 按照指定的格式写入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之后在文件夹找)到自己的工程中,引入它们。

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);

}

未解决问题:

中文不能正确的设置字体格式,段落格式。

openoffice java api_OpenOffice java api UNO 教程相关推荐

  1. java hibernate的使用_《Hibernate快速开始 – 4 – 使用JAVA持久层 API (JPA)教程》

    章节目标 使用JPA EntityManagerFactory 使用注解提供映射信息 使用 JPA 接口 本教程可在 entitymanger/ 路径下下载 4.1. persistence.xml ...

  2. Windows下Libvirt Java API使用教程(二)- 接口使用说明

    介绍完libvirt Java API的部署工作: <Windows下Libvirt Java API使用教程(一)- 开发环境部署> 接下来我们就介绍一下接口的使用和代码样例. libv ...

  3. Windows下Libvirt Java API使用教程(三)- TLS认证访问和动态链接文件依赖

    之前已经介绍过了libvirt api的上手使用方式: <Windows下Libvirt Java API使用教程(二)- 接口使用说明> <Windows下Libvirt Java ...

  4. json.parser性能_Jackson JSON Java Parser API示例教程

    json.parser性能 Jackson JSON Java Parser is very popular and used in Spring framework too. Java JSON P ...

  5. Java EE并发API教程

    这是一个示例章节,摘自Francesco Marchioni编辑的WildFly上的实用Java EE 7开发 . 本章讨论了新的Java EE并发API(JSR 236) ,它概述了使用一组托管资源 ...

  6. java api教程_Java api 入门教程 之 JAVA的文件操作

    I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程的一个基本 ...

  7. java jxl 公式_JXL: Java Excel API简易教程

    使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来 ...

  8. Java 8 Time Api 使用指南【珍藏限量版】

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 1.概述 Java 8为Date和Time引入了新的API,以解决旧java.util.Da ...

  9. Java基于百度API的图片文字识别(支持中文,英文和中英文混合)

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

最新文章

  1. 调整html css表格位置,调整表格中的列宽(CSS / HTML)
  2. UIView 的布局与绘制显示相关方法调用时机
  3. Leetcode 62. Unique Paths
  4. PhotoShop常用的功能汇总
  5. CODEVS.5037.线段树练习4加强版(分块 区间k的倍数)
  6. Spoken English(001)
  7. 吉哥系列故事——恨7不成妻(数位 DP)
  8. android 删除文件 代码_代码审计之某系统后台存在任意删除文件
  9. Android之使用Intent跳转到一个网页
  10. javascript中的undefined 和 not defined
  11. 麦克风阵列树莓派python_使用Python代码进行树莓派上的麦阵列声源定位
  12. SQL语句导致性能问题
  13. 【转】为VS2005安装STLport
  14. visual foxpro c语言教程,VFP简单初级入门教程超好.pdf
  15. HBase权威指南(百度云免费下载)
  16. matlab 三维点 边界曲面,【matlab三维散点绘制曲面】
  17. x64位call代码注入器1.0版
  18. dedecms 安装后 管理后台ie假死 无响应的解决方法
  19. Delphi的日期时间格式
  20. JAVA学习日志 关于调用方法、生成对象的例子。还是用数字卦程序修改

热门文章

  1. ICH10R服务器主板是什么芯片,英特尔5520/5550/X58-ICH10是什么主板,支持哪些CPU?
  2. 修复罗技BCC950摄像头并建立fffmpeg,fserver作为rtps流服务
  3. 【STM32H7的DSP教程】第11章 DSP基础函数-绝对值,求和,乘法和点乘
  4. 车牌识别存储云服务器,车牌识别系统大显神威,实现智慧交通的“最强利器”。...
  5. EOS多主机节点搭建
  6. SI2302-ASEMI低压MOS管SI2302
  7. 计算机的创新故事,ThinkPad的故事 历代小黑创新大史记
  8. 基于SSM+MySQL+LayUI的养老院信息管理系统
  9. 基于Spring+SpringMVC+hibernate实现的体检中心管理系统
  10. 一步一步教你构建一个MPU6050(I2C类)驱动(一)