Problemas com a automação de escritório em asp.net. Eu posso usar alternativas como escritório aberto, se soubesse como

Eu tenho um aplicativo Web ASP.NET 2.0 que deve carregar um arquivo ppt e extrair seus slides em imagens. Para isso, importei os assemblies office.dll e Microsoft.Office.Interop.PowerPoint.dll e escrevi o seguinte código

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;
}

Se eu executar esse código na minha máquina local, no asp.net ou em um executável, ele funcionará perfeitamente. Mas se eu tentar executá-lo no servidor de produção, obtenho o seguinte erro:

System.Runtime.InteropServices.COMException (0x80004005): O PowerPoint não pôde abrir o arquivo. em Microsoft.Office.Interop.PowerPoint.Presentations.Open (String FileName, MsoTriState ReadOnly, MsoTriState sem título, MsoTriState WithWindow) em PPTImageExtractor.PptConversor.ExtractImages (String caminhoPpt, String caminhoDestino, Int32, Int32, Int32 alturaThumb, Boolean geraXml) em Upload.ProcessRequest (contexto HttpContext)

O processo está sendo executado com o usuário NT AUTHORITY \ NETWORK SERVICE. O IIS está configurado para usar autenticação anônima. O usuário anônimo é um administrador. Defino-o assim para permitir que o aplicativo seja executado sem ter que se preocupar com permissões.

Na minha máquina de desenvolvimento, tenho o Office 2010 beta1. Eu testei com o executável em um PC com o Office 2007 também. E se eu executar o código do executável no servidor, com o Office 2003 instalado, ele funcionará perfeitamente.

Para garantir que não haja problemas com permissões, todos no servidor têm acesso total ao site. O site está sendo executado no IIS7 e no Modo Clássico.

Também ouvi dizer que o Open-office tem uma API que deve ser capaz de fazer isso, mas não consegui encontrar nada sobre isso. Não me importo de usar o DLLImport para fazer o que tenho que fazer e posso instalar o escritório aberto no servidor da web. Não se preocupe em reescrever esse método, desde que os parâmetros sejam os mesmos, tudo funcionará.

Eu aprecio sua ajuda.

questionAnswers(6)

yourAnswerToTheQuestion