C++에서 프레젠테이션 도형 관리
개요
이 문서는 Aspose.Slides를 사용하여 프레젠테이션에서 도형을 처리하는 방법을 설명합니다. 슬라이드에서 도형을 찾고, 복제하고, 제거하고, 숨기고, 순서를 변경하고, Interop 도형 ID를 가져오며, 식별 및 추가 처리를 위해 대체 텍스트를 설정하는 방법을 보여줍니다.
또한 도형의 레이아웃 형식에 접근하고, 도형을 SVG로 렌더링하고, 슬라이드에서 도형을 정렬하며, 수평 및 수직 미러링을 위한 플립 속성을 사용하는 방법도 다룹니다. 이와 더불어 도형 결합, 쌓기 순서, 도형 잠금에 대한 간단한 FAQ도 포함되어 있습니다.
슬라이드에서 도형 찾기
이 항목에서는 개발자가 내부 Id를 사용하지 않고 특정 슬라이드에서 도형을 쉽게 찾을 수 있는 간단한 기술을 설명합니다. PowerPoint 프레젠테이션 파일은 내부 고유 Id 외에 슬라이드의 도형을 식별하는 방법이 없습니다. 내부 고유 Id를 사용해 도형을 찾는 것은 개발자에게 어려울 수 있습니다. 모든 슬라이드에 추가된 도형에는 일부 대체 텍스트가 있습니다. 우리는 개발자에게 특정 도형을 찾기 위해 대체 텍스트를 사용할 것을 권장합니다. 향후 변경하려는 개체에 대한 대체 텍스트는 MS PowerPoint에서 정의할 수 있습니다.
원하는 도형의 대체 텍스트를 설정한 후, Aspose.Slides for C++를 사용해 해당 프레젠테이션을 열고 슬라이드에 추가된 모든 도형을 반복합니다. 각 반복에서 도형의 대체 텍스트를 확인하고, 일치하는 대체 텍스트를 가진 도형이 바로 원하는 도형이 됩니다. 이 기술을 더 잘 보여주기 위해, 우리는 슬라이드에서 특정 도형을 찾아 반환하는 메서드 FindShape 을 만들었습니다.
도형 복제
Aspose.Slides for C++를 사용하여 슬라이드에 도형을 복제하려면:
- Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 사용해 슬라이드의 참조를 얻습니다.
- 원본 슬라이드의 도형 컬렉션에 접근합니다.
- 프레젠테이션에 새 슬라이드를 추가합니다.
- 원본 슬라이드 도형 컬렉션에서 새 슬라이드로 도형을 복제합니다.
- 수정된 프레젠테이션을 PPTX 파일로 저장합니다.
아래 예제는 슬라이드에 그룹 도형을 추가합니다.
도형 제거
Aspose.Slides for C++는 개발자가 모든 도형을 제거할 수 있게 합니다. 슬라이드에서 도형을 제거하려면 아래 단계를 따르세요:
- Presentation 클래스의 인스턴스를 생성합니다.
- 첫 번째 슬라이드에 접근합니다.
- 특정 AlternativeText를 가진 도형을 찾습니다.
- 도형을 제거합니다.
- 파일을 디스크에 저장합니다.
도형 숨기기
Aspose.Slides for C++는 개발자가 모든 도형을 숨길 수 있게 합니다. 슬라이드에서 도형을 숨기려면 아래 단계를 따르세요:
- Presentation 클래스의 인스턴스를 생성합니다.
- 첫 번째 슬라이드에 접근합니다.
- 특정 AlternativeText를 가진 도형을 찾습니다.
- 도형을 숨깁니다.
- 파일을 디스크에 저장합니다.
도형 순서 변경
Aspose.Slides for C++는 개발자가 도형의 순서를 재배열할 수 있게 합니다. 도형 순서를 재배열하면 어떤 도형이 앞에, 어떤 도형이 뒤에 있는지를 지정할 수 있습니다. 슬라이드에서 도형 순서를 변경하려면 아래 단계를 따르세요:
- Presentation 클래스의 인스턴스를 생성합니다.
- 첫 번째 슬라이드에 접근합니다.
- 도형을 추가합니다.
- 도형의 텍스트 프레임에 텍스트를 입력합니다.
- 동일한 좌표에 또 다른 도형을 추가합니다.
- 도형들의 순서를 재배열합니다.
- 파일을 디스크에 저장합니다.
Interop 도형 ID 가져오기
Aspose.Slides for C++는 개발자가 UniqueId 속성과 달리 슬라이드 범위에서 고유한 도형 식별자를 얻을 수 있도록 OfficeInteropShapeId 속성을 IShape 인터페이스와 Shape 클래스에 추가했습니다. OfficeInteropShapeId 속성으로 반환되는 값은 Microsoft.Office.Interop.PowerPoint.Shape 개체의 Id 값에 해당합니다. 아래에 샘플 코드가 제공됩니다.
AlternativeText 속성 설정
Aspose.Slides for C++는 개발자가 도형의 AlternateText를 설정할 수 있게 합니다. 도형의 AlternateText를 설정하려면 아래 단계를 따르세요:
- Presentation 클래스의 인스턴스를 생성합니다.
- 첫 번째 슬라이드에 접근합니다.
- 슬라이드에 원하는 도형을 추가합니다.
- 새로 추가된 도형으로 작업을 수행합니다.
- 도형을 순회하여 원하는 도형을 찾습니다.
- AlternativeText를 설정합니다.
- 파일을 디스크에 저장합니다.
도형의 레이아웃 형식 액세스
Aspose.Slides for C++는 개발자가 도형의 레이아웃 형식에 접근할 수 있게 합니다. 이 문서에서는 도형에 대한 FillFormat 및 LineFormat 속성에 어떻게 접근하는지 보여줍니다.
아래에 샘플 코드가 제공됩니다.
도형을 SVG로 렌더링
이제 Aspose.Slides for C++가 도형을 SVG로 렌더링하는 기능을 지원합니다. Shape 클래스와 IShape 인터페이스에 WriteAsSvg 메서드(및 오버로드)가 추가되었습니다. 이 메서드를 사용하면 도형의 내용을 SVG 파일로 저장할 수 있습니다. 아래 코드 스니펫은 슬라이드의 도형을 SVG 파일로 내보내는 방법을 보여줍니다.
String outSvgFileName = u"SingleShape.svg";
auto pres = System::MakeObject<Presentation>(u"TestExportShapeToSvg.pptx");
auto stream = System::MakeObject<FileStream>(outSvgFileName, FileMode::Create, FileAccess::Write);
pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0)->WriteAsSvg(stream);
도형 정렬
Aspose.Slides는 도형을 슬라이드 여백을 기준으로 또는 서로를 기준으로 정렬할 수 있게 합니다. 이를 위해 오버로드된 SlidesUtil.AlignShapes() 메서드가 추가되었습니다. ShapesAlignmentType 열거형은 가능한 정렬 옵션을 정의합니다.
예제 1
아래 소스 코드는 인덱스 1, 2, 4인 도형을 슬라이드 상단 경계에 맞춰 정렬합니다.
SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"example.pptx");
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
SharedPtr<IShape> shape1 = slide->get_Shapes()->idx_get(1);
SharedPtr<IShape> shape2 = slide->get_Shapes()->idx_get(2);
SharedPtr<IShape> shape3 = slide->get_Shapes()->idx_get(4);
SlideUtil::AlignShapes(ShapesAlignmentType::AlignTop, true, pres->get_Slides()->idx_get(0),
System::MakeArray<int32_t>(
{
slide->get_Shapes()->IndexOf(shape1),
slide->get_Shapes()->IndexOf(shape2),
slide->get_Shapes()->IndexOf(shape3)
}));
예제 2
아래 예제는 컬렉션에 있는 모든 도형을 컬렉션에서 가장 아래에 있는 도형을 기준으로 정렬하는 방법을 보여줍니다.
SharedPtr<Presentation> pres = MakeObject<Presentation>(u"example.pptx");
SlideUtil::AlignShapes(ShapesAlignmentType::AlignBottom, false, pres->get_Slides()->idx_get(0)->get_Shapes());
플립 속성
Aspose.Slides에서 ShapeFrame 클래스는 flipH와 flipV 속성을 통해 도형의 수평 및 수직 미러링을 제어합니다. 두 속성 모두 NullableBool 유형이며, True는 플립, False는 플립 없음, NotDefined는 기본 동작을 사용함을 나타냅니다. 이러한 값은 도형의 Frame에서 접근할 수 있습니다.
플립 설정을 수정하려면, 도형의 현재 위치와 크기, 원하는 flipH와 flipV 값, 회전 각도를 사용해 새로운 ShapeFrame 인스턴스를 생성합니다. 이 인스턴스를 도형의 Frame에 할당하고 프레젠테이션을 저장하면 미러 변환이 적용되어 출력 파일에 반영됩니다.
예를 들어, 첫 번째 슬라이드에 기본 플립 설정을 가진 단일 도형이 포함된 sample.pptx 파일이 있다고 가정합니다.

