# PHP에서 PowerPoint 텍스트 단락 관리

> Aspose.Slides for PHP via Java를 사용해 단락 서식을 마스터하고, PPT, PPTX 및 ODP 프레젠테이션에서 정렬, 간격 및 스타일을 최적화합니다.

Source: https://docs.aspose.com/slides/ko/php-java/manage-paragraph/
Updated: 2026-06-14

## **소개**

Aspose.Slides는 PowerPoint 텍스트, 단락 및 구문을 작업하는 데 필요한 모든 클래스를 제공합니다.

* Aspose.Slides는 단락을 나타내는 개체를 추가할 수 있는 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/) 클래스를 제공합니다. `TextFame` 객체는 하나 이상의 단락을 가질 수 있습니다(각 단락은 캐리지 리턴을 통해 생성됩니다).
* Aspose.Slides는 구문을 나타내는 개체를 추가할 수 있는 [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스를 제공합니다. `Paragraph` 객체는 하나 이상의 구문(구문 개체의 컬렉션)을 가질 수 있습니다.
* Aspose.Slides는 텍스트와 해당 서식 속성을 나타내는 개체를 추가할 수 있는 [Portion](https://reference.aspose.com/slides/ko/php-java/aspose.slides/portion/) 클래스를 제공합니다.

`Paragraph` 객체는 기본 `Portion` 객체를 통해 서로 다른 서식 속성을 가진 텍스트를 처리할 수 있습니다.

## **여러 구문을 포함하는 여러 단락 추가**

다음 단계에서는 3개의 단락을 포함하고 각 단락이 3개의 구문을 포함하는 텍스트 프레임을 추가하는 방법을 보여줍니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
3. 슬라이드에 사각형 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)와 연결된 ITextFrame을 가져옵니다.
5. 두 개의 [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 객체를 생성하고 이를 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)의 단락 컬렉션에 추가합니다.
6. 각 새로운 `Paragraph`에 대해 세 개의 [Portion](https://reference.aspose.com/slides/ko/php-java/aspose.slides/portion/) 객체를 생성(기본 Paragraph의 경우 두 개)하고 각 `Portion` 객체를 해당 `Paragraph`의 구문 컬렉션에 추가합니다.
7. 각 구문에 텍스트를 설정합니다.
8. `Portion` 객체가 제공하는 서식 속성을 사용해 각 구문에 원하는 서식 기능을 적용합니다.
9. 수정된 프레젠테이션을 저장합니다.

이 PHP 코드는 구문을 포함하는 단락을 추가하는 단계의 구현 예시입니다:

```php
# PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
$pres = new Presentation();
try {
    # 첫 번째 슬라이드에 접근합니다
    $slide = $pres->getSlides()->get_Item(0);
    # Rectangle 유형의 AutoShape을 추가합니다
    $ashp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 150, 300, 150);
    # AutoShape의 TextFrame에 접근합니다
    $tf = $ashp->getTextFrame();
    # 다른 텍스트 서식을 가진 Paragraph와 Portion을 생성합니다
    $para0 = $tf->getParagraphs()->get_Item(0);
    $port01 = new Portion();
    $port02 = new Portion();
    $para0->getPortions()->add($port01);
    $para0->getPortions()->add($port02);
    $para1 = new Paragraph();
    $tf->getParagraphs()->add($para1);
    $port10 = new Portion();
    $port11 = new Portion();
    $port12 = new Portion();
    $para1->getPortions()->add($port10);
    $para1->getPortions()->add($port11);
    $para1->getPortions()->add($port12);
    $para2 = new Paragraph();
    $tf->getParagraphs()->add($para2);
    $port20 = new Portion();
    $port21 = new Portion();
    $port22 = new Portion();
    $para2->getPortions()->add($port20);
    $para2->getPortions()->add($port21);
    $para2->getPortions()->add($port22);
    for($i = 0; $i < 3; $i++) {
        for($j = 0; $j < 3; $j++) {
            $portion = $tf->getParagraphs()->get_Item($i)->getPortions()->get_Item($j);
            $portion->setText("Portion0" . $j);
            if ($j == 0) {
                $portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
                $portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->RED);
                $portion->getPortionFormat()->setFontBold(NullableBool::True);
                $portion->getPortionFormat()->setFontHeight(15);
            } else if ($j == 1) {
                $portion->getPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
                $portion->getPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLUE);
                $portion->getPortionFormat()->setFontItalic(NullableBool::True);
                $portion->getPortionFormat()->setFontHeight(18);
            }
        }
    }
    # PPTX를 디스크에 저장합니다
    $pres->save("multiParaPort_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}
```

## **단락 글머리표 관리**

글머리표 목록은 정보를 빠르고 효율적으로 구성하고 제시하는 데 도움이 됩니다. 글머리표가 있는 단락은 항상 읽고 이해하기 쉽습니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
3. 선택한 슬라이드에 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. 자동 도형의 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)에 접근합니다.
5. `TextFrame`의 기본 단락을 제거합니다.
6. [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스를 사용해 첫 번째 단락 인스턴스를 생성합니다.
7. 단락의 글머리표 `Type`을 `Symbol`로 설정하고 글머리표 문자를 지정합니다.
8. 단락 `Text`를 설정합니다.
9. 글머리표에 대한 단락 `Indent`를 설정합니다.
10. 글머리표 색상을 지정합니다.
11. 글머리표 높이를 지정합니다.
12. 새 단락을 `TextFrame` 단락 컬렉션에 추가합니다.
13. 두 번째 단락을 추가하고 7~13단계를 반복합니다.
14. 프레젠테이션을 저장합니다.

이 PHP 코드는 단락 글머리표를 추가하는 방법을 보여줍니다:

```php
# PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
$pres = new Presentation();
try {
    # 첫 번째 슬라이드에 접근합니다
    $slide = $pres->getSlides()->get_Item(0);
    # AutoShape을 추가하고 접근합니다
    $aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # AutoShape의 텍스트 프레임에 접근합니다
    $txtFrm = $aShp->getTextFrame();
    # 기본 단락을 제거합니다
    $txtFrm->getParagraphs()->removeAt(0);
    # 단락을 생성합니다
    $para = new Paragraph();
    # 단락 글머리표 스타일과 기호를 설정합니다
    $para->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para->getParagraphFormat()->getBullet()->setChar(8226);
    # 단락 텍스트를 설정합니다
    $para->setText("Welcome to Aspose.Slides");
    # 글머리표 들여쓰기를 설정합니다
    $para->getParagraphFormat()->setIndent(25);
    # 글머리표 색상을 설정합니다
    $para->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
    $para->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
    $para->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// 자체 글머리표 색상을 사용하려면 IsBulletHardColor를 true로 설정합니다

    # 글머리표 높이를 설정합니다
    $para->getParagraphFormat()->getBullet()->setHeight(100);
    # 단락을 텍스트 프레임에 추가합니다
    $txtFrm->getParagraphs()->add($para);
    # 두 번째 단락을 생성합니다
    $para2 = new Paragraph();
    # 단락 글머리표 유형과 스타일을 설정합니다
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $para2->getParagraphFormat()->getBullet()->setNumberedBulletStyle(NumberedBulletStyle->BulletCircleNumWDBlackPlain);
    # 단락 텍스트를 추가합니다
    $para2->setText("This is numbered bullet");
    # 글머리표 들여쓰기를 설정합니다
    $para2->getParagraphFormat()->setIndent(25);
    $para2->getParagraphFormat()->getBullet()->getColor()->setColorType(ColorType::RGB);
    $para2->getParagraphFormat()->getBullet()->getColor()->setColor(java("java.awt.Color")->BLACK);
    $para2->getParagraphFormat()->getBullet()->setBulletHardColor(NullableBool::True);// 자체 글머리표 색상을 사용하려면 IsBulletHardColor를 true로 설정합니다

    # 글머리표 높이를 설정합니다
    $para2->getParagraphFormat()->getBullet()->setHeight(100);
    # 단락을 텍스트 프레임에 추가합니다
    $txtFrm->getParagraphs()->add($para2);
    # 수정된 프레젠테이션을 저장합니다
    $pres->save("Bullet_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}
```

## **그림 글머리표 관리**

그림 목록은 정보를 빠르고 효율적으로 조직하고 제시하는 데 도움이 됩니다. 그림 단락은 읽고 이해하기 쉽습니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
3. 슬라이드에 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. 자동 도형의 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)에 접근합니다.
5. `TextFrame`의 기본 단락을 제거합니다.
6. [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스를 사용해 첫 번째 단락 인스턴스를 생성합니다.
7. [PPImage](https://reference.aspose.com/slides/ko/php-java/aspose.slides/ppimage/)에 이미지를 로드합니다.
8. 글머리표 유형을 [Picture](https://reference.aspose.com/slides/ko/php-java/aspose.slides/bullettype/#Picture)로 설정하고 이미지를 지정합니다.
9. 단락 `Text`를 설정합니다.
10. 글머리표에 대한 단락 `Indent`를 설정합니다.
11. 글머리표 색상을 지정합니다.
12. 글머리표 높이를 지정합니다.
13. 새 단락을 `TextFrame` 단락 컬렉션에 추가합니다.
14. 두 번째 단락을 추가하고 이전 단계들을 반복합니다.
15. 수정된 프레젠테이션을 저장합니다.

이 PHP 코드는 그림 글머리표를 추가하고 관리하는 방법을 보여줍니다:

```php
# PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
$presentation = new Presentation();
try {
    # 첫 번째 슬라이드에 접근합니다
    $slide = $presentation->getSlides()->get_Item(0);
    # 글머리표용 이미지를 인스턴스화합니다
    $picture;
    $image = Images->fromFile("bullets.png");
    try {
        $picture = $presentation->getImages()->addImage($image);
    } finally {
        if (!java_is_null($image)) {
            $image->dispose();
        }
    }
    # AutoShape을 추가하고 접근합니다
    $autoShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # AutoShape의 텍스트 프레임에 접근합니다
    $textFrame = $autoShape->getTextFrame();
    # 기본 단락을 제거합니다
    $textFrame->getParagraphs()->removeAt(0);
    # 새 단락을 생성합니다
    $paragraph = new Paragraph();
    $paragraph->setText("Welcome to Aspose.Slides");
    # 단락 글머리표 스타일과 이미지를 설정합니다
    $paragraph->getParagraphFormat()->getBullet()->setType(BulletType::Picture);
    $paragraph->getParagraphFormat()->getBullet()->getPicture()->setImage($picture);
    # 글머리표 높이를 설정합니다
    $paragraph->getParagraphFormat()->getBullet()->setHeight(100);
    # 단락을 텍스트 프레임에 추가합니다
    $textFrame->getParagraphs()->add($paragraph);
    # 프레젠테이션을 PPTX 파일로 저장합니다
    $presentation->save("ParagraphPictureBulletsPPTX_out.pptx", SaveFormat::Pptx);
    # 프레젠테이션을 PPT 파일로 저장합니다
    $presentation->save("ParagraphPictureBulletsPPT_out.ppt", SaveFormat::Ppt);
} catch (JavaException $e) {
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}
```

## **다단계 글머리표 관리**

다단계 목록은 정보를 빠르고 효율적으로 조직하고 제시하는 데 도움이 됩니다. 다단계 글머리표는 읽고 이해하기 쉽습니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
3. 새 슬라이드에 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. 자동 도형의 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)에 접근합니다.
5. `TextFrame`의 기본 단락을 제거합니다.
6. [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스를 통해 첫 번째 단락 인스턴스를 생성하고 깊이를 0으로 설정합니다.
7. `Paragraph` 클래스를 통해 두 번째 단락 인스턴스를 생성하고 깊이를 1로 설정합니다.
8. `Paragraph` 클래스를 통해 세 번째 단락 인스턴스를 생성하고 깊이를 2로 설정합니다.
9. `Paragraph` 클래스를 통해 네 번째 단락 인스턴스를 생성하고 깊이를 3으로 설정합니다.
10. 새 단락들을 `TextFrame` 단락 컬렉션에 추가합니다.
11. 수정된 프레젠테이션을 저장합니다.

이 PHP 코드는 다단계 글머리표를 추가하고 관리하는 방법을 보여줍니다:

```php
# PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
$pres = new Presentation();
try {
    # 첫 번째 슬라이드에 접근합니다
    $slide = $pres->getSlides()->get_Item(0);
    # AutoShape을 추가하고 접근합니다
    $aShp = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # 생성된 AutoShape의 텍스트 프레임에 접근합니다
    $text = $aShp->addTextFrame("");
    # 기본 단락을 지웁니다
    $text->getParagraphs()->clear();
    # 첫 번째 단락을 추가합니다
    $para1 = new Paragraph();
    $para1->setText("Content");
    $para1->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para1->getParagraphFormat()->getBullet()->setChar(8226);
    $para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para1->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 글머리표 레벨을 설정합니다
    $para1->getParagraphFormat()->setDepth(0);
    # 두 번째 단락을 추가합니다
    $para2 = new Paragraph();
    $para2->setText("Second Level");
    $para2->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para2->getParagraphFormat()->getBullet()->setChar('-');
    $para2->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para2->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 글머리표 레벨을 설정합니다
    $para2->getParagraphFormat()->setDepth(1);
    # 세 번째 단락을 추가합니다
    $para3 = new Paragraph();
    $para3->setText("Third Level");
    $para3->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para3->getParagraphFormat()->getBullet()->setChar(8226);
    $para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para3->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 글머리표 레벨을 설정합니다
    $para3->getParagraphFormat()->setDepth(2);
    # 네 번째 단락을 추가합니다
    $para4 = new Paragraph();
    $para4->setText("Fourth Level");
    $para4->getParagraphFormat()->getBullet()->setType(BulletType::Symbol);
    $para4->getParagraphFormat()->getBullet()->setChar('-');
    $para4->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $para4->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    # 글머리표 레벨을 설정합니다
    $para4->getParagraphFormat()->setDepth(3);
    # 단락을 컬렉션에 추가합니다
    $text->getParagraphs()->add($para1);
    $text->getParagraphs()->add($para2);
    $text->getParagraphs()->add($para3);
    $text->getParagraphs()->add($para4);
    # 프레젠테이션을 PPTX 파일로 저장합니다
    $pres->save("MultilevelBullet.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}
```

## **사용자 지정 번호 매기기 목록이 있는 단락 관리**

[BulletFormat](https://reference.aspose.com/slides/ko/php-java/aspose.slides/bulletformat/) 클래스는 `setNumberedBulletStartWith` 메서드 등 번호 매기기 또는 서식을 사용자 지정할 수 있는 기능을 제공합니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 단락이 포함된 슬라이드에 접근합니다.
3. 슬라이드에 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. 자동 도형의 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)에 접근합니다.
5. `TextFrame`의 기본 단락을 제거합니다.
6. [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스를 통해 첫 번째 단락 인스턴스를 생성하고 [NumberedBulletStartWith](https://reference.aspose.com/slides/ko/php-java/aspose.slides/bulletformat/setnumberedbulletstartwith/)을 2로 설정합니다.
7. `Paragraph` 클래스를 통해 두 번째 단락 인스턴스를 생성하고 `NumberedBulletStartWith`를 3으로 설정합니다.
8. `Paragraph` 클래스를 통해 세 번째 단락 인스턴스를 생성하고 `NumberedBulletStartWith`를 7로 설정합니다.
9. 새 단락들을 `TextFrame` 단락 컬렉션에 추가합니다.
10. 수정된 프레젠테이션을 저장합니다.

이 PHP 코드는 사용자 지정 번호 매기기 또는 서식이 있는 단락을 추가하고 관리하는 방법을 보여줍니다:

```php
$presentation = new Presentation();
try {
    $shape = $presentation->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 200, 200, 400, 200);
    # 생성된 자동 도형의 텍스트 프레임에 접근합니다
    $textFrame = $shape->getTextFrame();
    # 기본 존재 단락을 제거합니다
    $textFrame->getParagraphs()->removeAt(0);
    # 첫 번째 목록
    $paragraph1 = new Paragraph();
    $paragraph1->setText("bullet 2");
    $paragraph1->getParagraphFormat()->setDepth(4);
    $paragraph1->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(2);
    $paragraph1->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph1);
    $paragraph2 = new Paragraph();
    $paragraph2->setText("bullet 3");
    $paragraph2->getParagraphFormat()->setDepth(4);
    $paragraph2->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(3);
    $paragraph2->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph2);
    $paragraph5 = new Paragraph();
    $paragraph5->setText("bullet 7");
    $paragraph5->getParagraphFormat()->setDepth(4);
    $paragraph5->getParagraphFormat()->getBullet()->setNumberedBulletStartWith(7);
    $paragraph5->getParagraphFormat()->getBullet()->setType(BulletType::Numbered);
    $textFrame->getParagraphs()->add($paragraph5);
    $presentation->save("SetCustomBulletsNumber-slides.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}
```

## **단락의 첫 줄 들여쓰기 설정**

[ParagraphFormat::setIndent](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setindent/) 메서드를 사용하면 단락의 첫 줄 들여쓰기를 제어할 수 있습니다. 이 메서드는 단락 왼쪽 여백에 대해 첫 줄만 이동합니다. 양수 값은 첫 줄을 오른쪽으로 이동하고, 나머지 줄은 단락 본문에 맞게 정렬됩니다.

전체 단락을 이동하려면 [ParagraphFormat::setMarginLeft](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setmarginleft/)를 사용하고, 첫 줄만 이동하려면 [ParagraphFormat::setIndent](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setindent/)를 사용합니다.

아래 예시는 여러 단락을 생성하고 서로 다른 들여쓰기 값을 적용하여 첫 줄 들여쓰기가 단락 레이아웃에 미치는 영향을 보여 줍니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 대상 슬라이드에 접근합니다.
3. 슬라이드에 사각형 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. 도형에 빈 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)을 추가하고 기본 단락을 제거합니다.
5. 여러 단락을 생성하고 각각에 대해 다른 [Indent](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setindent/) 값을 설정합니다.
6. 단락들을 텍스트 프레임에 추가합니다.
7. 수정된 프레젠테이션을 저장합니다.

이 코드는 단락 들여쓰기를 설정하는 방법을 보여줍니다:

```php
$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $rectangleShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle,50,50,420,220);
    $rectangleShape->getFillFormat()->setFillType(FillType::NoFill);
    $rectangleShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    $rectangleShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);

    $textFrame = $rectangleShape->addTextFrame("");
    $textFrame->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
    $textFrame->getParagraphs()->removeAt(0);

    $firstParagraph = new Paragraph();
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $firstParagraph->setText("No first-line indent. Wrapped lines start at the same position as the first line.");
    $firstParagraph->getParagraphFormat()->setMarginLeft(20.0);
    $firstParagraph->getParagraphFormat()->setIndent(0.0);

    $secondParagraph = new Paragraph();
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $secondParagraph->setText("First-line indent of 20 points. The first line moves to the right, while wrapped lines remain aligned to the paragraph body.");
    $secondParagraph->getParagraphFormat()->setMarginLeft(20.0);
    $secondParagraph->getParagraphFormat()->setIndent(20.0);

    $thirdParagraph = new Paragraph();
    $thirdParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $thirdParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $thirdParagraph->setText("First-line indent of 40 points. This paragraph shows a larger first-line offset to make the effect easier to see.");
    $thirdParagraph->getParagraphFormat()->setMarginLeft(20.0);
    $thirdParagraph->getParagraphFormat()->setIndent(40.0);

    $textFrame->getParagraphs()->add($firstParagraph);
    $textFrame->getParagraphs()->add($secondParagraph);
    $textFrame->getParagraphs()->add($thirdParagraph);

    $presentation->save("paragraph_indent.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}
```

결과:

![The first-line indent of the paragraphs](first_line_indent.png)

## **단락의 매달린 들여쓰기 설정**

매달린 들여쓰기는 첫 번째 줄이 나머지 줄보다 왼쪽에 시작되는 단락 레이아웃입니다. Aspose.Slides에서는 [ParagraphFormat::setIndent](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setindent/) 메서드에 음수 값을 지정하여 첫 줄을 왼쪽으로 이동시켜 이 효과를 만들 수 있습니다.

실제로는 [ParagraphFormat::setMarginLeft](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setmarginleft/)이 단락 본문의 왼쪽 위치를 정의하고, [ParagraphFormat::setIndent](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setindent/)이 해당 여백에 대한 첫 줄 위치를 정의합니다. 매달린 들여쓰기를 만들려면 양수 `MarginLeft` 값과 음수 `Indent` 값을 설정합니다.

이 서식은 참고문헌, 인용구, 용어 해설 등 줄 바꿈이 단락 본문 아래에 정렬되어야 하는 경우에 유용합니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 대상 슬라이드에 접근합니다.
3. 슬라이드에 사각형 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. 도형에 빈 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)을 추가하고 기본 단락을 제거합니다.
5. 각 단락에 대해 양수 [MarginLeft](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setmarginleft/) 값을 설정합니다.
6. 매달린 들여쓰기 효과를 만들기 위해 음수 [Indent](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setindent/) 값을 설정합니다.
7. 단락들을 텍스트 프레임에 추가합니다.
8. 수정된 프레젠테이션을 저장합니다.

이 코드는 단락에 매달린 들여쓰기를 설정하는 방법을 보여줍니다:

```php
$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $rectangleShape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle,50,50,420,220);
    $rectangleShape->getFillFormat()->setFillType(FillType::NoFill);
    $rectangleShape->getLineFormat()->getFillFormat()->setFillType(FillType::Solid);
    $rectangleShape->getLineFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->GRAY);

    $textFrame = $rectangleShape->addTextFrame("");
    $textFrame->getTextFrameFormat()->setAutofitType(TextAutofitType::Shape);
    $textFrame->getParagraphs()->removeAt(0);

    $firstParagraph = new Paragraph();
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $firstParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $firstParagraph->setText("A hanging indent is created by combining a positive left margin with a negative indent. The first line starts to the left, while wrapped lines align with the paragraph body.");
    $firstParagraph->getParagraphFormat()->setMarginLeft(40.0);
    $firstParagraph->getParagraphFormat()->setIndent(-20.0);

    $secondParagraph = new Paragraph();
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->setFillType(FillType::Solid);
    $secondParagraph->getParagraphFormat()->getDefaultPortionFormat()->getFillFormat()->getSolidFillColor()->setColor(java("java.awt.Color")->BLACK);
    $secondParagraph->setText("This second example uses a deeper hanging indent so the difference between the first line and the wrapped lines is easier to compare.");
    $secondParagraph->getParagraphFormat()->setMarginLeft(60.0);
    $secondParagraph->getParagraphFormat()->setIndent(-30.0);

    $textFrame->getParagraphs()->add($firstParagraph);
    $textFrame->getParagraphs()->add($secondParagraph);

    $presentation->save("hanging_indent.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}
```

결과:

![The hanging indent of the paragraphs](hanging_indent.png)

## **단락 종료 실행 속성 관리**

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
1. 위치를 통해 단락이 포함된 슬라이드의 참조를 가져옵니다.
1. 슬라이드에 사각형 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
1. 사각형에 두 개의 단락이 있는 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)을 추가합니다.
1. 단락의 글꼴 높이와 글꼴 유형을 설정합니다.
1. 단락의 End 속성을 설정합니다.
1. 수정된 프레젠테이션을 PPTX 파일로 저장합니다.

이 PHP 코드는 PowerPoint 단락에 대한 End 속성을 설정하는 방법을 보여줍니다:

```php
$pres = new Presentation();
try {
    $shape = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, 200, 250);
    $para1 = new Paragraph();
    $para1->getPortions()->add(new Portion("Sample text"));
    $para2 = new Paragraph();
    $para2->getPortions()->add(new Portion("Sample text 2"));
    $portionFormat = new PortionFormat();
    $portionFormat::setFontHeight(48);
    $portionFormat::setLatinFont(new FontData("Times New Roman"));
    $para2->setEndParagraphPortionFormat($portionFormat);
    $shape->getTextFrame()->getParagraphs()->add($para1);
    $shape->getTextFrame()->getParagraphs()->add($para2);
    $pres->save($resourcesOutputPath . "pres.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}
```

## **HTML 텍스트를 단락으로 가져오기**

Aspose.Slides는 HTML 텍스트를 단락으로 가져오는 향상된 기능을 제공합니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성합니다.
2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
3. 슬라이드에 [AutoShape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/autoshape/)을 추가합니다.
4. `AutoShape`의 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)을 추가하고 접근합니다.
5. `TextFrame`의 기본 단락을 제거합니다.
6. TextReader에서 원본 HTML 파일을 읽습니다.
7. [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스를 통해 첫 번째 단락 인스턴스를 생성합니다.
8. 읽은 TextReader의 HTML 파일 내용을 TextFrame의 [ParagraphCollection](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphcollection/)에 추가합니다.
9. 수정된 프레젠테이션을 저장합니다.

이 PHP 코드는 단락에 HTML 텍스트를 가져오는 단계의 구현 예시입니다:

```php
# 빈 프레젠테이션 인스턴스를 생성합니다
$pres = new Presentation();
try {
    # 프레젠테이션의 기본 첫 슬라이드에 접근합니다
    $slide = $pres->getSlides()->get_Item(0);
    # HTML 내용을 담기 위해 AutoShape을 추가합니다
    $ashape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 10, 10, $pres->getSlideSize()->getSize()->getWidth() - 20, $pres->getSlideSize()->getSize()->getHeight() - 10);
    $ashape->getFillFormat()->setFillType(FillType::NoFill);
    # 도형에 텍스트 프레임을 추가합니다
    $ashape->addTextFrame("");
    # 추가된 텍스트 프레임의 모든 단락을 삭제합니다
    $ashape->getTextFrame()->getParagraphs()->clear();
    # 스트림 리더를 사용해 HTML 파일을 로드합니다
    $tr = new StreamReader("file.html");
    # HTML 스트림 리더의 텍스트를 텍스트 프레임에 추가합니다
    $ashape->getTextFrame()->getParagraphs()->addFromHtml($tr->readToEnd());
    # 프레젠테이션을 저장합니다
    $pres->save("output_out.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}
```

## **단락 텍스트를 HTML로 내보내기**

Aspose.Slides는 단락에 포함된 텍스트를 HTML로 내보내는 향상된 기능을 제공합니다.

1. [Presentation](https://reference.aspose.com/slides/ko/php-java/aspose.slides/presentation/) 클래스의 인스턴스를 생성하고 원하는 프레젠테이션을 로드합니다.
2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
3. HTML로 내보낼 텍스트가 포함된 도형에 접근합니다.
4. 도형의 [TextFrame](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframe/)에 접근합니다.
5. `StreamWriter` 인스턴스를 생성하고 새 HTML 파일을 추가합니다.
6. 시작 인덱스를 지정하여 StreamWriter에 전달하고 원하는 단락을 내보냅니다.

이 PHP 코드는 PowerPoint 단락 텍스트를 HTML로 내보내는 방법을 보여줍니다:

```php
# 프레젠테이션 파일을 로드합니다
$pres = new Presentation("ExportingHTMLText.pptx");
try {
    # 프레젠테이션의 기본 첫 슬라이드에 접근합니다
    $slide = $pres->getSlides()->get_Item(0);
    # 원하는 인덱스
    $index = 0;
    # 추가된 도형에 접근합니다
    $ashape = $slide->getShapes()->get_Item($index);
    # 출력 HTML 파일을 생성합니다
    $os = new Java("java.io.FileOutputStream", "output.html");
    $writer = new OutputStreamWriter($os, "UTF-8");
    # 첫 번째 단락을 HTML로 추출합니다
    # 단락 시작 인덱스와 복사할 총 단락 수를 제공하여 단락 데이터를 HTML로 씁니다
    $writer->write($ashape->getTextFrame()->getParagraphs()->exportToHtml(0, $ashape->getTextFrame()->getParagraphs()->getCount(), null));
    $writer->close();
} catch (JavaException $e) {
} finally {
    if (!java_is_null($pres)) {
        $pres->dispose();
    }
}
```

## **단락을 이미지로 저장**

이 섹션에서는 [Paragraph](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraph/) 클래스로 표현되는 텍스트 단락을 이미지로 저장하는 두 가지 예제를 살펴봅니다. 두 예제 모두 [Shape](https://reference.aspose.com/slides/ko/php-java/aspose.slides/shape/) 클래스의 `getImage` 메서드를 사용해 단락이 포함된 도형의 이미지를 얻고, 도형 내에서 단락의 경계를 계산한 뒤 비트맵 이미지로 내보냅니다. 이러한 접근 방식은 PowerPoint 프레젠테이션에서 텍스트의 특정 부분을 추출해 별도 이미지로 저장해야 하는 다양한 시나리오에 유용합니다.

예제로 사용할 프레젠테이션 파일은 sample.pptx이며, 첫 번째 도형은 세 개의 단락을 포함하는 텍스트 상자입니다.

![The text box with three paragraphs](paragraph_to_image_input.png)

**예제 1**

이 예제에서는 두 번째 단락을 이미지로 얻습니다. 프레젠테이션의 첫 번째 슬라이드에서 도형 이미지를 추출한 다음, 해당 도형 텍스트 프레임에서 두 번째 단락의 경계를 계산합니다. 그런 다음 단락을 새 비트맵 이미지에 다시 그려 PNG 형식으로 저장합니다. 이 방법은 특정 단락을 정확한 크기와 서식을 유지하면서 별도 이미지로 저장해야 할 때 특히 유용합니다.

```php
$imageIO = new Java("javax.imageio.ImageIO");

$presentation = new Presentation("sample.pptx");
try {
    $firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);

    // 도형을 메모리에 비트맵으로 저장합니다.
    $shapeImage = $firstShape->getImage();
    $shapeImageStream = new Java("java.io.ByteArrayOutputStream");
    $shapeImage->save($shapeImageStream, ImageFormat::Png);
    $shapeImage->dispose();

    // 메모리에서 도형 비트맵을 생성합니다.
    $shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
    $shapeBitmap = $imageIO->read($shapeImageInputStream);

    // 두 번째 단락의 경계를 계산합니다.
    $secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
    $paragraphRectangle = $secondParagraph->getRect();

    // 출력 이미지의 좌표와 크기를 계산합니다 (최소 크기 - 1x1 픽셀).
    $imageX = floor(java_values($paragraphRectangle->getX()));
    $imageY = floor(java_values($paragraphRectangle->getY()));
    $imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
    $imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));

    // 도형 비트맵을 잘라서 단락 비트맵만 얻습니다.
    $paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);

    $imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}
```

결과:

![The paragraph image](paragraph_to_image_output.png)

**예제 2**

이 예제에서는 이전 접근 방식에 스케일링 계수를 추가합니다. 도형을 프레젠테이션에서 추출하고 스케일 계수 `2`로 이미지로 저장합니다. 이를 통해 단락을 내보낼 때 고해상도 출력을 얻을 수 있습니다. 그 후 스케일을 고려하여 단락 경계를 계산합니다. 스케일링은 고품질 인쇄물 등 더 상세한 이미지가 필요할 때 특히 유용합니다.

```php
$imageIO = new Java("javax.imageio.ImageIO");

$imageScaleX = 2;
$imageScaleY = $imageScaleX;

$presentation = new Presentation("sample.pptx");
try {
    $firstShape = $presentation->getSlides()->get_Item(0)->getShapes()->get_Item(0);

    // 스케일링을 적용하여 도형을 메모리에 비트맵으로 저장합니다.
    $shapeImage = $firstShape->getImage(ShapeThumbnailBounds::Shape, $imageScaleX, $imageScaleY);
    $shapeImageStream = new Java("java.io.ByteArrayOutputStream");
    $shapeImage->save($shapeImageStream, ImageFormat::Png);
    $shapeImage->dispose();

    // 메모리에서 도형 비트맵을 생성합니다.
    $shapeImageInputStream = new Java("java.io.ByteArrayInputStream", $shapeImageStream->toByteArray());
    $shapeBitmap = $imageIO->read($shapeImageInputStream);

    // 두 번째 단락의 경계를 계산합니다.
    $secondParagraph = $firstShape->getTextFrame()->getParagraphs()->get_Item(1);
    $paragraphRectangle = $secondParagraph->getRect();
    $paragraphRectangle->setRect(
            java_values($paragraphRectangle->getX()) * $imageScaleX,
            java_values($paragraphRectangle->getY()) * $imageScaleY,
            java_values($paragraphRectangle->getWidth()) * $imageScaleX,
            java_values($paragraphRectangle->getHeight()) * $imageScaleY
    );

    // 출력 이미지의 좌표와 크기를 계산합니다 (최소 크기 - 1x1 픽셀).
    $imageX = floor(java_values($paragraphRectangle->getX()));
    $imageY = floor(java_values($paragraphRectangle->getY()));
    $imageWidth = max(1, ceil(java_values($paragraphRectangle->getWidth())));
    $imageHeight = max(1, ceil(java_values($paragraphRectangle->getHeight())));

    // 도형 비트맵을 잘라서 단락 비트맵만 얻습니다.
    $paragraphBitmap = $shapeBitmap->getSubimage($imageX, $imageY, $imageWidth, $imageHeight);

    $imageIO->write($paragraphBitmap, "png", new Java("java.io.File", "paragraph.png"));
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}
```

## **FAQ**

**텍스트 프레임 내부에서 줄 바꿈을 완전히 비활성화할 수 있나요?**

예. 텍스트 프레임의 줄 바꿈 설정([setWrapText](https://reference.aspose.com/slides/ko/php-java/aspose.slides/textframeformat/setwraptext/))을 사용해 줄 바꿈을 끄면 프레임 가장자에서 줄이 끊기지 않습니다.

**특정 단락의 슬라이드 상 정확한 경계를 어떻게 얻나요?**

단락(또는 개별 구문)의 경계 사각형을 가져와 슬라이드 상에서 정확한 위치와 크기를 확인할 수 있습니다.

**단락 정렬(왼쪽/오른쪽/가운데/양쪽 맞춤)은 어디서 제어하나요?**

[Alignment](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/setalignment/)은 [ParagraphFormat](https://reference.aspose.com/slides/ko/php-java/aspose.slides/paragraphformat/)의 단락 수준 설정으로, 개별 구문의 서식과 무관하게 전체 단락에 적용됩니다.

**단락의 일부분(예: 한 단어)만 맞춤법 확인 언어를 설정할 수 있나요?**

예. 언어는 구문 수준([PortionFormat::setLanguageId](https://reference.aspose.com/slides/ko/php-java/aspose.slides/baseportionformat/#setLanguageId))에서 설정되므로 단일 단락 내에 여러 언어를 동시에 사용할 수 있습니다.
