You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openoffice.apache.org by "Shinde, Satish" <sa...@hp.com> on 2013/09/19 07:09:29 UTC

Open office 4.0.0 --> Throwing Error ==> System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception

Dear Team,

I have created one class in C# to convert ".doc, .docx, etc" documents to PDF tried using open office version 4.0.0.

Note : Software's (Open Office 4.0.0 / Open office SDK ) are not installed on my PC . I am only using required 5 dll's along with sopen.exe.

When I run the application it is giving error at

public static void ConvertToPdf(string inputFile, string outputFile)
        {
            if (ConvertExtensionToFilterType(Path.GetExtension(inputFile)) == null)
                throw new InvalidProgramException("Unknown file type for OpenOffice. File = " + inputFile);
                StartOpenOffice();                          //Get a ComponentContext
                var xLocalContext = Bootstrap.bootstrap();

==> Throwing error detailed below

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 tried with many few solutions but not able to resolve this issue and found email addresses on the link https://issues.apache.org/ooo/show_bug.cgi?format=multiple&id=122007.

Please provide the solution to this problem.

Detailed code is as given below.


public static void ConvertToPdf(string inputFile, string outputFile)
        {
            if (ConvertExtensionToFilterType(Path.GetExtension(inputFile)) == null)
                throw new InvalidProgramException("Unknown file type for OpenOffice. File = " + inputFile);
            StartOpenOffice();                          //Get a ComponentContext
            var xLocalContext = Bootstrap.bootstrap();  //Get MultiServiceFactory
            var xRemoteFactory = (XMultiServiceFactory)xLocalContext.getServiceManager();     //Get a CompontLoader
            var aLoader = (XComponentLoader) xRemoteFactory.createInstance("com.sun.star.frame.Desktop");     //Load the sourcefile
            XComponent xComponent = null;
            try
            {
                xComponent = InitDocument(aLoader,PathConverter(inputFile), "_blank");         //Wait for loading
                while (xComponent == null)
                {
                    Thread.Sleep(1000);
                }          // save/export the document

                SaveDocument(xComponent, inputFile, PathConverter(outputFile));
            }
            finally
            {
                if (xComponent != null) xComponent.dispose();
            }
        }



        private static void StartOpenOffice()
        {
            var ps = Process.GetProcessesByName("soffice.exe");
            if (ps.Length != 0)
                throw new InvalidProgramException("OpenOffice not found. Is OpenOffice installed?");
            if (ps.Length > 0)
                return;
            string sOfficePath = ConfigSettings.OpenOfficeExePath;
            var p = new Process {
                 StartInfo = { Arguments = "-headless -nofirststartwizard", FileName = sOfficePath +"soffice.exe", CreateNoWindow = true }
                             };
            var result = p.Start();
            if (result == false)
             throw new InvalidProgramException("OpenOffice failed to start.");
        }


        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) };
            var xComponent = aLoader.loadComponentFromURL(file, target, 0, openProps);
            return xComponent;
        }

        private static void SaveDocument(XComponent xComponent, string sourceFile, string destinationFile)
        {     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)))
                };
            ((XStorable) xComponent).storeToURL(destinationFile, propertyValues);
        }

        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(@"\", "/"));
        }

        public static string ConvertExtensionToFilterType(string extension)
        {
            switch (extension)
            {
                case ".doc":
                case ".docx":
                case ".txt":
                case ".rtf":
                case ".html":
                case ".htm":
                case ".xml":
                case ".odt":
                case ".wps":
                case ".wpd":
                    return "writer_pdf_Export";
                case ".xls":
                case ".xlsb":
                case ".xlsx":
                case ".ods":
                    return "calc_pdf_Export";
                case ".ppt":
                case ".pptx":
                case ".odp":
                return "impress_pdf_Export";
                default:
                    return null;
            }
        }







Best Regards,
Satish Shinde
Desk: +91 20 4014 2481
CUG:  5514 2481