OfficeがないサーバーでExcel=>PDFに変換したい
■仕様
asp.net / windows server2022(EC2) / IIS10.0
■やりたいこと
WebアプリでExcelをPDF変換したい
■経緯
無償のライブラリを探す=>全然ないしライセンス日本語でおk=>Officeを操作する無償ライブラリ「LibreOffice」の存在を認知=>サーバーにLibreOfficeインストールしてコマンド発行してExcelからPDFに変換すればいいんじゃね?
■結果
2日間、ハゲるくらい試行錯誤してやっとできた。同じ悩みの人にもサチアレ
■やったこと
1.windows server2022にLibreOfficeインストール
2..netコードにて指定ExcelをPDFに変換するコマンドを発行するよう実装
'LibreOfficeのインストールパス
Dim exePdf As String = "C:\Program Files\LibreOffice\program\soffice.exe" Dim pdfProcess = New Process()
pdfProcess.StartInfo.FileName = exePdf 'PDF変換コマンド記述 pdfProcess.StartInfo.Arguments = "-norestore -nofirststartwizard -headless -convert-to pdf ""C:\pdftest.xlsx""" 'ワーキングディレクトリ
pdfProcess.StartInfo.WorkingDirectory = "C:\tmp"
pdfProcess.StartInfo.RedirectStandardOutput = True
pdfProcess.StartInfo.UseShellExecute = False
pdfProcess.Start()
このまま実行しても何も起こらない。ずっとページの読み込み状態という感じ。
ディレクトリにDefaultAppPoolの権限を与えてもダメ。
ASPの偽装を試してもダメ。
これがわからずめちゃくちゃ悩んだ。2のコマンド実行するユーザーに権限がなければいけないらしい。
①管理者権限を持つアプリケーションプールの作成(すでにあれば不要)
「アプリケーションプール」クリック=>一覧を右クリック=>「アプリケーションプールの追加」
適当な名前つける
作ったアプリケーションプールを右クリック=>「詳細設定」
プロセスモデルタブのID項目の右端[...]をクリック
「カスタムアカウント」選択=>「設定」=>コマンドを実行する、管理者権限のあるユーザーを設定
②ワーカープロセスを管理者権限に変更したいサイトの設定
IISマネージャー開いて、「サイト」=>「Default Web Site」=>対象のサイト 右クリック=>「アプリケーションの管理」 => 「詳細設定」
アプリケーションプール項目の右端[...]をクリック
先ほど作成したアプリケーションプールを設定