gpt4 book ai didi

c# - Microsoft.Office.Interop 用于网站(文件转换)是否安全?

转载 作者:行者123 更新时间:2023-12-02 05:02:47 26 4
gpt4 key购买 nike

我正在编写一个网站,用户必须添加报告(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);
}
}
  1. 这样安全吗?
  2. 它将处理多少用户?
  3. 它需要什么资源?
  4. 我应该在服务器上安装 MS Office 来运行网站吗?
  5. 这真的是一个好方法吗?

最佳答案

Microsoft 的答案是否定的:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com