|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
无论谁倒了对双方阵营的粉丝们也是有害无益。</p>比来在项目中碰到一个需求,是要将各种文档转换为PDF。这应当是个很罕见的事情,并且我也只必要撑持MSWord,Excel,PowerPoint等罕见的文档格局就好了。因而有伴侣就倡议了,可使用MSOffice转嘛。固然也能够利用其他办法,比方装一些PDF打印机,把文档打印成pdf文件。不外这些做法在“受权”方面仿佛都有些成绩。固然,我也找了一些贸易办理计划(如Aspose)保底,咋看之下它的受权体例也其实不算贵。不外如今看来,OpenOffice.org已可以满意我的需求了。假如您有更好的做法也请告知我。
OpenOffice.org是个开源的办公套件,供应了与MSWord,Excel,PowerPoint等对应的多个软件,在良多时分倒也充足利用。更主要的是,它撑持包含MSOffice2007在内的多种格局,而且可以将其导出为PDF文件,再加上它的受权体例是LGPL,在临盆情况里利用天然也不会有甚么分明的限定了。别的,OOo自己也有相称多的开辟文档,我对完成这个事情仍是很有信念的——但我没想到的是,这历程还真不如设想中那末顺遂。
编译经由过程也不简单
起首,我安装了OpenOffice.org主程序和SDK。SDK随带一些示例代码,个中DocumentHandling部分恰好包括一个我必要的DocumentConverter功效。因而我翻开Eclipse,倒进这个文件,很明显会呈现有数毛病提醒:还没有引进符合的类库嘛。那末我该援用哪些jar包呢?依据其他一些搜刮到的琐屑的材料提醒,我该引进的是一些放在~Basisprogramclasses下的几个jar包,好比unoil.jar、juh.jar……等等,这个包在甚么中央?现实上,我在这么目次下惟独只找到unoil.jar这个独苗。莫名之余,我一股脑的将目次中的30多个jar包全体引进,但是毛病仍旧。
我就蒙了,在搜刮引擎里不休地用juh.jar相干的关头字举行查询,但愿能够找到一些提醒,一无所得。然后我动用了体系中的文件搜刮,在~/Basis目次中查找*.jar,仍是没有发明juh.jar的踪迹。因而我很懊丧,怎样第一步也这么不顺遂。直到约莫过了一个小时后,我才偶然间在~UREjava目次下发明了那几个关头的jar包。引进后我浩叹一口吻:示例代码终究编译经由过程了。归纳综合来讲,假如必要让DocumentConverter.java编译经由过程,必要引进一下三个jar包:
~UREjavajuh.jar
~UREjavajurt.jar
~Basisprogramclassesunoil.jar
真是仇恨文档和实践征象不符的情形,损耗工夫不说,心境也变糟了。
收拾示例代码
不能不说,DocumentConverter.java真不克不及算是段优异的示例代码。起首,它并没有很好地起到树模的感化。我幻想中的示例代码应当可以明晰地申明事情的体例和步骤,而不会增加太多分外的内容。这段示例代码的效果是“转化指定目次中的一切文件”,还用到了递回。再加上它没有import任何范例,每一个范例在利用时都拖着长长的“com.sun.star”,这让底本就非常冗余的Java代码变得更加难以了解。更别说正文与代码自己的抵触,另有过剩的范例强迫转换等成绩。为此,我依据文档申明,从头改写了一下示例代码,将全部历程拆分为多个步骤。
起首,我们翻开并毗连一个OOo程序,这必要创立一个XComponentContext工具:
privatestaticXComponentContextcreateContext()throwsException{
//gettheremoteofficecomponentcontext
returnBootstrap.bootstrap();
}
然后创立一个XComponentLoader工具:
privatestaticXComponentLoadercreateLoader(XComponentContextcontext)throwsException{
//gettheremoteofficeservicemanager
XMultiComponentFactorymcf=context.getServiceManager();
Objectdesktop=mcf.createInstanceWithContext("com.sun.star.frame.Desktop",context);
returnUnoRuntime.queryInterface(XComponentLoader.class,desktop);
}
<p>另外,小型软件代码重用价值低,没有必要跨平台;大型软件,有严格的规划、部署,不可以随意跨平台。 |
|