需求:
項目中需要實現PPT轉Image的功能,之前項目中用的是使用Office COM組件實現的功能,通過.NET與Office COM組件的互操作(Interop)來操作Office文檔
但是在生產環境中經常發生錯誤 "檢索 COM 類工廠中 CLSID 為 {91493441-5A91-11CF-8700-00AA0060263B} 的組件失敗,原因是出現以下錯誤: 8000401a 因為配置標識不正確,系統無法開始服務器進程。請檢查用戶名和密碼。 (異常來自 HRESULT:0x8000401A)。",很是郁悶,在網上找了很多資料也沒能完美的解決,然后就換了一種解決方案將PPT 轉換成PDF 然后在將PDF 轉換成Image。
最后是使用 Ghostscript.Net 這個開源組件,來重寫這個功能模塊。
第一步:
下載 Ghostscript AGPL Release 32bit安裝到本地
第二步:
有兩種使用方案:
1、使用本地安裝的【服務器上需要安裝上述程序】
2、找到dll拷貝到項目中,在項目中應用【不許安裝,只需拷貝dll到bin下】
示例代碼C#:
1 static void Main(string[] args) 2 { 3 int desired_x_dpi = 96; 4 int desired_y_dpi = 96; 5 string inputPdfPath = ""; 6 string outputPath = ""; 7 8 //本地安裝版本代碼 9 //var _lastInstalledVersion = 10 // GhostscriptVersionInfo.GetLastInstalledVersion( 11 // GhostscriptLicense.GPL | GhostscriptLicense.AFPL, 12 // GhostscriptLicense.GPL); 13 14 //拷貝到項目版本 15 var _lastInstalledVersion = new GhostscriptVersionInfo($"{System.Environment.CurrentDirectory}\\gsdll32.dll"); 16 17 var _rasterizer = new GhostscriptRasterizer(); 18 19 _rasterizer.Open(inputPdfPath, _lastInstalledVersion, false); 20 21 for (int pageNumber = 1; pageNumber <= _rasterizer.PageCount; pageNumber++) 22 { 23 string pageFilePath = Path.Combine(outputPath, "Page-" + pageNumber.ToString() + ".Jpeg"); 24 Image img = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber); 25 img.Save(pageFilePath, ImageFormat.Jpeg); 26 27 Console.WriteLine(pageFilePath); 28 } 29 }