OpenOffice API开发 (四)--文档接口开发实例
2014-01-05 21:48
423 查看
OOOsdk api 文档部分接口开发;
这里建立一个java类文件,名为;OpenOfficeContext 这个类主要是获取OpenOffice提供的文档接口,其实用win32术语来讲就是获得操作openoffice 文档 的句柄。有了这些句柄,就可以操作文档内容了。这些具体术语,不好意思,实在记不清了;
首先,复制一些需要引入的类文件:
这几个显示的是必须引入的,这个是OOO与API 打交道的接口。
因为该例子是文档类型,所以要引入的com.sun.star.text.下的很多类
比如:
等。如果不知道要引入那些,偷懒的方法是找到sdk目录下的样例中的样例程序文件。拷贝过来就是了。
其实将白了,个人感觉做SDK开发,一定要看sdk提供的样例,我们大部分的开发都是在这些样例上进行增改!
在openofficeContext构造函数中
需要传入两参数。
_xComponentContext 这个是组件上下文接口
这个参数我们不用担心从哪里获得,此接口由OOO分发过来。
在ProtocolHandlerAddon.java的ProtocolHandlerAddonImpl(XComponentContext xComponentContext )中获得了。
m_xCmpCtx = xComponentContext;;
xFrame 这个是和主框架提供给插件的接口
这个也不用担心,在ProtocolHandlerAddon.java的initialize()方法中也获得了;
if ( object.length > 0 )
{
m_xFrame = ( XFrame )UnoRuntime.queryInterface(
XFrame.class, object[ 0 ]);
}
下面是具体实现函数;
主要是这两个函数。没有多少注释。没办法。手上实在没过多的资料。
这里建立一个java类文件,名为;OpenOfficeContext 这个类主要是获取OpenOffice提供的文档接口,其实用win32术语来讲就是获得操作openoffice 文档 的句柄。有了这些句柄,就可以操作文档内容了。这些具体术语,不好意思,实在记不清了;
首先,复制一些需要引入的类文件:
import com.sun.star.lang.XComponent; import com.sun.star.lang.XMultiComponentFactory; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XServiceInfo;
这几个显示的是必须引入的,这个是OOO与API 打交道的接口。
因为该例子是文档类型,所以要引入的com.sun.star.text.下的很多类
比如:
import com.sun.star.text.XTextDocument; //文本document类 import com.sun.star.text.XTextCursor; //文本光标类
等。如果不知道要引入那些,偷懒的方法是找到sdk目录下的样例中的样例程序文件。拷贝过来就是了。
其实将白了,个人感觉做SDK开发,一定要看sdk提供的样例,我们大部分的开发都是在这些样例上进行增改!
在openofficeContext构造函数中
需要传入两参数。
_xComponentContext 这个是组件上下文接口
这个参数我们不用担心从哪里获得,此接口由OOO分发过来。
在ProtocolHandlerAddon.java的ProtocolHandlerAddonImpl(XComponentContext xComponentContext )中获得了。
m_xCmpCtx = xComponentContext;;
xFrame 这个是和主框架提供给插件的接口
这个也不用担心,在ProtocolHandlerAddon.java的initialize()方法中也获得了;
if ( object.length > 0 )
{
m_xFrame = ( XFrame )UnoRuntime.queryInterface(
XFrame.class, object[ 0 ]);
}
public OpenOfficeContext(XComponentContext _xComponentContext, XFrame _xFrame) { try { m_xCmpCtx = _xComponentContext; m_xFrame = _xFrame; //以下从xframe中获得控制器,又从控制器中取得model, //主要就是为了 从Xmodel中去查询到XTextDocument文档接口 //这个过程一般都是一样的 m_xController = m_xFrame.getController(); m_xModel = m_xController.getModel(); //UnoRuntime.queryInterface这个是查询你需要的接口!这个方法很重要,你可以通过这个方法,查询到你要操作的接口 m_xDoc = (XTextDocument) UnoRuntime.queryInterface( XTextDocument.class, m_xModel); //getText()是XTextDocument的方法,必须先查到XTextDocument,然后再得到Text接口 //最后才能得到上面的文本文字 m_xDocText = m_xDoc.getText(); // m_xDocFactory是文本文档操作非常重要的一个接口,顾名思义,其实文本操作的工厂接口类; m_xDocFactory = (XMultiServiceFactory) UnoRuntime.queryInterface( XMultiServiceFactory.class, m_xDoc); } catch (Exception e) { ErrorLog.writeExceptionToTxt(e); } }程序中一个方法就是往文本中插入注释。和word中插入批注一样;
下面是具体实现函数;
/** * 测试,往文本中的每一段处插入注释,并得到每一段文字 */ public void insertannotation() { try { //从m_xDocText接口中查询到列举动作的许可 XEnumerationAccess xParaAccess = (XEnumerationAccess) UnoRuntime.queryInterface(XEnumerationAccess.class, m_xDocText); //创建枚举器 XEnumeration xParaEnum = xParaAccess.createEnumeration(); //遍历段落 while (xParaEnum.hasMoreElements()) { Object elements = xParaEnum.nextElement(); XServiceInfo xInfo = (XServiceInfo) UnoRuntime.queryInterface( XServiceInfo.class,elements ); //从元素对象中查到文本文字的上下文 m_xTextContent = (XTextContent) UnoRuntime.queryInterface( XTextContent.class, elements); //得到textrange m_xTextRange = m_xTextContent.getAnchor(); //测试 插入注释; insertAnnotataionToSpeciPosi(m_xDocText, m_xTextRange,3,4); //得到段落的文字 String str = m_xTextRange.getString(); } } catch (Exception e) { ErrorLog.writeExceptionToTxt(e); } }
/** * 往指定的位置插入注释 */ public void insertAnnotataionToSpeciPosi(XText _xText,XTextRange _xTextRange, int _paragh, int _offset) { try { int i = 1; //得到文本光标 XTextCursor mXTextCursor = _xText.createTextCursor(); //段落光标 XParagraphCursor xParaCursor = (XParagraphCursor) UnoRuntime.queryInterface(XParagraphCursor.class, mXTextCursor); //将光标游到指定的段 // while (i <= _paragh) { // xParaCursor.gotoNextParagraph(false); // i++; // } try{ // xParaCursor.gotoStartOfParagraph(true); // mXTextCursor = ( XTextCursor)UnoRuntime.queryInterface(XTextCursor.class, xParaCursor); //这里要为false才能移动到指定的textrange; mXTextCursor.gotoRange(_xTextRange,false); // mXTextCursor.gotoStart(false); mXTextCursor.goRight((short)_offset, false); } catch(Exception e) { ErrorLog.writeExceptionToTxt(e); } XTextField xTextField = (XTextField) UnoRuntime.queryInterface( XTextField.class, m_xDocFactory.createInstance( "com.sun.star.text.TextField.Annotation")); XPropertySet xTextFieldPropertySet = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, xTextField); // set the appropriate properties for character and paragraph style xTextFieldPropertySet.setPropertyValue("Author", "chenqiang"); xTextFieldPropertySet.setPropertyValue("Content", "hello sdk"); _xText.insertTextContent(mXTextCursor, xTextField, false); } catch (Exception e) { ErrorLog.writeExceptionToTxt(e); } }
主要是这两个函数。没有多少注释。没办法。手上实在没过多的资料。
相关文章推荐
- 支付宝API接口开发相关文档以及实例
- 支付宝API接口开发相关文档以及实例
- 支付宝API接口开发相关文档以及实例
- 微信短网址url.cn 接口api开发文档
- 在线API,桌面版,jquery,css,Android中文开发文档,JScript,SQL掌用实例
- 麦讯通接口开发api文档
- java微信开发API解析(三)-高级功能的前奏----获取以及保存接口调用凭证 标签: 微信java办微信开发微信文档解析 2016-04-06 20:50 1101人阅读 评论(0) 收藏 举报
- 标准双接口开发文档及其代码实例
- 手机号码归属地接口开发文档及调用实例
- api 接口开发文档开发利器 --- apidoc
- 手机话费充值接口开发指南(含API文档,充值移动、联通、电信话费)
- 微信公众平台开发模式通用接口API文档
- PHP开发API接口的实例代码
- 微信沙箱退款查询接口demo实例,微信公众号支付退款查询api,微信沙盒1004用例-公众号/APP/扫码支付退款查询——微信支付沙箱开发11
- Java基础---“接口”实现时的另一种方式。通过Java JDK API 1.6.0文档实例发现并得出结论
- app后端开发二:API接口文档自动生成工具
- python flask api接口开发编程
- Restful风格API接口开发springMVC篇
- 浅谈 PHP 与手机 APP 开发(API 接口开发)
- laravel 开发RestFul接口【一、集成三方扩展 - dingo/api】