SharePoint の PowerPoint Automation Services

Microsoft PowerPoint Automation Services を使用して、サーバー側でさまざまなファイル形式の間でプレゼンテーション変換を行う方法について説明します。

概要

企業の規模を問わず、多くの企業では、Microsoft SharePoint Server ライブラリを Microsoft PowerPoint プレゼンテーションのリポジトリとして使用しています。 プレゼンテーションの保存、配布、更新に関するニーズは企業によってそれぞれ異なります。 Microsoft PowerPoint Automation Services は、企業がプレゼンテーションを管理するうえで役立つ Microsoft SharePoint の新機能です。 これは、サーバー側で自動的にプレゼンテーションを別の形式に変換する共有サービスです。 当初より、このサービスはサーバーで機能するように設計されており、信頼できる予測可能な方法で多数のプレゼンテーション ファイルを処理することができます。

PowerPoint Automation Services を使用して PowerPoint バイナリ ファイル形式 (.ppt) および PowerPoint Open XML ファイル形式 (.pptx) から他の形式に変換できます。 たとえば、PowerPoint 97-2003 ファイルのバッチを Open XML のプレゼンテーション ファイルにアップグレードが必要な場合があります。 また、[ 編集] メニューでカスタム アクションを作成して、ユーザーがオン デマンドでプレゼンテーションの PDF 版を作成できるようにする場合もあります。

注:

PowerPoint Automation Services は SharePoint の機能を利用しており、その主な特徴となっています。 PowerPoint Automation Services を使用するには、SharePoint をインストールしておく必要があります。 サーバー ファームで SharePoint を使用している場合は、PowerPoint Automation Services を明示的に有効にする必要があります。

PowerPoint Automation Services のシナリオ

次のシナリオでは、PowerPoint Automation Services を使用してサーバー上でプレゼンテーションを自動処理する方法をいくつか説明します。

  • ある大企業は、すべての年間収益のプレゼンテーションを企業のイントラネット サイト上の単一のドキュメント ライブラリに保存しています。 このライブラリには、長年にわたって蓄積された多くのプレゼンテーションが含まれています。 IT 部門では、PowerPoint 97-2003 のバイナリ ファイル形式 (.ppt) のプレゼンテーション ファイルをすべて Open XML のプレゼンテーション ファイル形式に (.pptx) アップグレードすることを望んでいます。 変換を行う開発者は、ライブラリ内の各ファイルに対して反復処理を行い、ファイルが .ppt 形式であることを確認し、各 .ppt ファイルを .pptx ファイル形式に変換するソリューションをサーバーに展開することを決定します。

  • 地域の営業部は、各顧客に対してカスタム サービスの見積もりを提供します。 各営業担当者は、対面またはオンラインの会議で顧客に見積もりを伝えます。 会議後、営業担当者はこの見積もりのコピーを PDF 形式で顧客に提供します。 この部署ではベンダーを雇い、エクストラネットのドキュメント ライブラリに保存された PowerPoint ファイルの [ 編集] メニューにカスタムの verb を作成します。 verb がクリックされると、サーバーは PowerPoint ファイルを同じライブラリ内で PDF に変換するプログラムを実行します。

サポートされる変換元のプレゼンテーション形式

プレゼンテーションの変換元の形式として、次の形式がサポートされます。

  • Open XML ファイル形式のプレゼンテーション形式 (.pptx)

  • PowerPoint 97-2003 プレゼンテーション (.ppt)

サポートされる変換先のドキュメント形式

サポートされる変換先のドキュメント形式には、サポートされる変換元のドキュメント形式のすべてと次の形式が含まれます。

  • .pptx (Open XML ファイル形式のプレゼンテーション形式)

  • .pdf

  • .xps (Open XML Paper Specification)

  • .jpg

  • .png (Portable Network Graphics 形式)

PowerPoint Automation Services の制限事項

PowerPoint Automation Services には、ドキュメントの印刷機能が組み込まれていません。 ただし、PowerPoint プレゼンテーション ファイル (.ppt および .pptx) を PDF または XPS に変換して、プリンターにスプールすることは簡単にできます。

PowerPoint Automation Services の API

PowerPoint Automation Services を使用するには、そのプログラミング インターフェイスを使用し、SharePoint Server に変換要求を送信します。 各変換要求で、変換するファイル、および変換ジョブの出力形式を指定します。 一部の変換要求では、変換されるコンテンツの種類も指定できます。たとえば、コメント、非表示のスライド、ドキュメントのプロパティなどです。

PowerPoint Automation Services は、変換要求の送受信に非同期パターン メソッドを使用します。 したがって、変換要求が送信された後に実行を継続するコードを記述できます。 変換要求の完了後にユーザーに通知を示す必要がある場合には、操作が完了したときに実行するコールバック メソッドを参照するデリゲートを指定できます。

