问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 使用 openoffice 将office文件转PDF的必备条件?

发布网友 发布时间:2022-04-26 02:27

我来回答

1个回答

热心网友 时间:2022-06-20 01:56

OpenOffice java api:

简单的说就是利用java程序可以操作OpenOffice的所有功能,比如创建doc文档,插入文字,设置文字格式等等。

1. OpenOffice 给程序员提供了一个叫UNO (UniversalNetwork Objects)的组件技术.我理解的UNO: OpenOffice 类似于web程序中的服务器,程序员写的代码类似于客户端,利用UNO提供的接口和服务去完成对OpenOffice文档的操作。所以写程序首先要搭建 UNO环境:

1. 下载 OpenOffice

2.复制UNO提供的jar包: unoil.jar, java_uno.jar, juh.jar, jurt.jar, ridl.jar, unoloader.jar. (ps: 安装了SDK之后在文件夹找)到自己的工程中,引入它们。

3. 下载文档: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);
}追问意思是服务端必须安装openoffice了?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
推荐一款在卧室听的音响,最好带CD,带收音机,可插U盘,价格1000以内!尽量... 求问,近几年还会有类似于声之形、你的名字这样的动漫电影么w_百度... 苦学包括什么 北京世纪百奥科技有限公司怎么样? 居住证积分需要哪些材料 上海办居住证积分需要什么资料 居住证积分有哪些材料 如何建立良好的家庭情感氛围 如何让家庭氛围更快乐 如何营造一个欢乐轻松的家庭氛围呢? openoffice 通过jodconverter将office转pdf,怎样才能生成的pdf中包含书签 分体式太阳能热水器怎么样? 分体式太阳能电热水器双用,如果插上电源有显示,但不加热是什原因? 怎样学看工程图纸 学习建筑平面效果图制作需要的建筑知识。 所有平面图形共有的基本属性,性质.. p-r-f-2-100/1.95/0.7型号的分体式太阳能热水器一直加热但热水很少是怎么回事? 怎么画平面图? 基本画法 也是可以的,希望能够快点学会 哈哈!!!跪求 怎么学平面图设计 学习绘CAD平面图最基本的有那些要求?详解!谢谢 图纸基础知识 种群和群落的区别 生物群落的概念 组织,器官,系统,个体,种群,群落,生态系统,生物圈的概念 什么是生物群落演替 你认为怎样研究群落演替 种群于群落的概念 怎样分辨生物中的种群、群落和生态系统 ,能举例子的最好 物种、种群、群落即生态系统的概念 生物群落的名词解释 生物群落是指 C#怎么调用openoffice将word转换成PDF-CSDN论坛 openoffice 怎么将html转成pdf linux操作系统安装OpenOffice,doc转换pdf除黑体与宋体其他字体无法显示问题 java 使用Openoffice 将docx转换为pdf,有点小问题,求解答 用OpenOffice将word转换为pdf,为什么不支持2010版本的word,大家知道怎么解决这个问题吗? 怎么给医保卡设密码是什么意思 医保卡常享服密码怎么设置? 医保卡怎么开密码怎么设置 医保卡消费没有密码设置 医保卡的密码是几位数 电子医保卡怎么设置支付密码 什么是微软账户 microsoft账户有什么用,别人用我的microsoft会怎么样,会不会影响我或者... 七月又十四之信不信由你的剧情简介 七月又十四之信不信由你电影 电影〈七月十四〉信不信由你的女主角是谁 PS的画笔工具怎么使用? 跪求七月又十四之信不信由你1999年由 吴镇宇主演的百度云资源 PS画笔怎样使用 七月又十四之信不信由你里面的raymond是谁演的?