PowerShellメモ Wordの文書をPDFファイルに変換してみる

PowerShell

サクッとできたらいいなということで。
ポイントはこんなとこ。

  • ファイルの拡張子を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の実行はおしまい

そんなこんなで、明日への自分へのメモってことで。

PowerShellConvertWordToPdf