注:

非同期設計パターンを操作する方法の詳細については、「 非同期プログラミングの概要」を参照してください。

以下のセクションでは、変換要求の送受信に必要なクラスの制限されたリストを取り上げます。 これらのクラスはすべて、 Microsoft.Office.Server.PowerPoint.Conversion 名前空間に含まれます。

Request 基本クラス

Request クラスは Microsoft.Office.Server.PowerPoint.Conversion 名前空間の中で最も基本的なクラスです。 他のすべてのrequest タイプ ( PresentationRequestPictureRequestPdfRequest、および XpsRequest) はこのクラスを継承します。

表 1. Request 基本クラス メンバー

メンバー名 説明
BeginConvert(Microsoft.SharePoint.SPServiceContext, System.AsyncCallback, System.Object) メソッド
変換操作を開始します。 最初のパラメーター serviceContext は、変換するファイルが配置されている SharePoint サイトのコンテキストを指定します。 操作が完了したら、 コールバック パラメーターを使用して、メソッドを参照して実行するデリゲートを指定します。 呼び出しているコードからコールバック メソッドに追加の情報を渡す必要がある場合には、 state パラメーターを使用します。
IAsyncResult オブジェクトを返します。
EndConvert(IAsyncResult) メソッド
変換操作を終了します。 result パラメーターは、対応する BeginConvert 変換要求から返される結果の IAsyncResult オブジェクトを受け取ります。 EndConvert が呼び出されたときに要求が完了していない場合、呼び出し側のスレッドは、変換操作が完了するまでブロックされます。
値は返されません。

PresentationRequest クラス

Request クラスから継承する PresentationRequest クラスは、PowerPoint 97-2003 ファイル (.ppt) または Open XML File Format プレゼンテーション (.pptx) を別のプレゼンテーション ファイル形式に変換します。 上記の最初のシナリオでは、このクラスを使用して、ドキュメント ライブラリ内の古いプレゼンテーション ファイルを Open XML ファイル形式のプレゼンテーション形式に変換します。

PresentationRequest クラスのコンストラクター メソッドには、必要なパラメーターが 3 つあります。

  • input - Stream オブジェクトとして変換するファイルを取得します。

  • extension: 変換されるファイルのファイル拡張子を指定する文字列。

  • output — 出力を格納する場所を指定する SPFileStream オブジェクト。

PresentationRequest クラスには、 settings パラメーターを追加するコンストラクター メソッドの単一のオーバーロードがあります。 settings パラメーターは PresentationSettings オブジェクトを引数として受け付けます。

ヒント: 出力 Stream オブジェクトを SPFile オブジェクトに変換する場合は、結果のファイルに指定された拡張子が、目的のファイルの種類 (.pptまたは.pptx) の拡張子と一致することを確認します。

PdfRequest クラス

PdfRequest クラスも Request クラスから継承し、PowerPoint 97-2003 ファイル (.ppt) または Open XML ファイル形式のプレゼンテーション (.pptx) を .pdf ファイルに変換します。 先に述べた 2 つ目のシナリオでは、このクラスを使用してプレゼンテーションを PDF ファイルに変換します。

PdfRequest クラスのコンストラクター メソッドには、PresentationRequest クラスと同様に、入力拡張出力の 3 つの必須パラメーターもあります。

PdfRequest クラスにも、 settings パラメーターを追加するコンストラクター メソッドの単一のオーバーロードがあります。 settings パラメーターは FixedFormatSettings オブジェクトを引数として受け付けます。

ヒント: 出力 Stream オブジェクトを SPFile オブジェクトに変換する場合は、結果のファイルに指定された拡張子が、目的のファイルの種類 (.pdf) の拡張子と一致することを確認します。

PictureRequest クラス

PictureRequest クラスも Request クラスから継承し、PowerPoint 97-2003 ファイル (.ppt) または Open XML ファイル形式のプレゼンテーション (.pptx) を .jpg または .png のいずれかの形式の画像ファイルのコレクションに変換します。

PictureRequest クラスのコンストラクター メソッドにも、必要なパラメーターが 4 つあります。 入力拡張および出力パラメーターは、PresentationRequest クラス コンストラクターのパラメーターに似ています。 PictureRequest クラスのコンストラクター メソッドにも必要な format パラメーターがあり、これは PictureFormat 列挙型の定数である必要があります。

PictureRequest クラスには、そのコンストラクター メソッドのオーバーロードがありません。

ヒント:PictureRequest クラスは、画像ファイルのパッケージが含まれるストリームを返します。 出力 Stream オブジェクトを SPFile オブジェクトに変換しなおす場合には、結果のファイルに付けられる拡張子が .zip であることを確認してください。

