У меня есть 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, чтобы сделать то, что я должен сделать, и я могу установить открытый офис на веб-сервере. Не волнуйтесь о перезаписи этого метода, пока параметры являются тем же, все будет работать.
Я признателен за Вашу помощь.
Рассматривая возможность использования Office Automation на сервере, вы можете прочитать информацию в следующей статье базы знаний.
http://support.microsoft.com/kb/257757
Ключевая фраза из приведенной выше ссылки
Microsoft в настоящее время не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых автоматических, не -интерактивное клиентское приложение или компонент (включая службы ASP, ASP.NET, DCOM и NT), поскольку Office может демонстрировать нестабильное поведение и / или взаимоблокировку при запуске Office в этой среде.
И я могу подтвердить, что вышесказанное верно, и не только М.С. пытается вас отговорить ...
Я могу ошибаться, недавно начал искать похожую вещь. Но вам не нужно устанавливать Office на компьютере для создания или редактирования офисных файлов 2007+. По сути, это zip-файлы с другим расширением. Если вы переименуете его в .zip, вы увидите все файлы и сможете редактировать их напрямую.
Затем его можно разархивировать, и все файлы будут там для вас. Вы можете создавать новые файлы аналогичным образом
Библиотеки взаимодействия требуют, чтобы рассматриваемое приложение было установлено на машина, с которой они работают. То есть, чтобы это работало на вашем рабочем сервере, вам необходимо установить Office на этом сервере. Это вообще ужасная идея. Существует много проблем с типом настройки, поскольку каждый раз, когда кто-то делает запрос, запускается новый экземпляр рассматриваемого приложения (в вашем случае PowerPoint).
Если вы хотите анализировать файлы PowerPoint на центральном сервере, вам следует использовать библиотеку, которая читает файлы PowerPoint. Я знаю, что Aspose делает такой продукт (Aspose.Slides), но есть и другие.
Если документы находятся в PowerPoint 2007, вы можете проанализировать Open Office XML на предмет нужных данных. См. Введение в форматы файлов Open XML Office (2007) и Open XML SDK 2.0 для Microsoft Office для получения дополнительной информации.
Никогда не используйте 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