2009-08-20 67 views
1

我正在研究一種產生MS Word輸出的產品,方法是生成一個HTML文檔,並在其中嵌入Word CSS和XML魔術的相應位。我現在需要在文檔中嵌入RTF(圖像和樣式文本),因此我正在查看.NET中的多部分HTML生成功能。.NET中的多部分HTML和嵌入式圖像無需磁盤訪問?

我想通過將RTF片段轉換爲內存中的圖像來生成MHTML文檔,然後將Base64編碼的數據直接嵌入到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輸出。我更喜歡創建原生Word輸出,原因很多,而不僅僅是因爲我還需要生成HTML輸出。 Word可以正確處理MHTML文件,這爲使用嵌入式圖像輸出提供了一個很好的單文件解決方案。 所以,我想動態生成MHTML到流,使用API​​調用(不是文件)來構造輸入。 – 2009-08-26 18:14:20

+0

感謝您的信息。我們從人想在System.Net.Mail MHTML支持有很多的反饋,遺憾的是它沒有被添加了.NET 4.0,但是它的功能爲System.Net.Mail未來版本的名單上相當高。我會把你的情景信息給我們的PM。 – 2009-08-26 21:12:52

+0

更新:我們的團隊正式跟蹤這個未來開發的請求,所以這可能會在System.Net.Mail中以某種方式支持未來。查看NCL博客(blogs.msdn.com/ncl)以獲取有關此功能和其他新功能的更新。 – 2009-08-28 20:52:45

0

.NET中的Base64編碼支持不是很快,而System.Net.Mail不是通用的。我用CHilkat S/MIME結束了,它工作得很好。

+0

其實System.Net.Mail使用自己的base64編碼,根據我們的性能測試,它的速度非常快。這也是相當普遍的目的,但我承認它有一些缺點。 – 2009-08-26 21:11:07

+0

Jeff,我只是仔細檢查了Convert.ToBase64String的實現,看起來你是正確的:它正確地展開了內部循環,所以它應該很快。奇怪的是,我記得查看了一個本地.NET Base64轉換方法,但沒有做到這一點,但我不知道在哪裏。這是早期的Altzheimers嗎?或者你能想到它可能在哪裏? – 2009-08-26 23:53:05