關於C#操作PPT時遇到的“對COM組件的調用返回了錯誤HRESULT E_FAIL”錯誤的解決方法


最近在做一套和圖書有關的項目,其中有一個功能為用戶上傳的各類文檔(doc、docx、ppt、pptx、pdf等類型)統一轉換為PDF類型。word格式的轉為PDF就不用說了,推薦一個第三方DLL:Aspose.Words.dll.

Aspose這套DLL專門用來對付Office的,想必不少人都用過,很方便,例如word轉pdf:
using Aspose.Words;
Document doc = new Document(word文檔的服務端路徑,含文件名);
doc.Save(要保存的pdf路徑,含文件名, SaveFormat.Pdf);

搞定。


以上是題外話。


很可惜Aspose我沒找到操作ppt的dll。。。。。


以下用Office Tool自帶的類去寫:

using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

Presentation p = new ApplicationClass().Presentations.Open(strPPTFilePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
p.SaveAs(strPDFSavePath, PpSaveAsFileType.ppSaveAsPDF, MsoTriState.msoTrue);

ps:這里需要在服務端安裝MS的SaveAsPDFandXPS.exe插件。


運行到SaveAs時出現經典問題:對 COM 組件的調用返回了錯誤HRESULT E_FAIL。


百度了一下這個錯誤,深有感慨:天下文章一般抄啊。。。。。


按照網上流行的處理方法試了一下,包括開啟DTC以及修改DTC屬性之類的方法,依然不起作用,搞了一下午,頭都大了。。。


第二天早上,突然心血來潮,打開PPT,選項--另存為--PDF,發現PowerPoint報了個錯誤:

“無法找到打印機 Microsoft XPS Document Writer”。

再打開Word,另存為PDF,沒有此類錯誤。。。於是很奇怪。。。。。


奇怪歸奇怪,馬上打開Print Spooler服務。。。


NND,存上了。。俺這個雞凍啊。。。。。。


總結:MS真操蛋。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM