我有一个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,这是此帖的问题。
这是我开始处理的遗留代码。
答案 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();