2015-03-13 55 views
-1

我有一個asp.net頁面,用戶可以在其中下載MS Word文檔。在服務器端,邏輯讀取.RTF,並將其文件擴展名更改爲.DOC,如下所示。問題是當默認文件類型仍然是.RTF時,當用戶在Word處理器菜單上單擊SAVE另存爲。使用編程生成的Word文檔將默認文件類型從RTF更改爲.DOC另存爲功能

string sb = GetWordTemplate("/My.rtf"); 
//logic to replace place holder with text 
Response.ContentType="application/msword"; 
Response.AppendHeader("Content-disposition", 
      string.Format("attachment;filename={0}.doc", name); 
Byte[] bytes = Encoding.Default.GetBytes(sb); 
Response.BinaryWrite(bytes); 
Response.End(); 

有什麼想法嗎?

更新

任何第三方工具來修改RTF文件,它只是替換佔位符文本。

RTF文件實際上是.TXT文件,但更改爲具有.RTF文件擴展名。

下載的.DOC可以打開並保存成功。但是當使用另存爲時,它的默認文件類型仍然是.RTF,這是這篇文章的問題。

這是我開始研究的遺留代碼。

+0

你用什麼庫來修改rtf文件? – 2015-03-13 17:44:31

+1

RTF和DOC是完全不同的格式 - 一個是文本,另一個是二進制。你*不能*只是通過改變擴展名將其轉換爲另一個。無論如何,「DOC」已被棄用。如果你想創建一個真正的Word文檔,我建議你使用Open XML SDK創建一個'docx'文件。 – 2015-03-13 17:44:51

+0

請在上面找到我的更新。 – Pingpong 2015-03-13 21:12:20

回答

0

只需更改文件擴展名,就不能在不同的文檔格式之間進行轉換。

用戶仍然能夠打開格式錯誤的文件,因爲Microsoft Word也支持打開RTF文件。

轉換文件的正確方法是通過使用Microsoft Office互操作程序集:

var wordApp = new Microsoft.Office.Interop.Word.Application(); 
var currentDoc = wordApp.Documents.Open(@"C:\yourdocument.rtf"); 
currentDoc.SaveAs(@"C:\yourdocument.doc", Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument97); 

這將文檔作爲文檔保存在指定的位置。你可以閱讀這個文件的內容,並返回字節到Web瀏覽器,如下所示:

Byte[] bytes = File.ReadAllBytes("C:\yourdocument.doc"); 
Response.ContentType="application/msword"; 
Response.AppendHeader("Content-disposition", 
      string.Format("attachment;filename={0}.doc", name); 
Response.BinaryWrite(bytes); 
Response.End(); 
+0

有沒有辦法避免在下載前保存它?使用Microsoft Office Interop程序集是否需要安裝MS Word/Office或僅複製DLL程序集? – Pingpong 2015-03-13 22:03:48

+0

據我所知,爲了使用互操作程序集,您必須安裝Microsoft Office。 – 2015-03-14 17:04:05

+0

安裝MS Office可能不是最佳選擇。 – Pingpong 2015-03-16 00:09:10

相關問題