Проблемы с автоматизацией делопроизводства в asp.net. Я могу использовать альтернативы, такие как открытый офис, если я знал как

У меня есть ASP.NET 2,0 веб-приложения, которые должны загрузить ppt файл и затем извлечь его слайды к изображениям. Для этого я импортировал блоки office.dll и Microsoft.Office.Interop.PowerPoint.dll и написал следующий код

public static int ExtractImages(string ppt, string targetPath, int width, int height)
    {
        var pptApplication = new ApplicationClass();

        var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);

        var slides = new List<string>();

        for (var i = 1; i <= pptPresentation.Slides.Count; i++)
        {
            var target = string.Format(targetPath, i);
            pptPresentation.Slides[i].Export(target, "jpg", width, height);
            slides.Add(new FileInfo(target).Name);
        }

        pptPresentation.Close();

        return slides.Count;
}

Если я выполняю этот код в своей локальной машине в asp.net или исполняемом файле, это работает отлично. Но Если я пытаюсь выполнить его в рабочем сервере, я получаю следующую ошибку:

Система. Время выполнения. InteropServices. COMException (0x80004005): PowerPoint не мог открыть файл. в Microsoft. Office. Interop. PowerPoint. Презентации. Открытый (Строка FileName, MsoTriState ReadOnly, MsoTriState, Без названия, MsoTriState WithWindow) в PPTImageExtractor. PptConversor. ExtractImages (Представляют caminhoPpt в виде строки, Строка caminhoDestino, Int32 largura, Int32 Алтура, Строка caminhoThumbs, Int32 larguraThumb, Int32 alturaThumb, булевская переменная geraXml) в Upload. ProcessRequest (контекст HttpContext)

Процесс выполняет с пользователем УСЛУГИ NT AUTHORITY\NETWORK. IIS настроен для использования анонимной аутентификации. Анонимный пользователь является администратором, я установил его как это, чтобы позволить приложению работать, не имея необходимость волноваться о полномочиях.

В моей машине разработки у меня есть офис 2010 beta1. Я протестировал с исполняемым файлом в ПК с офисом 2007 также. И если я выполняю код от исполняемого файла в сервере с установленным офисом 2003, он работает отлично.

Чтобы гарантировать, что не было бы никаких проблем с полномочиями, у всех в сервере есть полный доступ к веб-сайту. Веб-сайт работает в IIS7 и Классическом Режиме.

Я также слышал, что Открытый офис имеет API, который должен смочь сделать это, но я ничего не мог найти об этом. Я не возражаю использовать DLLImport, чтобы сделать то, что я должен сделать, и я могу установить открытый офис на веб-сервере. Не волнуйтесь о перезаписи этого метода, пока параметры являются тем же, все будет работать.

Я признателен за Вашу помощь.

5
задан Jason Plank 4 December 2011 в 07:12
поделиться

4 ответа

Рассматривая возможность использования Office Automation на сервере, вы можете прочитать информацию в следующей статье базы знаний.

http://support.microsoft.com/kb/257757

Ключевая фраза из приведенной выше ссылки

Microsoft в настоящее время не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых автоматических, не -интерактивное клиентское приложение или компонент (включая службы ASP, ASP.NET, DCOM и NT), поскольку Office может демонстрировать нестабильное поведение и / или взаимоблокировку при запуске Office в этой среде.

И я могу подтвердить, что вышесказанное верно, и не только М.С. пытается вас отговорить ...

1
ответ дан 13 December 2019 в 05:32
поделиться

Я могу ошибаться, недавно начал искать похожую вещь. Но вам не нужно устанавливать Office на компьютере для создания или редактирования офисных файлов 2007+. По сути, это zip-файлы с другим расширением. Если вы переименуете его в .zip, вы увидите все файлы и сможете редактировать их напрямую.

Затем его можно разархивировать, и все файлы будут там для вас. Вы можете создавать новые файлы аналогичным образом

0
ответ дан 13 December 2019 в 05:32
поделиться

Библиотеки взаимодействия требуют, чтобы рассматриваемое приложение было установлено на машина, с которой они работают. То есть, чтобы это работало на вашем рабочем сервере, вам необходимо установить Office на этом сервере. Это вообще ужасная идея. Существует много проблем с типом настройки, поскольку каждый раз, когда кто-то делает запрос, запускается новый экземпляр рассматриваемого приложения (в вашем случае PowerPoint).

Если вы хотите анализировать файлы PowerPoint на центральном сервере, вам следует использовать библиотеку, которая читает файлы PowerPoint. Я знаю, что Aspose делает такой продукт (Aspose.Slides), но есть и другие.

Если документы находятся в PowerPoint 2007, вы можете проанализировать Open Office XML на предмет нужных данных. См. Введение в форматы файлов Open XML Office (2007) и Open XML SDK 2.0 для Microsoft Office для получения дополнительной информации.

0
ответ дан 13 December 2019 в 05:32
поделиться

Никогда не используйте Office Interop из приложения ASP.NET. См. Рекомендации по серверной автоматизации Office .

Однако, если у вас нет альтернативы, в Windows Server 2008 вам необходимо создать следующие каталоги, чтобы это работало:

Windows 2008 Server x64: C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop Windows 2008 Server x86: C: \ Windows \ System32 \ config \ systemprofile \ Desktop

10
ответ дан 13 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: