4

1つのdocxファイルを開き、Microsoft.Office.Interop.Wordパッケージを使用してasp.netでpdfファイルに変換したいと思います。

これは、aspボタンクリックイベントで記述された私のコードです。

object fileFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
                        Object missing = Type.Missing;
                        object saveName = strURL.Replace(".docx", ".pdf");
                        object openName = docPath + "\\T4.docx";

                    Microsoft.Office.Interop.Word.Application wdApp = new Microsoft.Office.Interop.Word.Application();
                    Microsoft.Office.Interop.Word.Document doc = wdApp.Documents.Open(openName,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
doc.SaveAs(saveName,fileFormat,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
 doc.Close(ref missing, ref missing, ref missing);

ただし、実行時にwdApp.Documents.Open()行で問題が発生します。

ブラウザの記号は常に読み込まれているようです。

このエラーの原因はわかりません。

4

2 に答える 2

2

Microsoftは、サーバー環境でのOfficeアプリケーションの自動化をサポートしていません。このKB記事では、試してみると発生する可能性のある問題のいくつかについて説明しています。

Asposeなどのサードパーティコンポーネントを探すことをお勧めします。

于 2012-11-22T20:04:27.803 に答える
2

これは、Wordがユーザーにダイアログを表示しようとしているときに発生する可能性があります。相互運用機能は、これらすべてのダイアログを抑制するほど賢くはありません。次のことを試してください。

1)サーバーにログインし、MSWordを手動で開きます。ユーザーの確認が必要なダイアログがある場合があります(Wordを初めて実行したときに表示されるライセンスダイアログなど)。これらのダイアログを手動で通過すると、相互運用の問題はなくなります。(また、それらのドキュメントの1つを開いてみてください。おそらく問題はドキュメント自体にあります。)

2)コードでできるだけ多くのダイアログを抑制します。私はそのような2つの場所(DisplayAlertsとNoEncodingDialog)を知っています。

var word = new Word.Application();
word.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;

Word.Documents documents = word.Documents;
documents.Open(openName, NoEncodingDialog: true);

補足ですが、非常に重要です。メモリリークを回避するには、これらのCOMオブジェクトを参照および破棄する方法に十分注意する必要があります。この回答のアドバイスに従ってください。そうすれば、ASP.NETとの相互運用を正常に使用できる可能性があります。(何年もの間、私はあなたがやろうとしていることを正確に実行しているサーバーを持っていました-Wordの相互運用機能を使用して.docxを.pdfに変換します-そしてそれは重い負荷の下でも素晴らしく機能しますが、それは私がすべてを適切に処分するからですCOMオブジェクトリファレンス。)

于 2012-11-29T18:07:17.730 に答える