PHPでプレゼンテーションのインクオブジェクトを管理する

はじめに

PowerPoint は自由形状のストロークを書き込むことができるインク機能を提供します。インクは他のオブジェクトを強調したり、接続やプロセスを示したり、スライド上の特定の項目に注意を引くために使用できます。

Aspose.Slides はインクオブジェクトを操作するために必要な型を提供します。たとえば、Ink クラスはスライド上のインクオブジェクトを表します。

通常オブジェクトとインクオブジェクトの違い

PowerPoint スライド上のオブジェクトは通常、Shape オブジェクトで表されます。最も単純な形では、シェイプはオブジェクト自体(フレーム)の領域と、コンテナサイズ、形状、背景などのプロパティを定義するコンテナです。詳しくは Shape Layout Format を参照してください。

ただし、PowerPoint がインクオブジェクトを処理する際は、コンテナ(フレーム)のサイズ以外のすべてのプロパティを無視します。コンテナ領域のサイズは標準の Shape.getWidthShape.getHeight メソッドで決まります。

ink_powerpoint1

インクトレース

インクトレースは、ユーザーがデジタルインクで書く際のペンの軌跡を記録する基本要素です。トレースは接続されたポイントのシーケンスを保持します。

最も単純なエンコード形式は各サンプル点の X および Y 座標を指定します。すべての接続ポイントが描画されると、次のような画像が生成されます。

ink_powerpoint2

描画用ブラシプロパティ

ブラシはインクトレースのポイントを結ぶ線を描くために使用されます。ブラシには独自の色とサイズがあり、InkBrush.getColor および InkBrush.getSize メソッドで取得できます。

インクブラシの色を設定する

この PHP コードはインクブラシの色を設定する方法を示します。

$presentation = new Presentation("pres.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $ink = $slide->getShapes()->get_Item(0);
    $brush = $ink->getTraces()[0]->getBrush();
    $brush->setColor(java("java.awt.Color")->RED);
} finally {
    $presentation->dispose();
}

インクブラシのサイズを設定する

この PHP コードはインクブラシのサイズを設定する方法を示します。

$presentation = new Presentation("pres.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $ink = $slide->getShapes()->get_Item(0);
    $brush = $ink->getTraces()[0]->getBrush();
    $brushSize = new Java("java.awt.Dimension", 5, 10);
    $brush->setSize($brushSize);
} finally {
    $presentation->dispose();
}

通常、ブラシの幅と高さは一致せず、PowerPoint はブラシサイズを表示しません(対応するデータ セクションは灰色表示になります)。幅と高さが一致する場合、PowerPoint は次のようにサイズを表示します。

ink_powerpoint3

わかりやすくするために、インクオブジェクトの高さを増やして重要な寸法を確認します。

ink_powerpoint4

コンテナ(フレーム)はブラシのサイズを考慮しません。常に線の太さはゼロと見なされます(前の画像を参照)。

したがって、インクオブジェクト全体の可視領域を決定するには、トレースのブラシサイズを考慮する必要があります。ここでは、対象オブジェクト(手書きテキストトレース)がコンテナ(フレーム)のサイズにスケーリングされています。コンテナのサイズが変わってもブラシサイズは一定のままで、逆も同様です。

ink_powerpoint5

PowerPoint はテキストオブジェクトにも同様の動作を使用します。

ink_powerpoint6

エクスポートおよびレンダリング時のインク表示制御

Aspose.Slides はインクオブジェクトのエクスポートまたはレンダリング時の表示方法を制御するために InkOptions クラスを提供します。プロパティを使用してインクを完全に非表示にしたり、インクブラシのマスク操作の解釈方法を変更したりできます。

Ink オプションはさまざまな出力タイプのエクスポートまたはレンダリング オプションを通じて利用できます。

出力 Ink オプション プロパティ
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
スライド画像 RenderingOptions.getInkOptions

次の InkOptions メソッドは同じ 2 つの設定を公開します。

