2012-12-19 47 views
2

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

错误是: 具有CLSID检索COM类工厂部件{000209FF-0000-0000-C000-000000000046}失败,原因是以下错误: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; 
    } 
} 
+0

您正在使用的Com Compenent是否在服务器上注册? – Deepesh

+0

如果您使用的是最新版本的.Net,则不需要所有'参考UnknownType'参数。 .Net 3.5和更高版本允许这些参数是可选的,如果省略默认为'Type.Missing'。可以使代码更短,更容易扫描... YMMV – Grhm

回答

0

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

在“组件服务\计算机\我的电脑\ DCOM配置”下找到您所需的单词组件的CLSID。 (有帮助的是,我看到一些机器将它们列为GUID,即{000209FF-0000-0000-C000-000000000046},其他机器通过名称列出了办公组件。

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

顺便提一下,您可能需要比您提到的更多的CLSID。当我使用单词处理将doc和/或html转换为PDF的项目时,我们必须添加Word的CLSID以及多个Word图片类型。

从内存中CLSID的是:
{000209FF-0000-0000-C000-000000000046}
{000209FF-0000-0000-C000-0000000000FE}
{000209FF-0000-0000-C000-0000000000FF}

希望这应该指向你在正确的方向。