PowerPoint プレゼンテーションで PHP を使用して SmartArt を管理する
概要
SmartArt はノード、ノード シェイプ、レイアウトで構成された PowerPoint の図です。Aspose.Slides for PHP via Java を使用すると、SmartArt の作成、ノードからのテキスト読み取り、レイアウトの変更、非表示ノードの検査、組織図レイアウトの構成、画像組織図の作成ができます。
SmartArt オブジェクトからテキストを取得する
SmartArt ノードは 1 つ以上のシェイプを含むことができます。ノード シェイプからテキストを読み取るには、SmartArt::getAllNodes を反復処理し、次に SmartArtShape::getTextFrame が返す TextFrame を読み取ります。
この例では、少なくとも 1 枚のスライドがあり、そのスライドの最初のシェイプとして SmartArt オブジェクトが配置されたプレゼンテーションが必要です。利用可能な各テキスト フレームをコンソールに出力します。
use aspose\slides\Presentation;
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->get_Item(0);
for ($i = 0; $i < java_values($smartArt->getAllNodes()->size()); $i++) {
$node = $smartArt->getAllNodes()->get_Item($i);
for ($j = 0; $j < java_values($node->getShapes()->size()); $j++) {
$nodeShape = $node->getShapes()->get_Item($j);
if (!java_is_null($nodeShape->getTextFrame())) {
echo $nodeShape->getTextFrame()->getText() . PHP_EOL;
}
}
}
} finally {
$presentation->dispose();
}
SmartArt オブジェクトのレイアウト タイプを変更する
SmartArt のレイアウトはノードの配置と接続方法を制御します。以下の例では、SmartArtLayoutType の BasicBlockList 値で SmartArt オブジェクトを作成し、BasicProcess 値に変更してプレゼンテーションを保存します。ShapeCollection::addSmartArt に渡す位置とサイズはポイント単位です。レイアウトを変更するには SmartArt::setLayout を使用します。
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::BasicBlockList);
$smartArt->setLayout(SmartArtLayoutType::BasicProcess);
$presentation->save("ChangeSmartArtLayout.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
SmartArt ノードが非表示かどうかを確認する
SmartArtNode::isHidden は、ノードが SmartArt データモデルで非表示かどうかを示します。選択されたレイアウトがノードを可視的な図要素として表示しなくても、非表示ノードは構造内に存在する可能性があります。
以下の例では、SmartArtLayoutType の RadialCycle 値を使用する SmartArt オブジェクトにノードを追加し、追加されたノードの非表示状態を確認します。ノードが非表示の場合はメッセージを出力し、図を保存します。
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::RadialCycle);
$node = $smartArt->getAllNodes()->addNode();
$isHidden = java_values($node->isHidden());
if ($isHidden) {
echo "The node is hidden in the SmartArt data model." . PHP_EOL;
}
$presentation->save("CheckSmartArtHiddenProperty.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
組織図レイアウトの取得または設定
組織図レイアウトを使用する SmartArt 図では、SmartArtNode::getOrganizationChartLayout と SmartArtNode::setOrganizationChartLayout が親ノード配下の子ノードの配置方法を定義します。たとえば、選択された OrganizationChartLayoutType に応じて、子ノードを左側、右側、または両側にぶら下げるように設定できます。
以下の例では、組織図を作成し、最初のノードのレイアウトを OrganizationChartLayoutType の LeftHanging 値に設定します。ゼロベースのインデックス 0 が最上位ノードを選択し、その子ノードは選択された配置を使用します。変更されたプレゼンテーションは保存されます。
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
use aspose\slides\OrganizationChartLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(10, 10, 400, 300, SmartArtLayoutType::OrganizationChart);
$rootNode = $smartArt->getNodes()->get_Item(0);
$rootNode->setOrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);
$presentation->save("OrganizationChartLayout.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
画像組織図の作成
画像組織図は、画像プレースホルダーを含む階層図用に設計された SmartArt レイアウトです。スライドに SmartArt オブジェクトを追加する際に、SmartArtLayoutType の PictureOrganizationChart 値を使用します。この例では、画像プレースホルダーを含む図を保存しますが、プレースホルダーに画像は設定しません。
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SmartArtLayoutType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$smartArt = $slide->getShapes()->addSmartArt(0, 0, 400, 400, SmartArtLayoutType::PictureOrganizationChart);
$presentation->save("PictureOrganizationChart.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
レガシー図をシェイプのグループに変換する
既存のプレゼンテーションを最新化する際、PowerPoint 97–2003 で作成された組織図を更新する必要がある場合があります。Aspose.Slides はこれらのレガシー図を LegacyDiagram オブジェクトとして表現します。LegacyDiagram::convertToGroupShape を使用して、図をシェイプのグループに変換し、個々のビジュアル要素を編集できるようにします。詳細は LegacyDiagram API Reference を参照してください。
変換は元の図を削除せずにシェイプ コレクションに新しいグループを追加します。変換が成功したら、重複コンテンツを防ぐために ShapeCollection::remove で元の図を削除します。シェイプの追加・削除がイテレーションを妨げないよう、変換前にレガシー図をリストに収集します。
以下の例では、プレゼンテーションを開き、すべてのスライドを検索し、図をシェイプのグループに変換して、更新されたプレゼンテーションを PPTX として保存します。
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("legacy-diagrams.ppt");
try {
$legacyDiagramType = new JavaClass("com.aspose.slides.ILegacyDiagram");
for ($i = 0; $i < java_values($presentation->getSlides()->size()); $i++) {
$slide = $presentation->getSlides()->get_Item($i);
$legacyDiagrams = [];
for ($j = 0; $j < java_values($slide->getShapes()->size()); $j++) {
$shape = $slide->getShapes()->get_Item($j);
if (java_instanceof($shape, $legacyDiagramType)) {
$legacyDiagrams[] = $shape;
}
}
foreach ($legacyDiagrams as $legacyDiagram) {
$groupShape = $legacyDiagram->convertToGroupShape();
if (!java_is_null($groupShape)) {
$slide->getShapes()->remove($legacyDiagram);
}
}
}
$presentation->save("modernized.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
保存されたプレゼンテーションには、変換されたレガシー図の代わりに編集可能なシェイプ グループが含まれ、元の図は残っていません。PowerPoint で PPTX を開き、各グループ内のテキスト、塗りつぶし、位置などの個別要素を編集できます。
よくある質問
SmartArt は RTL 言語のミラーリングまたは反転をサポートしますか?
はい。選択された SmartArt レイアウトが反転をサポートしている場合、SmartArt::setReversed メソッドは図の方向を左から右 (LTR) から右から左 (RTL) に、またはその逆に切り替えます。
SmartArt を同じスライドまたは別のプレゼンテーションにコピーして書式設定を保持したい場合は?
SmartArt の形状をクローンするには、SmartArtの形状をクローンする を ShapeCollection::addClone で、または SmartArt を含むスライド全体をクローンするには スライド全体をクローンする を使用できます。どちらの方法もサイズ、位置、書式設定を保持します。
SmartArt をプレビューや Web エクスポート用にラスタ画像にレンダリングするには?
スライドをレンダリングする またはプレゼンテーション全体を PNG または JPEG に変換します。SmartArt はスライドの一部としてレンダリングされます。
スライド上に複数の SmartArt がある場合、特定の SmartArt オブジェクトを見つけるには?
SmartArt の形状に固有の代替テキストまたは名前を割り当てるには、Shape::setAlternativeText または Shape::setName を使用し、BaseSlide::getShapes でその値を検索し、該当するシェイプが SmartArt であることを確認します。