複数のPowerPointのファイルたちをInteropを使って1つのPDFに6スライド表示で出力する

とある用事があって、60個近くある.pptxをすべて1枚あたりに6スライドある表示(配布資料表示)ですべて1つのPDFにするということが必要になったわけですが、61個のpptxをすべて手作業でpdfにするのはプログラマーとしてあるまじき行為(三村親方談)なので自動化を試みました。

結果、OfficeInteropを使って自動化に成功しました。

やりかた

まずはMicrosoft Print to PDF仮想プリンタをデフォルトに設定します。

次に適当なC#のプロジェクトを作り、参照マネージャからCOM >[Microsoft Excel 16.0 Object Library]と

アセンブリ>拡張>[Microsoft.Office.Interop.Powerpoint]の2つを追加します。

あとは以下のコードを走らせるだけ

var pptxDir = @"{ your pptx directory here! }";
var files = Directory.GetFiles(pptxDir,"*.pptx");

foreach (var file in files)
{
    Debug.WriteLine(file);
    var pdfName = file.Replace(".pptx", ".pdf");
    var pptApp = new Microsoft.Office.Interop.PowerPoint.Application();
    var presentation = pptApp.Presentations.Open(file, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);
    presentation.PrintOptions.HandoutOrder = Microsoft.Office.Interop.PowerPoint.PpPrintHandoutOrder.ppPrintHandoutHorizontalFirst;
    presentation.PrintOptions.OutputType = Microsoft.Office.Interop.PowerPoint.PpPrintOutputType.ppPrintOutputSixSlideHandouts;
    presentation.PrintOut(-1, -1, pdfName);
}

プログラムを走らせると、プログラム自体はすぐに終了しますが仮想プリンタのキューに大量に印刷命令を送信することで、徐々に大量のPDFが作成されるはずです。

あとは作成された1ページ6スライドのPDFをTHE PFF TOOLKITなど(https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)を使って1つのpdfに結合すればOKです。

1ページ4スライドとかにしたい場合はOutpuTypeのプロパティとかをテキトーにいじってください。

感想

楽しかった

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください