openoffice-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Julieta Abdala <jabd...@kubikware.com>
Subject I NEED HELP!!!!!!! cppu.defaultBootstrap_InitialComponentContext(Reference<com::sun::star::uno::XComponentContext>* )- Server Win 2003
Date Fri, 12 Apr 2013 19:10:55 GMT


Hi guys!

I create a class in c#, to convert from "x" document to pDF.
The app works correctly in my local pc, but when migrate to the server I get this error:

System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an
exception.
    at cppu.defaultBootstrap_InitialComponentContext(Reference<com::sun::star::uno::XComponentContext>*
)
    at uno.util.Bootstrap.defaultBootstrap_InitialComponentContext(String ini_file, IDictionaryEnumerator
bootstrap_parameters)

----------------------------------------------------------------------------------
I use OpenOffice 3 and install OpenOffice.org_3.4.1_SDK.

this is my class:


using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Web;
using log4net.Core;
using Microsoft.Win32;
using uno;
using uno.util;
using unoidl.com.sun.star.beans;
using unoidl.com.sun.star.bridge;
using unoidl.com.sun.star.connection;
using unoidl.com.sun.star.frame;
using unoidl.com.sun.star.lang;
using unoidl.com.sun.star.uno;
using WebSearch.Components.GeneralFunctions;
using WebSearch.Log;
using Exception = System.Exception;

namespace WebSearch.Components.CommonFunctions
{
     public static class PDFUtility
     {
         public static void ConvertoDocumentToPdf(string fileName, string extension)
         {
             InitOpenOfficeEnvironment();

             string path = HttpContext.Current.Server.MapPath("~/TempFolder/PDFs/");

             LogConfig.SaveInFile(Level.Debug, "Get PDF path" + path, null,
                                  typeof (File).ToString(),
                                  "ConvertoDocumentToPdf");

             string oldPath = HttpContext.Current.Server.MapPath("~/TempFolder/TempFiles/")
+ User.CurrentUserId() + @"\";

             LogConfig.SaveInFile(Level.Debug, "Get Temp path" + oldPath, null,
                                  typeof (File).ToString(),
                                  "ConvertoDocumentToPdf");

             if (System.IO.File.Exists(path + fileName)) System.IO.File.Delete(path + fileName);

             if (System.IO.File.Exists(oldPath + fileName))
             {
                 LogConfig.SaveInFile(Level.Debug, "File Exist" + oldPath + fileName, null,
                                      typeof (File).ToString(),
                                      "ConvertoDocumentToPdf");

                 try
                 {
                    bool  value = ConvertToPdf(oldPath + fileName, path + fileName.ToLower().Replace(extension.ToLower(),
"pdf"));
                    if (value) System.IO.File.Delete(oldPath + fileName);
                 }
                 catch (Exception ex)
                 {
                     LogConfig.SaveInFile(Level.Error, "Convert PDF error", ex,
                                          typeof (File).ToString(),
                                          "ConvertoDocumentToPdf");
                 }
             }
         }

       


         private static void StartOpenOffice()
         {
             Process[] ps = Process.GetProcessesByName("soffice.exe");
             if (ps.Length != 0)
                 LogConfig.SaveInFile(Level.Error, "OpenOffice not found.  Is OpenOffice installed?"
+ ps.Length, null,
                                      typeof (File).ToString(),
                                      "StartOpenOffice");
             if (ps.Length > 0)
                 return;

             var p = new Process
                         {
                             StartInfo =
                                 {
                                     Arguments = "-headless -nofirststartwizard",
                                     FileName = "soffice.exe",
                                     CreateNoWindow = true
                                 }
                         };


             LogConfig.SaveInFile(Level.Debug, "Create new Process", null,
                                  typeof (File).ToString(),
                                  "StartOpenOffice");

             bool result = p.Start();

             if (result)
                 LogConfig.SaveInFile(Level.Debug, "process Starts", null,
                                      typeof (File).ToString(),
                                      "StartOpenOffice");

             if (result == false)
                 LogConfig.SaveInFile(Level.Error, "open Office start fails", null,
                                      typeof (File).ToString(),
                                      "StartOpenOffice");
         }

         private static string PathConverter(string file)
         {
             if (string.IsNullOrEmpty(file))
                 throw new NullReferenceException("Null or empty path passed to OpenOffice");

             return String.Format("file:///{0}", file.Replace(@"\", "/"));
         }

         private static string ConvertExtensionToFilterType(string extension)
         {
             LogConfig.SaveInFile(Level.Debug, "Get Filter Type" + extension, null,
                                  typeof (File).ToString(),
                                  "ConvertExtensionToFilterType");

             switch (extension)
             {
                 case ".doc":
                 case ".docx":
                 case ".txt":
                 case ".rtf":
                 case ".html":
                 case ".htm":
                 case ".xml":
                 case ".odt":
                 case ".wps":
                 case ".wpd":
                 case ".jpg":
                 case ".png":
                 case ".bmp":
                 case ".gif":
                     return "writer_pdf_Export";
                 case ".xls":
                 case ".xlsb":
                 case ".xlsx":
                 case ".ods":
                 case ".csv":
                     return "calc_pdf_Export";
                 case ".ppt":
                 case ".pptx":
                 case ".odp":
                     return "impress_pdf_Export";

                 default:
                     return null;
             }
         }

         private static void SaveDocument(XComponent xComponent, string sourceFile, string
destinationFile)
         {
             try
             {
                 var propertyValues = new PropertyValue[2];
                 // Setting the flag for overwriting
                 propertyValues[1] = new PropertyValue {Name = "Overwrite", Value = new Any(true)};
                 //// Setting the filter name
                 propertyValues[0] = new PropertyValue
                                         {
                                             Name = "FilterName",
                                             Value =
                                                 new Any(
                                                 ConvertExtensionToFilterType(Path.GetExtension(sourceFile.ToLower())))
                                         };

              
                 ((XStorable) xComponent).storeToURL(destinationFile, propertyValues);
             }
             catch (Exception ex)
             {
                 LogConfig.SaveInFile(Level.Error, "Save error ", ex,
                                      typeof (File).ToString(),
                                      "SaveDocument");
             }
         }

         private static bool ConvertToPdf(string inputFile, string outputFile)
         {
             if (ConvertExtensionToFilterType(Path.GetExtension(inputFile.ToLower())) == null)
                 LogConfig.SaveInFile(Level.Error, "Unknown file type for OpenOffice. File
= " + inputFile, null,
                                      typeof (File).ToString(),
                                      "ConvertoDocumentToPdf");
             //  StartOpenOffice();

             bool value = false;
             XComponent xComponent = null;
             try
             {
                 XComponentContext xContext = null;

                 RegistryKey regkey = Registry.LocalMachine.OpenSubKey(
                     @"SOFTWARE\OpenOffice.org\UNO\InstallPath", false);
                 if (regkey == null)
                     return false ;

                 var installPath = (string) regkey.GetValue("");
                 if (installPath == null)
                     return false;

                 string officePath = installPath + @"\soffice.exe";
                 string officeParams = "-headless -nologo -nofirststartwizard -terminate_after_init
-invisible";
                
                string  unoParams = "-accept='socket,host=localhost,port=8100;urp;StarOffice.Service'";

               

                 Environment.SetEnvironmentVariable(
                     "URE_BOOTSTRAP", "vnd.sun.star.pathname:" + installPath + "/fundamental.ini");

                 Process p = Process.Start(officePath, officeParams + unoParams);

                 XComponentContext xLocalContext = Bootstrap.defaultBootstrap_InitialComponentContext();
                 XMultiComponentFactory xLocalServiceManager = xLocalContext.getServiceManager();
                 var xUrlResolver = (XUnoUrlResolver) xLocalServiceManager.createInstanceWithContext(
                     "com.sun.star.bridge.UnoUrlResolver", xLocalContext);

                 
                 int i = 0;
                 while (i < 20)
                 {
                     try
                     {
                         xContext = (XComponentContext) xUrlResolver.resolve(
                             "uno:pipe,name=officepipe1;urp;StarOffice.ComponentContext");
                         if (xContext != null)
                             break;
                     }
                     catch (NoConnectException)
                     {
                         Thread.Sleep(100);
                     }
                     i++;
                 }
                 if (xContext == null)
                     return false;

                 var xMsf = (XMultiServiceFactory) xContext.getServiceManager();

                 Object desktop = xMsf.createInstance("com.sun.star.frame.Desktop");
                 var xLoader = (XComponentLoader) desktop;
                 xComponent = InitDocument(xLoader,
                                           PathConverter(inputFile), "_blank");
                 //Wait for loading
                 while (xComponent == null)
                 {
                     Thread.Sleep(1000);
                 }

                 // save/export the document
                 SaveDocument(xComponent, inputFile, PathConverter(outputFile));
                 value = true;
             }
             catch (Exception ex)
             {
                 LogConfig.SaveInFile(Level.Error, "Convert error" + ex.Message, ex,
                                      typeof (File).ToString(),
                                      "ConvertToPdf");
                 value = false;
             }
             finally
             {
                 if (xComponent != null) xComponent.dispose();
             }
             return value;
         }

         private static XComponent InitDocument(XComponentLoader aLoader, string file, string
target)
         {
             var openProps = new PropertyValue[1];
             openProps[0] = new PropertyValue {Name = "Hidden", Value = new Any(true)};

             XComponent xComponent = aLoader.loadComponentFromURL(
                 file, target, 0,
                 openProps);

             return xComponent;
         }

         [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
         [return: MarshalAs(UnmanagedType.Bool)]
         public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo);


         public static bool Is64Bit()
         {
             bool retVal;
             IsWow64Process(Process.GetCurrentProcess().Handle, out retVal);
             return retVal;
         }

         public static string GetOSBit()
         {
             bool is64bit = Is64Bit();
             if (is64bit)
                 return "x64";
             else
                 return "x32";
         }
     }

----------------------------------------------------------------------

I tried diferents solutions, but nothing worked.

    string officePath = installPath + @"\soffice.exe";
                 string officeParams = "-headless -nologo -nofirststartwizard -terminate_after_init
-invisible";
                
                string  unoParams = "-accept='pipe.....'";
-------------------------------------------------------------------------------

I forgot install some else in server? Such as Apache?

Please I need hel urgent

regards

-- 
-- 

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message