使用Apache Open Office API以幻灯片形式嵌入视频

时间:2015-12-29 12:36:09

标签: java openoffice.org

我想创建一个插件,通过自动指定视频的位置,在Open Office Impress的打开实例中的当前幻灯片上添加视频。我已经成功地为幻灯片添加了形状。但我找不到嵌入视频的方法。

使用.uno:InsertAVMedia我可以通过用户输入来选择文件并且它可以正常工作。我如何以编程方式指定文件的位置?

结论:

API不支持此功能。无需用户干预即可插入图像和音频,但视频无法通过这种方式完成。希望此功能在后续版本中发布。

2 个答案:

答案 0 :(得分:1)

您使用文件流阅读器和POI请求了有关扩展程序的信息,即使您使用的代码完全不同。

如果您确实想要开发扩展,那么请从其中一个Java示例开始。使用Impress的示例是https://wiki.openoffice.org/wiki/File:SDraw.zip

将视频插入Impress演示文稿可能很困难。首先要确保你可以手动工作。最明显的方法似乎是插入 - >媒体 - >音频或视频。然而,许多人使用文件链接而不是实际嵌入文件。另请参阅https://ask.libreoffice.org/en/question/1898/how-to-embed-video-into-impress-presentation/

如果嵌入符合您的需求,并且您希望通过使用扩展(这似乎是您的问题所要求的)自动化嵌入,那么有一个名为InsertAVMedia的dispatcher method可以执行此操作。

我不知道该调用的参数是什么。有关如何查找调度程序调用的参数,请参阅https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=61127

修改

以下是一些插入视频的基本代码。

sub insert_video
    dim document   as object
    dim dispatcher as object
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dispatcher.executeDispatch(document, ".uno:InsertAVMedia", "", 0, Array())
end sub

通过查看sfx.sdi中的InsertAVMedia,似乎此调用不带任何参数。

编辑2

很抱歉,但InsertVideo和InsertImage也没有参数。从svx.sdi看起来以下调用采用某种类型的参数:InsertGalleryPic,InsertGraphic,InsertObject,InsertPlugin,AVMediaToolBox。

但是根据https://wiki.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Getting_Started/Sometimes_the_macro_recorder_fails,无法为InsertObject指定文件。该文档还提到,在尝试之前,你永远不会知道什么会有效。

InsertGraphic需要一个FileName参数,所以我认为这应该有用。

答案 1 :(得分:1)

可以在当前幻灯片上添加XPlayer。看起来这样可以播放视频,您可以自动指定文件的网址。

以下是使用createPlayer的示例:https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=57699

修改

此基本代码适用于我的系统。要播放视频,只需调用例程。

sub play_video
    If Video_flag = 0 Then
        video =converttoURL( _
            "C:\Users\JimStandard\Downloads\H264_test1_Talkinghead_avi_480x360.avi")
        Video_flag = 1
        'for windows:
        oManager = CreateUnoService("com.sun.star.media.Manager_DirectX")
        ' for Linux
        ' oManager = CreateUnoService("com.sun.star.media.Manager_GStreamer")
        oPlayer = oManager.createPlayer( video )
        ' oPlayer.CreatePlayerwindow(array()) ' crashes?
        'oPlayer.setRate(1.1)
        oPlayer.setPlaybackLoop(False)
        oPlayer.setMediaTime(0.0)
        oPlayer.setVolumeDB(GetSoundVolume())
        oPlayer.start() ' Lecture
        Player_flag = 1
    Else
        oPlayer.start() ' Lecture
        Player_flag = 1
    End If
End Sub