2012-12-19 75 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}

希望這應該指向你在正確的方向。