Welcome to TechNet Blogs Sign in | Join | Help

Shigeya Tanabe's blog

田辺茂也 (IT Pro エバンジェリスト)

News

  • 連絡先


    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。

    お知らせ

    ブックマーク


    Clicky

[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.PathChangeExtensioin メソッドで生成しています。Presentation.SaveAs メソッドは、さまざまなファイル形式に対応する汎用的なメソッドですが、特に PDF と XPS の出力については、Presentation.ExportAsFixedFormat メソッドがあり、詳細な出力オプションが指定できます。

出力後は、終了処理を行います。

$ppdoc.close()
$ppapp.quit()

できればアップロードして、ブログに埋め込むリンク HTML まで取得したかったのですが、SkyDrive の API は公開されていないため、今回のスクリプトはここまでとします。

また、CodePlex で公開されている PowerShell Eventing と組み合わせることで、あるフォルダーに ppt, pptx ファイルをコピーするだけで、自動的に pdf, xps を生成するような仕組みをつくることもできそうです。

Posted: Wednesday, December 10, 2008 3:02 PM by Shigeya Tanabe

Comments

No Comments

Anonymous comments are disabled
Page view tracker