2009-07-02 9 views
0

Ich möchte eine OpenOffice Impress-Präsentationsdatei konvertieren und in HTML oder JPEG konvertieren.OpenOffice Impress-Format als html/jpeg unter Verwendung von C# -Reflexion öffnen oder speichern, oder perl

Ich habe ein paar Beispiele gefunden, aber sie scheinen gebrochen zu sein. Ich möchte es so machen, dass es egal ist, welche Version von OpenOffice installiert ist, und ich möchte keine Interop-DLLs mit meiner Anwendung bündeln. Daher suche ich nach einer Lösung, die vorzugsweise in C# -Reflexion oder Perl mit Win32-OLE erfolgt.

Wie würden Sie auch die OpenOffice GUI verstecken?

+0

Hat meine Antwort geholfen Du? Wenn es das getan hat, bitte markieren Sie es. Danke – jmayor

Antwort

2

Verwenden Sie OpenOffice::OODoc, es versteht das XML-Format von OpenOffice-Dokumenten, erfordert keine OpenOffice-Binärdateien ausgeführt werden oder sogar Openoffice installiert haben.

3

Überprüfen Sie diese Lösung. Möglicherweise gibt es einige Änderungen an der Erklärung der Property müssen

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); 
} 

ich den exportformats eine frühere Lösung in Bezug auf veröffentlichte und die Zeichenfolge, die Sie

Hilfsmethoden übergeben müssen:

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; 
     } 

    } 
+0

Tolle Sachen. Vielen Dank. – Josh