Руководство по вызову 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