PowerPoint Automation Services アプリケーションの構築

PowerPoint Automation Services を使用するコードの作成方法を示す最も簡単な方法は、コンソール アプリケーションを構築することです。 コンソール アプリケーションは、クライアント コンピューター上ではなく SharePoint Server 上で構築し、実行する必要があります。 変換要求を開始するコードは、変換要求コードが Web パーツ、ワークフロー、またはイベント ハンドラーに組み込まれているかどうかに似ています。 次の手順では、コンソール アプリケーションから PowerPoint Automation Services を使用して、Web パーツ、イベント ハンドラー、またはワークフローの複雑さを追加せずに API を使用する方法を示します。

注:

PowerPoint Automation Services は SharePoint のサービスであるため、SharePoint Server で直接実行されるアプリケーションでのみ使用できます。 アプリケーションをファーム ソリューションとして構築する必要があります。 セキュリティで保護されたソリューションから PowerPoint Automation Services を使用することはできません。

アプリケーションをビルドするには

  1. Microsoft Visual Studio 2012 を起動します。

  2. [ ファイル] メニューの [ 新規作成] をポイントし、[ プロジェクト] を選択します。

  3. [ 新しいプロジェクト] ダイアログ ボックスの [ インストール済み] で [ テンプレート] を展開し、[ Visual C#] を展開して [ Windows] を選択します。

  4. プロジェクト テンプレートの一覧で、[ コンソール アプリケーション] を選択します。

  5. Visual Studio のプロジェクトが .NET Framework 4 を対象としていることを確認します。

    注:

    以前のバージョンの SharePoint Server では .NET Framework 3.5 を対象としている必要がありました。 Microsoft.SharePoint ライブラリは .NET Framework 4 のアセンブリを参照するようになりました。 プロジェクトが .NET Framework 4 Client Profile ではなく完全な .NET Framework 4 を対象とすることも確認してください。

  6. [名前] ボックスに、プロジェクトに使用する名前 (PAS_Sample など) を入力します。

  7. [ 場所] ボックスに、プロジェクトを保存する場所を入力します。

  8. [ OK] をクリックして、ソリューションを作成します。

  9. 既定で、Visual Studio 2012 は x86 CPU を対象とするプロジェクトを作成しますが、SharePoint Server アプリケーションを構築するには、すべての CPU を対象とする必要があります。

    Microsoft Visual C# アプリケーションを構築する場合、 ソリューション エクスプローラーで、プロジェクトを右クリックし、[ プロパティ] をクリックします。

  • プロジェクトの [ プロパティ] ウィンドウで、[ ビルド] をクリックします。

  • [ 構成] の一覧をポイントし、[ すべての構成] を選択します。

  • [ プラットフォーム ターゲット] の一覧をポイントし、[ Any CPU] を選択します。

    Microsoft Visual Basic .NET Framework アプリケーションを構築する場合、[ プロパティ] ウィンドウで [ コンパイル] をクリックします。

  • [ 詳細コンパイル オプション] をクリックします。

  • [ 構成] の一覧をポイントし、[ すべての構成] を選択します。

  • [ プラットフォーム ターゲット] の一覧をポイントし、[ Any CPU] をクリックします。

  1. [ プロジェクト] メニューの [ 参照の追加] をクリックし、[ 参照の追加] ダイアログ ボックスを開きます。

  2. [ アセンブリ] を展開し、次の操作を行います。

  • [ フレームワーク] を展開し、System.Web への参照を追加します。

  • [拡張子] を展開し、Microsoft.SharePoint への参照を追加します。

  1. また、[参照の追加] ダイアログ ボックスで [参照] を選択し、Microsoft.Office.Server.PowerPoint.dll (既定の場所は C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.Office.Server.PowerPoint\v4.0_15.0.0.0__71e9bce111e9429c) の場所に移動し、アセンブリを選択してから [追加] を選択します。

以下の C# および Visual Basic の例では、SharePoint サイトの共有ドキュメント フォルダーの PowerPoint 97-2003 ファイル (.ppt) を同じフォルダー内の PowerPoint Open XML ファイル (.pptx) に変換する、シンプルな PowerPoint Automation Services アプリケーションを示しています。


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using Microsoft.SharePoint;
using Microsoft.Office.Server.PowerPoint.Conversion;

namespace PAS_Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string siteURL = "http://localhost";
                using (SPSite site = new SPSite(siteURL))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        Console.WriteLine("Begin conversion");

                        // Get a reference to the "Shared Documents" library
                        // and the presentation file to be converted.
                        SPFolder docs = web.Folders[siteURL +
                            "/Shared Documents"];
                        SPFile file = docs.Files[siteURL +
                            "/Shared Documents/Pres1.ppt"];

                        // Convert the file to a stream and create an
                        // SPFileStream object for the conversion output.
                        Stream fStream = file.OpenBinaryStream();
                        SPFileStream stream = new SPFileStream(web, 0x1000);

                        // Create the presentation conversion request.
                        PresentationRequest request = new PresentationRequest(
                            fStream,
                            ".ppt",
                            stream);

                        // Send the request synchronously, passing
                        // in a 'null' value for the callback parameter,
                        // and capturing the response in the result object.
                        IAsyncResult result = request.BeginConvert(
                            SPServiceContext.GetContext(site),
                            null,
                            null);

                        // Use the EndConvert method to get the result.
                        request.EndConvert(result);

                        // Add the converted file to the document library.
                        SPFile newFile = docs.Files.Add(
                            "newPres1.pptx",
                            stream,
                            true);
                        Console.WriteLine("Output: {0}", newFile.Url);

                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
            finally
            {
                Console.WriteLine("Complete");
                Console.ReadKey();
            }
        }
    }
}

Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Web
Imports Microsoft.SharePoint
Imports Microsoft.Office.Server.PowerPoint.Conversion

