ppt ファイルをアップロードし、そのスライドを画像に抽出する ASP.NET 2.0 Web アプリケーションがあります。そのために、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、または実行可能ファイルで実行すると、完全に実行されます。しかし、本番サーバーで実行しようとすると、次のエラーが発生します。
System.Runtime.InteropServices.COMException (0x80004005): PowerPoint はファイルを開けませんでした。Microsoft.Office.Interop.PowerPoint.Presentations.Open (文字列 FileName、MsoTriState ReadOnly、MsoTriState Untitled、MsoTriState WithWindow) で PPTImageExtractor.PptConversor.ExtractImages (文字列 caminhoPpt、文字列 caminhoDestino、Int32 largura、Int32 altura、文字列 caminhoThumbs、Int32 larguraThumb、 Int32 alturaThumb、Boolean geraXml) で Upload.ProcessRequest(HttpContext コンテキスト)
プロセスはユーザー NT AUTHORITY\NETWORK SERVICE で実行されています。IIS は、匿名認証を使用するように構成されています。匿名ユーザーは管理者です。権限を気にせずにアプリケーションを実行できるように、このように設定しました。
私の開発マシンには、office 2010 beta1 があります。Office 2007を搭載したPCでも実行可能ファイルでテストしました。Office 2003 がインストールされているサーバーで実行可能ファイルからコードを実行すると、完全に実行されます。
パーミッションに問題が生じないようにするために、サーバー内のすべてのユーザーが Web サイトに完全にアクセスできます。Web サイトは IIS7 およびクラシック モードで実行されています。
また、Open-office にはこれを実行できるはずの API があると聞きましたが、それについては何も見つかりませんでした。私がしなければならないことを実行するために DLLImport を使用しても構わないし、Web サーバーに open-office をインストールすることもできます。パラメータが同じである限り、このメソッドの書き直しについて心配する必要はありません。すべてが機能します。
私はあなたの助けに感謝します。