다음 코드 예제는 도형의 현재 플립 속성을 가져와 수평 및 수직으로 모두 플립합니다.
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);
// 도형의 수평 플립 속성을 가져옵니다.
auto horizontalFlip = shape->get_Frame()->get_FlipH();
Console::WriteLine(u"Horizontal flip: " + ObjectExt::ToString(horizontalFlip));
// 도형의 수직 플립 속성을 가져옵니다.
auto verticalFlip = shape->get_Frame()->get_FlipV();
Console::WriteLine(u"Vertical flip: " + ObjectExt::ToString(verticalFlip));
auto x = shape->get_Frame()->get_X();
auto y = shape->get_Frame()->get_Y();
auto width = shape->get_Frame()->get_Width();
auto height = shape->get_Frame()->get_Height();
auto flipH = NullableBool::True; // 수평으로 플립합니다.
auto flipV = NullableBool::True; // 수평으로 플립합니다.
auto rotation = shape->get_Frame()->get_Rotation();
shape->set_Frame(MakeObject<ShapeFrame>(x, y, width, height, flipH, flipV, rotation));
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
결과:

FAQ
슬라이드에서 데스크톱 편집기처럼 도형을 결합(합집합/교집합/차집합)할 수 있나요?
내장된 Boolean 연산 API는 제공되지 않습니다. 원하는 윤곽을 직접 구성하여 근사화할 수 있습니다—예를 들어 GeometryPath를 통해 결과 기하형을 계산하고 해당 윤곽을 가진 새 도형을 만든 뒤 원본을 선택적으로 제거합니다.
도형이 항상 “맨 위”에 있도록 z‑order(쌓기 순서)를 제어하려면 어떻게 해야 하나요?
슬라이드의 shapes 컬렉션 내 삽입/이동 순서를 변경합니다. 예측 가능한 결과를 위해 다른 슬라이드 수정 작업이 모두 끝난 후에 z‑order를 최종 결정하십시오.
PowerPoint에서 사용자가 도형을 편집하지 못하도록 “잠그”는 방법이 있나요?
예. shape-level protection flags를 설정하면 선택, 이동, 크기 조정, 텍스트 편집 등을 잠글 수 있습니다. 필요에 따라 마스터 또는 레이아웃에 제한을 미러링할 수도 있습니다. 이는 UI 수준 보호이며 보안 기능이 아니므로, 강력한 보호가 필요하면 읽기 전용 권고 또는 암호와 같은 파일 수준 제한과 결합하십시오.