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

はじめに

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

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

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

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

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

ink_powerpoint1

インクトレース

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

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

ink_powerpoint2

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

ブラシはインクトレースのポイントを接続する線を描くために使用されます。ブラシはIInkBrush.getColor およびIInkBrush.getSize メソッドで表される独自の色とサイズを持ちます。

インクブラシの色を設定

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

import com.aspose.slides.*;
import java.awt.Color;

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 java.awt.Dimension;

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();
    Dimension brushSize = new Dimension(5, 10);
    brush.setSize(brushSize);
} finally {
    presentation.dispose();
}

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

ink_powerpoint3

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

ink_powerpoint4

コンテナ(フレーム)はブラシのサイズを考慮せず、常に線の太さがゼロであると仮定します(前の画像を参照)。

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

ink_powerpoint5

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

ink_powerpoint6

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

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

インクオプションは、以下の出力タイプに対応するエクスポートまたはレンダリング オプションを通じて利用できます:

出力 インク オプション プロパティ
PDF PdfOptions.getInkOptions
HTML HtmlOptions.getInkOptions
SVG SVGOptions.getInkOptions
TIFF TiffOptions.getInkOptions
Slide image 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;
import java.io.IOException;

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

    FileOutputStream stream = new FileOutputStream("slide.svg");
    ISlide slide = presentation.getSlides().get_Item(0);
    slide.writeAsSvg(stream, svgOptions);
} 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、ビットマップ スライド画像の各エクスポートまたはレンダリング オプションでインクオプションを構成できます。

さらに読む