2

私は、ユーザーがレポート (Word ドキュメント) を追加しなければならない Web サイトをコーディングしており、それらを表示できるようにするために、*.doc を *.pdf に変換し、それらを pdf.js で表示しています。変換には、Microsoft.Office.Interop.Word を使用します。コードは次のようになります

public void ConvertDocument(string PATH)
    {
        FileInfo FILE = new FileInfo(PATH);

        if (FILE.Extension.ToLower() == ".doc" || FILE.Extension.ToLower() == ".docx" || FILE.Extension.ToLower() == ".docm" || FILE.Extension.ToLower() == ".dotx" || FILE.Extension.ToLower() == ".dotm")
        {
            if (FILE.Length == 0)
            {
                return;
            }

            object oMissing = System.Reflection.Missing.Value;
            Word.Application word = new Word.Application();

            try
            {
                word.Visible = false;
                word.ScreenUpdating = false;

                Object filename = (Object)FILE.FullName;
                Word.Document doc = word.Documents.Open(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                try
                {
                    doc.Activate();
                    object outputFileName = FILE.FullName.Replace(FILE.Extension, ".PDF");
                    doc.SaveAs(ref outputFileName, Word.WdSaveFormat.wdFormatPDF, ref oMissing, ref oMissing,
                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                               ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                }

                finally
                {
                    object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
                    ((Word._Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
                    doc = null;
                }
            }

            finally
            {
                ((Word._Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
                word = null;
            }

            File.Delete(PATH);
        }
}
  1. それは安全ですか?
  2. また、何人のユーザーを処理しますか?
  3. 必要なリソースは?
  4. Web サイトを実行するには、サーバーに MS Office をインストールする必要がありますか?
  5. それは実際にそれを行う良い方法ですか?
4

1 に答える 1

5

Microsoft からの答えはノーです。

Office が不安定な動作を示したり、/または、この環境で Office を実行するとデッドロックが発生します。

Officeのサーバーサイド自動化の考察から

経験から、私たちが遭遇した問題は次のとおりです。

  • プロセスが予期せず存在する場合、多くの Word インスタンスが残り、クリーンアップされません。
  • 処理セッションの途中でシャットダウンが発生した後、Word のインストールが破損した
  • 拡張性が著しく低い - Word は大規模なデスクトップ アプリケーションですが、優れた機能を備えています。ただし、それを使用しているプロセスを実際に意図したものではありません。そのため、その多くのインスタンスを開くと、アプリケーションが使用できるリソースを消費します。

ただし、この StackOverflow の質問と回答で説明されているように、これを行う方法は他にもあります。

Word 文書を事前に変換することを検討することもできます。たとえば、文書がアップロードされたときに PDF も作成することは可能ですか? そうすれば、サーバーは単に PDF ドキュメントを提供するだけで、要求を処理する作業はほとんど必要ありません。

于 2013-05-27T20:39:31.193 に答える