PHPでプレゼンテーションのインクオブジェクトを管理する
はじめに
PowerPoint は自由形状のストロークを書き込むことができるインク機能を提供します。インクは他のオブジェクトを強調したり、接続やプロセスを示したり、スライド上の特定の項目に注意を引くために使用できます。
Aspose.Slides はインクオブジェクトを操作するために必要な型を提供します。たとえば、Ink クラスはスライド上のインクオブジェクトを表します。
通常オブジェクトとインクオブジェクトの違い
PowerPoint スライド上のオブジェクトは通常、Shape オブジェクトで表されます。最も単純な形では、シェイプはオブジェクト自体(フレーム)の領域と、コンテナサイズ、形状、背景などのプロパティを定義するコンテナです。詳しくは Shape Layout Format を参照してください。
ただし、PowerPoint がインクオブジェクトを処理する際は、コンテナ(フレーム)のサイズ以外のすべてのプロパティを無視します。コンテナ領域のサイズは標準の Shape.getWidth と Shape.getHeight メソッドで決まります。

インクトレース
インクトレースは、ユーザーがデジタルインクで書く際のペンの軌跡を記録する基本要素です。トレースは接続されたポイントのシーケンスを保持します。
最も単純なエンコード形式は各サンプル点の X および Y 座標を指定します。すべての接続ポイントが描画されると、次のような画像が生成されます。

描画用ブラシプロパティ
ブラシはインクトレースのポイントを結ぶ線を描くために使用されます。ブラシには独自の色とサイズがあり、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 は次のようにサイズを表示します。

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

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

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

エクスポートおよびレンダリング時のインク表示制御
Aspose.Slides はインクオブジェクトのエクスポートまたはレンダリング時の表示方法を制御するために InkOptions クラスを提供します。プロパティを使用してインクを完全に非表示にしたり、インクブラシのマスク操作の解釈方法を変更したりできます。
Ink オプションはさまざまな出力タイプのエクスポートまたはレンダリング オプションを通じて利用できます。
| 出力 | Ink オプション プロパティ |
|---|---|
| PdfOptions.getInkOptions | |
| HTML | HtmlOptions.getInkOptions |
| SVG | SVGOptions.getInkOptions |
| TIFF | TiffOptions.getInkOptions |
| スライド画像 | RenderingOptions.getInkOptions |
次の InkOptions メソッドは同じ 2 つの設定を公開します。
- InkOptions.getHideInk はインクオブジェクトを出力に含めるかどうかを決定します。デフォルトは
falseです。 - InkOptions.getInterpretMaskOpAsOpacity はインクブラシをレンダリングするときにマスク操作を不透明度として解釈するかどうかを決定します。デフォルトは
trueです。falseを渡して InkOptions.setInterpretMaskOpAsOpacity を呼び出すと ROP 操作が使用されます。
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、ビットマップ スライド画像でインクオプションを構成できます。
さらに読む
- シェイプ全般については、PowerPoint Shapes セクションを参照してください。
- 有効なプロパティの詳細は、Shape Effective Properties をご覧ください。
- PDF エクスポートの詳細は、Convert PPT and PPTX to PDF を参照してください。
- HTML エクスポートの詳細は、Convert PowerPoint Presentations to HTML を参照してください。
- SVG エクスポートの詳細は、Render Presentation Slides as SVG Images を参照してください。
- TIFF エクスポートの詳細は、Convert PowerPoint Presentations to TIFF を参照してください。
- スライド画像レンダリングの詳細は、Convert Presentation Slides to Images を参照してください。