[Windows PowerShell] PowerPoint プレゼンテーションを XPS, PDF に保存する
前の2つの投稿で、PowerPoint の資料を PDF と XPS 形式で公開しています。これらのファイル形式には PowerPoint 2007 では、[Office ボタン] - [名前を付けて保存] - [PDF または XPS] メニューで簡単に保存できます。
手順はとても簡単なのですが、同じことを何度か手作業で行うと、これは自動化できないんだろうかと思ってしまいます。自動化スクリプトを作るのに何時間かかかるので、時間的には元が取れないと分かっているのですが。というわけで、つい作ってしまいましたのでご紹介します。
スクリプトの内容としては、パラメーターとして元のファイル名 (filename.pptx など) を取り、filename.pdf と filename.xps を生成することにします。まず、パラメーターを受け取ります。
param([string]$pptx)
$ppfile = dir $pptx
次に PowerPoint の COM オブジェクトを作成し、Visible フラグをセットし、ファイルを読み込みます。
$ppapp = new-object -com powerpoint.application
$ppapp.visible =
[Microsoft.Office.Core.MsoTriState]::MsoTrue
$ppdoc = $ppapp.Presentations.Open($ppfile.fullname)
なお、PowerPoint のオブジェクトモデルについては MSDN をご参照ください。
PowerPoint Object Model Reference (英語)
http://msdn.microsoft.com/en-us/library/bb265987.aspx
次に「名前を付けて保存」を行います。
$pptypepdf = [Microsoft.Office.Interop.PowerPoint.
PpSaveAsFileType]::PpSaveAsPDF
$pptypexps = [Microsoft.Office.Interop.PowerPoint.
PpSaveAsFileType]::PpSaveAsXPS
$filenamepdf =
[IO.Path]::ChangeExtension($ppfile.FullName, ".pdf")
$filenamexps =
[IO.Path]::ChangeExtension($ppfile.FullName, ".xps")
$ppdoc.SaveAs($filenamepdf, $pptypepdf)
$ppdoc.SaveAs($filenamexps, $pptypexps)
保存先のファイル名は、System.Io.Path の ChangeExtensioin メソッドで生成しています。Presentation.SaveAs メソッドは、さまざまなファイル形式に対応する汎用的なメソッドですが、特に PDF と XPS の出力については、Presentation.ExportAsFixedFormat メソッドがあり、詳細な出力オプションが指定できます。
出力後は、終了処理を行います。
$ppdoc.close()
$ppapp.quit()
できればアップロードして、ブログに埋め込むリンク HTML まで取得したかったのですが、SkyDrive の API は公開されていないため、今回のスクリプトはここまでとします。
また、CodePlex で公開されている PowerShell Eventing と組み合わせることで、あるフォルダーに ppt, pptx ファイルをコピーするだけで、自動的に pdf, xps を生成するような仕組みをつくることもできそうです。