Внедрение AlterOffice в свой проект на C#

Руководство по вызову API AlterOffice на платформе .NET Framework 4.8 из другого проекта с помощью межпроцессного взаимодействия

В данном руководстве описан процесс интеграции функционала API AlterOffice, реализованного на платформе .NET Framework 4.8, в приложение на другой платформе. Подробное руководство по настройке проекта и подключению SDK AlterOffice доступно по ссылке: https://support.almi-partner.ru/help/ru/34/107

Проблема совместимости

Если ваш проект использует платформу, отличную от .NET Framework 4.8 (например, .NET Core, .NET 6.0, .NET 8.0 и т.д.), прямой вызов функционала невозможен из-за несовместимости этих платформ. Однако это ограничение можно обойти с помощью межпроцессного взаимодействия. В данном случае предлагается запуск отдельного процесса и обмен данными через командную строку.

Запуск AlterOffice в режиме сервера

Для начала необходимо запустить AlterOffice в режиме сервера, чтобы обеспечить подключение через сокет:

"C:\Program Files\AlterOffice\program\aoffice" --headless --nofirststartwizard --accept="socket,host=0.0.0.0,port=2002;urp;StarOffice.Service"

Инициализация API AlterOffice через UnoUrlResolver

UnoUrlResolver — это компонент из API AlterOffice, который используется для установления удалённого соединения с AlterOffice.
После запуска сервера AlterOffice, инициализируйте взаимодействие с API в вашем приложении:

XComponentContext xComponentContext = uno.util.Bootstrap.bootstrap();
XMultiComponentFactory xMultiComponentFactory = xComponentContext.getServiceManager();
object resolverObj = xMultiComponentFactory.createInstanceWithContext(
   "com.sun.star.bridge.UnoUrlResolver", xComponentContext);

XUnoUrlResolver resolver = (XUnoUrlResolver)resolverObj;

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

Запуск .NET Framework 4.8 приложения из другого проекта

Для вызова функционала AlterOffice из проекта на другой платформе (например, .NET 8.0), выполните запуск скомпилированного .exe файла через Process.Start:

string exePath = @"D:\ConvertToPDF\ctp\bin\Debug\ctp.exe";
              var processStartInfo = new ProcessStartInfo
              {
                  FileName = exePath,
                  Arguments = $"{request.InputPath}",
                  RedirectStandardOutput = true,
                  RedirectStandardError = true,
                  UseShellExecute = false,
                  CreateNoWindow = true
              };

              using (var process = Process.Start(processStartInfo))


Использование Process.Start позволяет запустить приложение на .NET Framework 4.8 как отдельный процесс, что решает проблему совместимости. Этот метод подходит для выполнения задач, которые можно вызвать с передачей параметров через командную строку.
Такой подход позволяет интегрировать функционал AlterOffice из проекта на платформе .NET Framework 4.8 в другие проекты. Это решение особенно полезно для сценариев, где требуется запускать сложные процессы или использовать функции, недоступные в других версиях .NET.  

Структура проекта .NET Framework 4.8

Структура проекта .NET 8.0

Вложение

ConvertToPdf.cs - приложение AlterOffice на платформе .NET Framework 4.8
DocumentsController.cs - контроллер проекта на платформе .NET 8.0
Прикреплённые файлы
ConvertToPdf.cs
404kb
DocumentsController.cs
404kb