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

概要

PowerPoint には自由曲線のストロークを描画できるインク機能があります。インクは他のオブジェクトを強調したり、接続やプロセスを示したり、スライド上の特定の項目に注意を引くために使用できます。

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

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

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

ただし、PowerPoint がインクオブジェクトを扱う場合、フレーム(コンテナ)のすべてのプロパティはサイズ以外無視されます。コンテナ領域のサイズは標準の IShape.getWidth および IShape.getHeight メソッドで決定されます。

ink_powerpoint1

インクトレース

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

最も単純なエンコーディングは、各サンプル点の X および Y 座標を指定します。すべての接続点が描画されると、次のような画像になります。

ink_powerpoint2

描画用ブラシのプロパティ

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

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

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

import android.graphics.Color;
import com.aspose.slides.*;

Presentation presentation = new Presentation("pres.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IInk ink = (IInk) slide.getShapes().get_Item(0);
    IInkBrush brush = ink.getTraces()[0].getBrush();
    brush.setColor(Color.RED);
} finally {
    presentation.dispose();
}

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

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

import com.aspose.slides.*;
import com.aspose.slides.android.SizeF;

Presentation presentation = new Presentation("pres.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IInk ink = (IInk) slide.getShapes().get_Item(0);
    IInkBrush brush = ink.getTraces()[0].getBrush();
    SizeF brushSize = new SizeF(5, 10);
    brush.setSize(brushSize);
} finally {
    presentation.dispose();
}

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

ink_powerpoint3

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

ink_powerpoint4

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

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

ink_powerpoint5

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

ink_powerpoint6

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

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

インクオプションは、以下の出力タイプに対するエクスポートまたはレンダリング オプションから利用できます。

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

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

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

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

次の Java 例は、すべてのインクオブジェクトを非表示にした状態でプレゼンテーションを PDF にエクスポートします。

import com.aspose.slides.*;

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

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

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

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

次の Java 例は、インクオブジェクトなしで最初のスライドを PNG 画像としてレンダリングします。

import com.aspose.slides.*;

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

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

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

IInkOptions.getInterpretMaskOpAsOpacity 設定は、インクブラシをレンダリングするときにマスク操作がどのように解釈されるかを制御します。既定値は true(不透明度を使用)です。ROP 操作を使用したい場合は、false を渡して IInkOptions.setInterpretMaskOpAsOpacity を呼び出します。

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

import com.aspose.slides.*;
import java.io.FileOutputStream;

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

    ISlide slide = presentation.getSlides().get_Item(0);
    FileOutputStream stream = new FileOutputStream("slide.svg");
    try {
        slide.writeAsSvg(stream, svgOptions);
    } finally {
        stream.close();
    }
} finally {
    presentation.dispose();
}

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

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

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

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

FAQ

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

はい。まず IInk.getTraces でトレースを取得し、IInkTrace.getBrush を取得します。次に IInkBrush.setColor または IInkBrush.setSize を呼び出してブラシを変更します。

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

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

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

上表に示したとおり、PDF、HTML、SVG、TIFF、ビットマップ スライド画像の各エクスポートまたはレンダリング オプションでインクオプションを設定できます。

さらに読む