Namespace PAS_Sample
    Class Program
        Private Shared Sub Main(args As String())
            Try
                Dim siteURL As String = "http://localhost"
                Using site As New SPSite(siteURL)
                    Using web As SPWeb = site.OpenWeb()
                        Console.WriteLine("Begin conversion")

                        ' Get a reference to the "Shared Documents" library
                        ' and the presentation file to be converted.
                        Dim docs As SPFolder = web.Folders(siteURL + _
                            "/Shared Documents")
                        Dim file As SPFile = docs.Files(siteURL + _
                            "/Shared Documents/Pres1.ppt")

                        ' Convert the file to a stream and create an
                        ' SPFileStream object for the conversion output.
                        Dim fStream As Stream = file.OpenBinaryStream()
                        Dim stream As New SPFileStream(web, &H1000)

                        ' Create the presentation conversion request.
                        Dim request As New PresentationRequest(fStream, _
                            ".ppt",
                            stream)

                        ' Send the request synchronously, passing
                        ' in a Nothing value for the callback parameter,
                        ' and capturing the response in the result object.
                        Dim result As IAsyncResult = request.BeginConvert(_
                            SPServiceContext.GetContext(site), _
                            Nothing, _
                            Nothing)

                        ' Use the EndConvert method to get the result.
                        request.EndConvert(result)

                        ' Add the converted file to the document library.
                        Dim newFile As SPFile = docs.Files.Add(_
                            "newPres1.pptx", _
                            stream, _
                            True)

                        Console.WriteLine("Output: {0}", newFile.Url)
                    End Using
                End Using
            Catch ex As Exception
                Console.WriteLine("Error: " + ex.Message)
            Finally
                Console.WriteLine("Complete")
                Console.ReadKey()
            End Try
        End Sub
    End Class
End Namespace

例をビルドして実行するには

  1. PowerPoint ドキュメント ( Pres1.ppt ) を SharePoint サイトの共有ドキュメント フォルダーに追加します。

  2. 例をビルドして実行します。

  3. 変換プロセスの実行を 1 分待機した後、SharePoint サイトの共有ドキュメント フォルダーに移動し、ページを更新します。 ドキュメント ライブラリに新しい PowerPoint ドキュメントである Pres1.pptx が含まれています。

SharePoint の PowerPoint Automation Services はプレゼンテーション ファイルを管理するための高度な機能を企業に提供します。 この高パフォーマンスのソリューションにより、スケーラブルなサーバー側でのプレゼンテーションの操作と生成をバッチとして、またはオンデマンドで行えるようになります。

注:

この例を実行する前に、PowerPoint Automation Services が SharePoint サーバーの全体管理コンソールで有効になっていることを確認してください。
PowerPoint Automation Services が有効になっていることを確認するには、次の操作を行います。

  • サーバーの全体管理コンソールの [ システム設定] で、[ サーバーのサービスの管理] を選択し、[ PowerPoint Conversion Service] が [ Started] に設定されていることを確認します。
  • また、サーバーの全体管理コンソールの [ アプリケーション構成の管理] で [ サービス アプリケーションの管理] を選択し、[ PowerPoint Conversion Service Application] および [ PowerPoint Conversion Service Application Proxy] が [Started] に設定されていることを確認します。

結論

SharePoint の PowerPoint Automation Services はプレゼンテーション ファイルを管理するための高度な機能を企業に提供します。 この高パフォーマンスのソリューションにより、スケーラブルなサーバー側でのプレゼンテーションの操作と生成をバッチとして、またはオンデマンドで行えるようになります。

関連項目