使用 C# 反射或 perl 自动打开和保存 OpenOffice Impress 格式为 html/jpeg

Posted

技术标签:

【中文标题】使用 C# 反射或 perl 自动打开和保存 OpenOffice Impress 格式为 html/jpeg【英文标题】:Automate open and save OpenOffice Impress format as html/jpeg using C# reflection, or perl 【发布时间】:2009-07-02 07:12:31 【问题描述】:

我想转换 OpenOffice Impress 演示文稿文件并将其转换为 html 或 JPEG。

我找到了一些示例,但它们似乎已损坏。我想这样做,安装什么版本的 OpenOffice 并不重要,我不想将任何互操作 dll 与我的应用程序捆绑在一起。因此,我正在寻找在 C# 反射中完成的解决方案,最好是使用 Win32-OLE 或 Perl。

另外,您将如何隐藏 OpenOffice GUI?

【问题讨论】:

我的回答对您有帮助吗?如果有,请标记它。谢谢 【参考方案1】:

查看此解决方案。可能需要对 PropertyValues 的声明进行一些更改

public void Conversion(string sourcefile, string exportfile)

       Type tServiceManager = Type.GetTypeFromProgID("com.sun.star.ServiceManager", true);
       object oServiceManager = System.Activator.CreateInstance(tServiceManager);
       object oDesktop = Invoke(oServiceManager,"createinstance",BindingFlags.InvokeMethod,"com.sun.star.frame.Desktop");
       //Load Document
       Object[] arg = new Object[4];
       arg[0] = PathConverter(sourcefile);  // or "private:factory/swriter"  for a blank Document
       arg[1] = "_blank";
       arg[2] = 0;
       object loadproperty1 = CreatePropertyValue("Hidden", true);  // Executes the OpenOffice without UI
       arg[3] = new Object[]  loadproperty1;
       object oComponent = Invoke(oDesktop,"loadComponentFromUrl",BindingFlags.InvokeMethod,arg);

       //Create an array for the storeToUrl method  
       arg = new Object[2];
       arg[0] = PathConverter(exportfile);  
       object storeproperty1 = CreatePropertyValue("Overwrite", true);  // Overrites if file exits and prevents errors
       object storeproperty2 = CreatePropertyValue("FilterName", "HTML (StarWriter)");  // Export to HTML
       arg[1] = new Object[]  storeproperty1,storeproperty2 ;
       Invoke(oComponent,"storeToUrl",BindingFlags.InvokeMethod,arg);

我之前发布了一个关于导出格式和您需要传递的字符串的解决方案

辅助方法:

private static object CreatePropertyValue(object serviceManager,string name, object value)
    
        object propertyvalue = Invoke(serviceManager, "Bridge_GetStruct", BindingFlags.CreateInstance|BindingFlags.InvokeMethod|BindingFlags.GetProperty,
                                 "com.sun.star.beans.PropertyValue");
        Invoke(propertyvalue, "Name", BindingFlags.SetProperty, name);
        Invoke(propertyvalue, "Value", BindingFlags.SetProperty, value);
        return propertyvalue;
        

        private static object Invoke(object obj, string method, BindingFlags binding, params object[] par)
        
            return obj.GetType().InvokeMember(method, binding, null, obj, par);
         

    /// Convert into OO file format  
    /// The file.   
    /// The converted file  

    private static string PathConverter( string file)  
     
       try  
       
         file = file.Replace(@"\", "/"); 
         return "file:///"+file;  
       
       catch (System.Exception ex)  
       

          throw ex;  
       

   

【讨论】:

【参考方案2】:

使用OpenOffice::OODoc,它理解OpenOffice文档的XML格式,不需要运行openoffice二进制文件,甚至不需要安装openoffice。

【讨论】:

以上是关于使用 C# 反射或 perl 自动打开和保存 OpenOffice Impress 格式为 html/jpeg的主要内容,如果未能解决你的问题,请参考以下文章

Java反射

如何使用反射调用自定义运算符

java反射机制

Java反射机制浅析

前端自动化测试

浅谈java放射机制