使用 Java 将 OpenOffice 幻灯片从一个演示文稿复制到另一个演示文稿

Posted

技术标签:

【中文标题】使用 Java 将 OpenOffice 幻灯片从一个演示文稿复制到另一个演示文稿【英文标题】:Copy an OpenOffice slide from one presentation to another w/ Java 【发布时间】:2011-04-25 19:41:11 【问题描述】:

我正在使用 OOo SDK 构建一个 Java 应用程序,我在其中处理 OpenOffice Impress 演示文稿中的幻灯片。我知道如何获取包含单张幻灯片的对象,现在我正在寻找一种将幻灯片从演示文稿复制到另一个演示文稿的方法。

这是(缩短的)我打开文件并选择幻灯片的操作:

String filename = "file://....odp";
int offset = 2;

XComponent xSourceComponent = xComponentLoader.loadComponentFromURL(filename, "_blank", 0, loadProps);
XComponent xTargetComponent = xComponentLoader.loadComponentFromURL("private:factory/simpress", "_blank", 0, loadProps);

XDrawPages xDrawPages = ((XDrawPagesSupplier)UnoRuntime.queryInterface(
         XDrawPagesSupplier.class, xSourceComponent)).getDrawPages();

XPresentationPage xPage = (XPresentationPage)UnoRuntime.queryInterface(XPresentationPage.class,
         xDrawPages.getByIndex(offset));

基于我试图获得这样的可转移对象:

XTransferable t = (XTransferable)UnoRuntime.queryInterface(
         XTransferable.class, xPage);

但这似乎不受支持。有人知道如何做到这一点吗?

【问题讨论】:

【参考方案1】:

天哪,祝你好运。大约一年前我试图做这样的事情并最终改用 Apache POI——不一定确定 OO SDK 不能做到这一点,但 API 的文档是如此深奥以至于我无法理解出去。在 POI 中,这很简单

SlideShow ss1 = new SlideShow(new FileInputStream(inputFile1));
Slide newSlide = ss.createSlide();
for (Shape shape : ss.getSlides()[0].getShapes()) 
    newSlide.addShape(shape);

这可能对您没有真正的帮助,因为您处理的是 OO 而不是 PPT,但是如果您迫切需要解决方案并且在 OpenOffice 方面没有获得帮助,您可以将 JODConverter (http://www. artofsolving.com/opensource/jodconverter) 和 POI。

【讨论】:

确实,文档不好用。目的是在 OOo 中有一个向导作为插件,它创建并填写一些幻灯片,所以我绑定到 OO 的 UNO API。大多数东西都在工作,但目前创建的幻灯片的布局是在代码中定义的,我希望有一个用户可以编辑的模板。 你看过ODFDOM吗?看起来里面有幻灯片复制操作(OdfPresentationDocument.copyForeignSlide)。

以上是关于使用 Java 将 OpenOffice 幻灯片从一个演示文稿复制到另一个演示文稿的主要内容,如果未能解决你的问题,请参考以下文章

从 JAVA 使用 LibreOffice/OpenOffice 转换文件格式

java使用openoffice将word转换为pdf的问题

将doc文件中的图像和图形导出为openoffice中的图像

无法在 LibreOffice 中检索 XShape 的容器

ubuntu 10.10 幻灯片动画有问题,求助

如何将 OpenOffice.org 作为后台进程运行以将我的应用程序连接到使用 UNO Java API?