PDF 出力でインクオブジェクトを非表示にする

デフォルトではインクオブジェクトはエクスポート時に表示されます。手書き注釈やその他のインクコンテンツを除いたクリーンな出力を作成するには、true を指定して InkOptions.setHideInk を呼び出します。

次の PHP サンプルはインクオブジェクトをすべて非表示にしてプレゼンテーションを PDF にエクスポートします。

$presentation = new Presentation("presentation.pptx");
try {
    $pdfOptions = new PdfOptions();
    $pdfOptions->getInkOptions()->setHideInk(true);

    $presentation->save("presentation_without_ink.pdf", SaveFormat::Pdf, $pdfOptions);
} finally {
    $presentation->dispose();
}

スライドを画像としてレンダリングする際にインクオブジェクトを非表示にする

スライドをビットマップ画像としてレンダリングする際にインクオブジェクトを非表示にするには、RenderingOptions.getInkOptions を設定し、レンダリング オプションを Slide.getImage に渡します。

次の PHP サンプルはインクオブジェクトを除いた PNG 画像として最初のスライドをレンダリングします。

$presentation = new Presentation("presentation.pptx");
try {
    $renderingOptions = new RenderingOptions();
    $renderingOptions->getInkOptions()->setHideInk(true);

    $slide = $presentation->getSlides()->get_Item(0);
    $image = $slide->getImage($renderingOptions);
    try {
        $image->save("slide_without_ink.png", ImageFormat::Png);
    } finally {
        $image->dispose();
    }
} finally {
    $presentation->dispose();
}

インクマスクのレンダリング制御

InkOptions.getInterpretMaskOpAsOpacity 設定はインクブラシをレンダリングする際のマスク操作の解釈方法を制御します。デフォルトは true(不透明度使用)です。ROP 操作を使用するには、false を渡して InkOptions.setInterpretMaskOpAsOpacity を呼び出します。

次の PHP サンプルはスライドを SVG にエクスポートし、インクマスク操作に ROP ベースのレンダリングを使用します。

$presentation = new Presentation("presentation.pptx");
try {
    $svgOptions = new SVGOptions();
    $svgOptions->getInkOptions()->setInterpretMaskOpAsOpacity(false);

    $outputStream = new Java("java.io.FileOutputStream", "slide.svg");
    try {
        $slide = $presentation->getSlides()->get_Item(0);
        $slide->writeAsSvg($outputStream, $svgOptions);
    } finally {
        $outputStream->close();
    }
} finally {
    $presentation->dispose();
}

同じ設定はプレゼンテーションを TIFF にエクスポートまたはスライドを TIFF にレンダリングする際に TiffOptions.getInkOptions を介して適用できます。

インクを非表示にするか保持するかの選択

配布用のクリーンな注釈付きプレゼンテーションが必要な場合は、エクスポート時に true を指定して InkOptions.setHideInk を呼び出します。

レビューコメント、手書きノート、ハイライト、描画など、インク注釈が意図したコンテンツの一部である場合は、InkOptions.getHideInk をデフォルトの false のままにしておきます。これにより、同じプレゼンテーションからソースのインクオブジェクトを変更せずに、レビュー用と最終版の出力を別々に生成できます。

FAQ

既存のインクストロークの色やサイズを変更できますか?

はい。まず Ink.getTraces からトレースを取得し、InkTrace.getBrush を取得します。その後、InkBrush.setColor または InkBrush.setSize を呼び出してブラシを変更します。

インクを非表示にすると元のプレゼンテーションが変更されますか?

いいえ。 InkOptions.setHideInk を呼び出すと、レンダリングまたはエクスポート結果にのみ影響し、元のプレゼンテーション内のインクオブジェクトは削除も変更もされません。

どのエクスポート形式がインクオプションをサポートしていますか?

上表に示した PDF、HTML、SVG、TIFF、ビットマップ スライド画像でインクオプションを構成できます。

さらに読む