using System.IO; using System; using unoidl.com.sun.star.uno; using unoidl.com.sun.star.beans; using unoidl.com.sun.star.frame; using unoidl.com.sun.star.lang; using unoidl.com.sun.star.util; using unoidl.com.sun.star.bridge; class ConvertToPdf { static void Main(string[] args) { string inputPath = args[0]; string outputPath = Path.ChangeExtension(inputPath, ".pdf"); try { string extension = Path.GetExtension(inputPath).ToLower(); switch (extension) { case ".doc": case ".docx": ConvertToPdf(inputPath, outputPath, "writer_pdf_Export"); break; case ".xls": case ".xlsx": ConvertToPdf(inputPath, outputPath, "calc_pdf_Export"); break; default: Console.WriteLine("Неподдерживаемый формат файла. Поддерживаются только Word (.doc, .docx) и Excel (.xls, .xlsx) файлы."); return; } Console.WriteLine($"Файл успешно сконвертирован в PDF: "); } catch (System.Exception ex) { Console.WriteLine($"An error occurred: {ex}"); } } static void ConvertToPdf(string inputPath, string outputPath, string filterName) { XComponentContext xComponentContext = uno.util.Bootstrap.bootstrap(); XMultiComponentFactory xMultiComponentFactory = xComponentContext.getServiceManager(); object resolverObj = xMultiComponentFactory.createInstanceWithContext( "com.sun.star.bridge.UnoUrlResolver", xComponentContext); XUnoUrlResolver resolver = (XUnoUrlResolver)resolverObj; //Подключение к alteroffice. Если alteroffice на удаленном хосте, указать ip string sConnectionString = "uno:socket,host=localhost,port=2002;urp;StarOffice.ServiceManager"; object serviceManagerObj = resolver.resolve(sConnectionString); XMultiServiceFactory xMultiServiceFactory = (XMultiServiceFactory)serviceManagerObj; XComponentLoader xComponentLoader = (XComponentLoader)xMultiServiceFactory.createInstance("com.sun.star.frame.Desktop"); // Подготовка свойств для загрузки документа PropertyValue[] loadProps = new PropertyValue[1]; loadProps[0] = new PropertyValue { Name = "Hidden", Value = new uno.Any(true) }; string inputUrl = ConvertToUrl(inputPath); string outputUrl = ConvertToUrl(outputPath); // Загрузка документа XComponent xComponent = xComponentLoader.loadComponentFromURL(inputUrl, "_blank", 0, loadProps); // Настройка свойств экспорта в PDF PropertyValue[] exportProps = new PropertyValue[3]; exportProps[0] = new PropertyValue { Name = "FilterName", Value = new uno.Any(filterName) }; exportProps[1] = new PropertyValue { Name = "Overwrite", Value = new uno.Any(true) }; // Экспорт документа в PDF ((XStorable)xComponent).storeToURL(outputUrl, exportProps); // Закрытие документа ((XCloseable)xComponent).close(true); try { xComponent.dispose(); } catch {} } static string ConvertToUrl(string path) { return "file:///" + path.Replace("\\", "/").Replace(" ", "%20"); } }