2009-08-20 8 views
1

私は、適切なビットのWord CSSとXMLマジックが埋め込まれたHTMLドキュメントを生成してMS Word出力を作成する製品に取り組んでいます。 RTF(イメージとスタイル付きテキスト)をドキュメントに埋め込む必要があり、.NETで複数のHTML生成機能を見ています。ディスクアクセスなしで.NETのマルチパートHTMLおよび埋め込み画像?

RTFスニペットをメモリ内のイメージに変換し、Base64でエンコードされたデータを直接MHTMLオブジェクトに埋め込むことで、MHTMLドキュメントを生成したいと考えています。これまでは、.NETソリューションを見つけることができませんでした。

MS CDO stuffは有望ですが、添付ファイルを作成する唯一の方法は、データにURLを入力してAddRelatedBodyPart()をオブジェクトに追加することです。

System.Net.Mailパッケージも(hereを文書化し、前の質問hereのように)魅力的に見えますが、私は文字列に生成されたメールオブジェクトを変換する簡単な方法が表示されない - APIがいるようですファイルを生成せずにメールメッセージを送信することに焦点を当てる。

今、CDOと一時ディレクトリを使用するアプローチを進めていますが、長期的なアプローチとしては不満です。より良い提案はありますか?

答えて

1

System.Net.Mailが出力をユーザーが定義した何らかの種類のストリームに送信する機能は要求されていませんでしたが、これについてはすでに説明しました。あなたのシナリオに関する詳細を教えてもらえますか?私は人々がこの機能を追加する正当性の観点からこれをどのように使用しているのか知りたい。

メッセージを送信する前に、反射を使用してFileStreamからの出力ストリームを他のストリームにリダイレクトすることができたと思います。 System.Net.Mailのコードの大部分はStreamオブジェクトの周りのデコレータを使用しているため、可能性は高いと思われますが、リフレクションがわからないので、これを行う方法についての良いコードスニペットを与えることはできません。また、System.Net.Mailは独自のBase64エンコーダを使用しているため、高速です。私は.Net 4.0のためにいくつかのものを微調整しました。それで、あなたはおそらくそれが目立つとは思えませんが、おそらくより良いパフォーマンスを得るでしょう。

+0

背景:デスクトップアプリケーションからWord(とすぐにExcel)出力を生成する必要があります。 MS Officeは、HTML + XML + CSSをファイル形式として非常にサポートしています。つまり、細心の注意を払ったHTML文書を作成できれば、Word出力を生成できます。私は、HTML出力を生成する必要があるため、多くの理由でネイティブWord出力を作成することを好みます。 WordはMHTMLファイルを適切に処理します。埋め込まれた画像を出力するための素晴らしい単一ファイル解決策になります。 私はストリームにMHTMLを動的に生成し、入力を構成するAPI呼び出し(ファイルではない)を使用したいと思います。 –

+0

情報ありがとうございます。 System.Net.MailのMHTMLサポートを望んでいる人から多くのフィードバックがありました。残念ながら.Net 4.0では追加されていませんが、System.Net.Mailの今後のリリースでは機能のリストでかなり高いです。あなたのシナリオ情報をPMにお知らせします。 –

+0

更新:私たちのチームは正式に将来の開発のためにこのリクエストを追跡しているので、これはSystem.Net.Mailの将来のために何らかの形でサポートされるようになるでしょう。この機能やその他の新機能については、NCLのブログ(blogs.msdn.com/ncl)を参照してください。 –

0

.NETのBase64エンコーディングサポートはあまり高速ではなく、System.Net.Mailは一般目的ではありません。私はCHilkat S/MIMEを使って巻いて、うまくいきました。

+0

実際、System.Net.Mailは独自のbase64エンコーディングを使用しており、私たちのperfテストでは十分に高速です。それはまたかなり一般的な目的ですが、私はそれの周りにいくつかの欠点があることを認めます。 –

+0

Jeff、Convert.ToBase64Stringの実装を二重チェックしたところ、正しいと思われます。つまり、内部ループが正しく展開されるため、高速になるはずです。奇妙なことは、これをやっていないネイティブの.NET Base64変換方法を見て覚えていますが、どこにわからないのですか。この早期発症アルツハイマー病ですか?それとも、どこであろうと思いますか? –

関連する問題