2

我有一个 asp.net 应用程序,它使用 Microsoft.Office.Interop.Word.ApplicationClass 将上传的 ms doc 转换为 pdf。它在我的本地机器上工作正常,但它在部署的 IIS 服务器上不起作用。是否有任何可执行权限是需要得到输出。

错误是:检索具有 CLSID {000209FF-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80070005。

我的代码如下:

public class Word2Pdf
{
    private Microsoft.Office.Interop.Word.ApplicationClass MSWordDoc;
    object UnknownType = Type.Missing;
    public string Word2PdfCOnversion(object InputLocation, object OutputLocation)
    {
        string result;
        try
        {
            //if (MSWordDoc == null) 
            MSWordDoc = new Microsoft.Office.Interop.Word.ApplicationClass();
            MSWordDoc.Visible = false;
            MSWordDoc.Documents.Open(ref InputLocation,    //Input File Name Location
                ref UnknownType,    // Conversion Conformation
                ref UnknownType,    // Set ReadOnly Property
                ref UnknownType,    // Add to the Recent Files
                ref UnknownType,    // Document Password Setting
                ref UnknownType,    // Password Templete
                ref UnknownType,    // Revert
                ref UnknownType,    // Write Password to Document
                ref UnknownType,    // Write Password Template
                ref UnknownType,    // File Format
                ref UnknownType,    // Encoding File
                ref UnknownType,    // Visibility
                ref UnknownType,    // To Open or Repair
                ref UnknownType,    // Document Direction
                ref UnknownType,    // Encoding Dialog
                ref UnknownType);   // XML Text Transform
            MSWordDoc.Application.Visible = false;  // To Invisible the Word Document
            MSWordDoc.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;    // Minimize the Opened Word File.
            object SavePDFFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
            MSWordDoc.ActiveDocument.SaveAs(ref OutputLocation, //Output File Location
            ref SavePDFFormat,    // File Format
            ref UnknownType,    // Comment to PDF File
            ref UnknownType,    // Password
            ref UnknownType,    // Add to Recent File
            ref UnknownType,    // Write Password
            ref UnknownType,    // ReadOnly Propert
            ref UnknownType,    // Original Font Embeding
            ref UnknownType,    // Save Picture
            ref UnknownType,    // Saving Form Datas
            ref UnknownType,    // Save as AOVE Letter
            ref UnknownType,    // Encoding
            ref UnknownType,    // Inserting Line Breakes
            ref UnknownType,    // Allow Substitution
            ref UnknownType,    // Line Ending
            ref UnknownType);   // Add BiDi Marks
            result = "Success";
        }
        catch (Exception)
        {
            result = "Error";
        }
        finally
        {
            if (MSWordDoc == null) { }
            else { MSWordDoc.Documents.Close(ref UnknownType, ref UnknownType, ref UnknownType); }
            MSWordDoc.Quit(ref UnknownType, ref UnknownType, ref UnknownType);
        }
        return result;
    }
}
4

1 回答 1

0

您需要为要使用的 COM 组件设置权限。在服务器上,运行该dcomcnfg实用程序。

在“Component Services\Computers\My Computer\DCOM Config”下,找到您需要的单词 components 的 CLSID。(有帮助的是,我看到一些机器将它们列为 guid {000209FF-0000-0000-C000-000000000046},而其他机器则通过名称列出了办公组件)。

您需要右键单击 CLSID 并选择属性,更改“启动和激活权限”、“访问权限”和“身份”设置,以允许网站应用程序池帐户具有自动化 Word 的必要权限。

顺便说一句,您可能需要比您提到的更多的 CLSID。当我从事一个使用 word 将 doc 和/或 html 转换为 PDF 的项目时,我们必须添加 Word 的 CLSID 和几种 Word 图片类型。

从记忆中,CLSID 是:
{000209FF-0000-0000-C000-000000000046}
{000209FF-0000-0000-C000-0000000000FE}
{000209FF-0000-0000-C000-0000000000FF}

希望这应该为您指明正确的方向。

于 2012-12-20T09:04:31.447 回答