使用以编程方式生成的Word doc将默认文件类型从RTF更改为.DOC以用于另存为功能

时间:2015-03-13 17:42:33

标签: c# asp.net

我有一个asp.net页面,用户可以在其中下载MS Word文档。在服务器端,逻辑读取.RTF,并将其文件扩展名更改为.DOC,如下所示。问题是,当默认文件类型仍为.RTF时,用户在Word处理器菜单上单击“另存为”。

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,这是此帖的问题。

这是我开始处理的遗留代码。

1 个答案:

答案 0 :(得分:0)

只需更改文件扩展名,就无法在不同的文档格式之间进行转换。

用户仍然可以打开格式错误的文件,因为Microsoft Word也支持打开RTF文件。

转换文件的正确方法是使用Microsoft Office Interop Assemblies:

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);

这会将文档保存为指定位置的doc。您可以读取此文件的内容并将字节返回到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();