サクッとできたらいいなということで。
ポイントはこんなとこ。
- ファイルの拡張子をdocxからpdfに変更したパスを作る
- WordのCOMオブジェクトを取得する
- WordのCOMオブジェクトを使ってWord文章のファイルの読み込む
- ExportAsFixedFormat()でPDF形式でファイルを出力する
んで、スクリプトの内容はこんな感じ。
# 読み取るWordの情報を変数に設定する $source = "C:\Users\tetsuyanbo\Desktop\Sample.docx" $extension = ".pdf" $application = $null # # ここからWordをPDFに変換する処理 # try { # 拡張子をdocxからpdfに変更する $target = [System.IO.Path]::ChangeExtension($source, $extension) # ファイルがある場合は削除する # ※ファイルを開いている場合は例外が投げられてエラー終了するのは後回しに... $exist = Test-Path $target if($exist -eq $true) { Write-Host $target は更新したいので削除したわ Remove-Item $target } # WordのCOMオブジェクトを取得する $application = New-Object -ComObject Word.Application # Wordの動作を設定する $application.Visible = $false # Wordでドキュメントを開く # ※ドキュメントを閉じる処理はfinallyで実行する $documents = $application.Documents $document = $application.Documents.Open($source) # WordをPDFに変換する $document.ExportAsFixedFormat($target, [Microsoft.Office.Interop.Word.WdExportFormat]::wdExportFormatPDF) Write-Host $source を $target に変換したわ } catch { # エラーメッセージを表示する Write-Error("Error"+$_.Exception) } finally { # COMオブジェクトを開放する # ※ReleaseComObjectは戻り値0を返してくるんだけど # コンソールに0が表示されるので変数で受け取って表示しないようにする if($document -ne $null) { $document.Close() $result = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($document) } if($documents -ne $null) { $result = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($documents) } if($application -ne $null) { # Wordを閉じる $application.Quit() $result = [System.Runtime.InteropServices.Marshal]::ReleaseComObject($application) } } # 実行はおしまい Write-Host "PowerShellの実行はおしまい"
んで、サンプルデータとしてこんなWordのファイルを用意しといた。
スクリプトを実行するときはこんな感じ。
powershell -ExecutionPolicy Bypass -File Proto.ps1
んで、実行してみるとこんな感じのメッセージが表示されて…
C:\Users\tetsuyanbo\Desktop\Sample.docx を C:\Users\tetsuyanbo\Desktop\Sample.pdf に変換したわ PowerShellの実行はおしまい
ファイルはちゃんとできとる。
PDFのファイルができとるので開いてみるとこんな感じ。
ちなみに、すでにファイルがあった場合でも一応動いてるっぽ。
C:\Users\tetsuyanbo\Desktop\Sample.pdf は更新したいので削除したわ C:\Users\tetsuyanbo\Desktop\Sample.docx を C:\Users\tetsuyanbo\Desktop\Sample.pdf に変換したわ PowerShellの実行はおしまい
そんなこんなで、明日への自分へのメモってことで。