過去在執行專案的時候,客戶提了一個需求,需要把資料匯出成 WORD 和 PDF 檔案,由於要處理的畫面不少,又不想要針對 WORD、PDF 檔案各別花費不等的時間逐一處理,最終找到了 WORD 轉 PDF 的方案。
只需要處理好 WORD 資料的匯出,然後再透過 LiberOffice 協助將 WORD 轉換成 PDF,就可以滿足大致上的需求。
- 安裝 LiberOffice
由於要使用 Liber Office 來協助轉檔,所以安裝 Liber Office 是必須的。 - LiberOffice SDK
由於我是使用 ProsessStartInfo 的方式呼叫 soffice.exe 來協助做轉檔,所以應該就不需要把 SDK 的檔案複製到專案底下。 - 執行轉檔
我是使用呼叫外部程式的方式來執行,大致上的方法如下ProcessStartInfo procStartInfo = new ProcessStartInfo(libreOfficePath, $"--convert-to pdf --outdir {outPutPath} --nologo {officePath}"); procStartInfo.RedirectStandardOutput = true; procStartInfo.UseShellExecute = false; procStartInfo.CreateNoWindow = true; procStartInfo.WorkingDirectory = Environment.CurrentDirectory; Process process = new Process() { StartInfo = procStartInfo, }; process.Start(); process.WaitForExit();
- IIS設定
使用上述的方式呼叫外部程式轉檔,在開發環境上測試沒有問題,但是將程式佈署到 IIS 上後,就會發現網頁沒有回應,如果觀看工作管理員,就會發現到 soffice.exe 持續在執行,沒有任何停下來的跡象。
會有這樣的狀況可能是權限的問題,目前我的處理方式是調整應用程式集區,將識別設定為 LocalSystem 後,就可以呼叫 LiberOffice 轉換成 PDF 了。
- 本機系統:完全受信任的帳戶,擁有更高的權限,也有 存取網路資源。
- 網路服務:限制的網站 或 受限制的服務帳戶通常用來執行 標準 、 最低權限的服務。此帳戶具有較少的權限比本機系統帳戶。此帳戶具有存取網路資源。
- 本機服務:限制或有限的服務帳戶是與網路服務非常類似,也提供給執行 標準 、 最低權限的服務。這個帳戶沒有存取網路資源。
- ApplicationPoolIdentity:,當您建立新的應用程式集區時,IIS 會建立新的應用程式集區名稱,並執行應用程式集區背景工作處理序,在 [這個帳戶] 下的虛擬帳戶。這也是最低權限帳戶。
- 自訂帳戶:除了這些內建的帳戶,您也可以使用自訂的帳戶藉由指定使用者名稱和密碼。
使用「本機系統」這樣的方式看來頗危險,但是目前嘗試使用網路服務、本機服務來試試看,並且把 OpenOffice 資料夾的權限設定這兩個帳號可以完全存取,但是這樣的測試之下還是會發生 soffice.exe 持續執行的狀況,所以目前就只能先這樣子吧,等到以後有空來試試看別種方式。
0 意見:
張貼留言