我正在编写一个网站,用户必须添加报告(Word 文档)并可以查看它们,我将 *.doc 转换为 *.pdf,然后通过 pdf.js 显示它们。为了进行转换,我使用 Microsoft.Office.Interop.Word。代码看起来像
public void ConvertDocument(string PATH)
{
FileInfo FILE = new FileInfo(PATH);
if (FILE.Extension.ToLower() == ".doc" || FILE.Extension.ToLower() == ".docx" || FILE.Extension.ToLower() == ".docm" || FILE.Extension.ToLower() == ".dotx" || FILE.Extension.ToLower() == ".dotm")
{
if (FILE.Length == 0)
{
return;
}
object oMissing = System.Reflection.Missing.Value;
Word.Application word = new Word.Application();
try
{
word.Visible = false;
word.ScreenUpdating = false;
Object filename = (Object)FILE.FullName;
Word.Document doc = word.Documents.Open(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
try
{
doc.Activate();
object outputFileName = FILE.FullName.Replace(FILE.Extension, ".PDF");
doc.SaveAs(ref outputFileName, Word.WdSaveFormat.wdFormatPDF, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing);
}
finally
{
object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
((Word._Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
doc = null;
}
}
finally
{
((Word._Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
word = null;
}
File.Delete(PATH);
}
}
- 这样安全吗?
- 它将处理多少用户?
- 需要什么资源?
- 我应该在服务器上安装 MS Office 才能运行该网站吗?
- 这实际上是一个好方法吗?
最佳答案
微软的答案是否定的:
Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.
来自Considerations for Server-Side Automation of Office
根据经验,以下是我们遇到的问题:
- 当进程意外存在时,大量 Word 实例会残留下来,并且永远不会被清理
- 处理 session 中途关闭后,Word 安装已损坏
- 它的扩展性不是很好 - Word 是一个大型桌面应用程序,但它的功能非常出色;但是,它并不真正适用于您正在使用它的进程,因此,打开它的大量实例将消耗您的应用程序可以使用的资源。
但是,还有其他方法可以做到这一点,如 this StackOverflow question and answers 中所述。
您可以考虑预先转换word文档 - 例如,是否可以在上传文档时同时创建PDF?这样,您的服务器只需提供 PDF 文档,并且在处理请求时只需做很少的工作。
关于c# - Microsoft.Office.Interop 用于网站(文件转换)是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16780179/