PHP에서 PowerPoint 텍스트 단락 관리

소개

Aspose.Slides는 PowerPoint 텍스트, 단락 및 구문을 작업하는 데 필요한 모든 클래스를 제공합니다.

  • Aspose.Slides는 단락을 나타내는 개체를 추가할 수 있는 TextFrame 클래스를 제공합니다. TextFame 객체는 하나 이상의 단락을 가질 수 있습니다(각 단락은 캐리지 리턴을 통해 생성됩니다).
  • Aspose.Slides는 구문을 나타내는 개체를 추가할 수 있는 Paragraph 클래스를 제공합니다. Paragraph 객체는 하나 이상의 구문(구문 개체의 컬렉션)을 가질 수 있습니다.
  • Aspose.Slides는 텍스트와 해당 서식 속성을 나타내는 개체를 추가할 수 있는 Portion 클래스를 제공합니다.

Paragraph 객체는 기본 Portion 객체를 통해 서로 다른 서식 속성을 가진 텍스트를 처리할 수 있습니다.

여러 구문을 포함하는 여러 단락 추가

다음 단계에서는 3개의 단락을 포함하고 각 단락이 3개의 구문을 포함하는 텍스트 프레임을 추가하는 방법을 보여줍니다.

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
  3. 슬라이드에 사각형 AutoShape을 추가합니다.
  4. AutoShape와 연결된 ITextFrame을 가져옵니다.
  5. 두 개의 Paragraph 객체를 생성하고 이를 TextFrame의 단락 컬렉션에 추가합니다.
  6. 각 새로운 Paragraph에 대해 세 개의 Portion 객체를 생성(기본 Paragraph의 경우 두 개)하고 각 Portion 객체를 해당 Paragraph의 구문 컬렉션에 추가합니다.
  7. 각 구문에 텍스트를 설정합니다.
  8. Portion 객체가 제공하는 서식 속성을 사용해 각 구문에 원하는 서식 기능을 적용합니다.
  9. 수정된 프레젠테이션을 저장합니다.

이 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 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
  3. 선택한 슬라이드에 AutoShape을 추가합니다.
  4. 자동 도형의 TextFrame에 접근합니다.
  5. TextFrame의 기본 단락을 제거합니다.
  6. Paragraph 클래스를 사용해 첫 번째 단락 인스턴스를 생성합니다.
  7. 단락의 글머리표 TypeSymbol로 설정하고 글머리표 문자를 지정합니다.
  8. 단락 Text를 설정합니다.
  9. 글머리표에 대한 단락 Indent를 설정합니다.
  10. 글머리표 색상을 지정합니다.
  11. 글머리표 높이를 지정합니다.
  12. 새 단락을 TextFrame 단락 컬렉션에 추가합니다.
  13. 두 번째 단락을 추가하고 7~13단계를 반복합니다.
  14. 프레젠테이션을 저장합니다.

이 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 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
  3. 슬라이드에 AutoShape을 추가합니다.
  4. 자동 도형의 TextFrame에 접근합니다.
  5. TextFrame의 기본 단락을 제거합니다.
  6. Paragraph 클래스를 사용해 첫 번째 단락 인스턴스를 생성합니다.
  7. PPImage에 이미지를 로드합니다.
  8. 글머리표 유형을 Picture로 설정하고 이미지를 지정합니다.
  9. 단락 Text를 설정합니다.
  10. 글머리표에 대한 단락 Indent를 설정합니다.
  11. 글머리표 색상을 지정합니다.
  12. 글머리표 높이를 지정합니다.
  13. 새 단락을 TextFrame 단락 컬렉션에 추가합니다.
  14. 두 번째 단락을 추가하고 이전 단계들을 반복합니다.
  15. 수정된 프레젠테이션을 저장합니다.

이 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 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
  3. 새 슬라이드에 AutoShape을 추가합니다.
  4. 자동 도형의 TextFrame에 접근합니다.
  5. TextFrame의 기본 단락을 제거합니다.
  6. Paragraph 클래스를 통해 첫 번째 단락 인스턴스를 생성하고 깊이를 0으로 설정합니다.
  7. Paragraph 클래스를 통해 두 번째 단락 인스턴스를 생성하고 깊이를 1로 설정합니다.
  8. Paragraph 클래스를 통해 세 번째 단락 인스턴스를 생성하고 깊이를 2로 설정합니다.
  9. Paragraph 클래스를 통해 네 번째 단락 인스턴스를 생성하고 깊이를 3으로 설정합니다.
  10. 새 단락들을 TextFrame 단락 컬렉션에 추가합니다.
  11. 수정된 프레젠테이션을 저장합니다.

이 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 클래스는 setNumberedBulletStartWith 메서드 등 번호 매기기 또는 서식을 사용자 지정할 수 있는 기능을 제공합니다.

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 단락이 포함된 슬라이드에 접근합니다.
  3. 슬라이드에 AutoShape을 추가합니다.
  4. 자동 도형의 TextFrame에 접근합니다.
  5. TextFrame의 기본 단락을 제거합니다.
  6. Paragraph 클래스를 통해 첫 번째 단락 인스턴스를 생성하고 NumberedBulletStartWith을 2로 설정합니다.
  7. Paragraph 클래스를 통해 두 번째 단락 인스턴스를 생성하고 NumberedBulletStartWith를 3으로 설정합니다.
  8. Paragraph 클래스를 통해 세 번째 단락 인스턴스를 생성하고 NumberedBulletStartWith를 7로 설정합니다.
  9. 새 단락들을 TextFrame 단락 컬렉션에 추가합니다.
  10. 수정된 프레젠테이션을 저장합니다.

이 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 메서드를 사용하면 단락의 첫 줄 들여쓰기를 제어할 수 있습니다. 이 메서드는 단락 왼쪽 여백에 대해 첫 줄만 이동합니다. 양수 값은 첫 줄을 오른쪽으로 이동하고, 나머지 줄은 단락 본문에 맞게 정렬됩니다.

전체 단락을 이동하려면 ParagraphFormat::setMarginLeft를 사용하고, 첫 줄만 이동하려면 ParagraphFormat::setIndent를 사용합니다.

아래 예시는 여러 단락을 생성하고 서로 다른 들여쓰기 값을 적용하여 첫 줄 들여쓰기가 단락 레이아웃에 미치는 영향을 보여 줍니다.

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 대상 슬라이드에 접근합니다.
  3. 슬라이드에 사각형 AutoShape을 추가합니다.
  4. 도형에 빈 TextFrame을 추가하고 기본 단락을 제거합니다.
  5. 여러 단락을 생성하고 각각에 대해 다른 Indent 값을 설정합니다.
  6. 단락들을 텍스트 프레임에 추가합니다.
  7. 수정된 프레젠테이션을 저장합니다.

이 코드는 단락 들여쓰기를 설정하는 방법을 보여줍니다:

$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

단락의 매달린 들여쓰기 설정

매달린 들여쓰기는 첫 번째 줄이 나머지 줄보다 왼쪽에 시작되는 단락 레이아웃입니다. Aspose.Slides에서는 ParagraphFormat::setIndent 메서드에 음수 값을 지정하여 첫 줄을 왼쪽으로 이동시켜 이 효과를 만들 수 있습니다.

실제로는 ParagraphFormat::setMarginLeft이 단락 본문의 왼쪽 위치를 정의하고, ParagraphFormat::setIndent이 해당 여백에 대한 첫 줄 위치를 정의합니다. 매달린 들여쓰기를 만들려면 양수 MarginLeft 값과 음수 Indent 값을 설정합니다.

이 서식은 참고문헌, 인용구, 용어 해설 등 줄 바꿈이 단락 본문 아래에 정렬되어야 하는 경우에 유용합니다.

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 대상 슬라이드에 접근합니다.
  3. 슬라이드에 사각형 AutoShape을 추가합니다.
  4. 도형에 빈 TextFrame을 추가하고 기본 단락을 제거합니다.
  5. 각 단락에 대해 양수 MarginLeft 값을 설정합니다.
  6. 매달린 들여쓰기 효과를 만들기 위해 음수 Indent 값을 설정합니다.
  7. 단락들을 텍스트 프레임에 추가합니다.
  8. 수정된 프레젠테이션을 저장합니다.

이 코드는 단락에 매달린 들여쓰기를 설정하는 방법을 보여줍니다:

$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

단락 종료 실행 속성 관리

  1. Presentation 클래스의 인스턴스를 생성합니다.
  2. 위치를 통해 단락이 포함된 슬라이드의 참조를 가져옵니다.
  3. 슬라이드에 사각형 AutoShape을 추가합니다.
  4. 사각형에 두 개의 단락이 있는 TextFrame을 추가합니다.
  5. 단락의 글꼴 높이와 글꼴 유형을 설정합니다.
  6. 단락의 End 속성을 설정합니다.
  7. 수정된 프레젠테이션을 PPTX 파일로 저장합니다.

이 PHP 코드는 PowerPoint 단락에 대한 End 속성을 설정하는 방법을 보여줍니다:

$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 클래스의 인스턴스를 생성합니다.
  2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
  3. 슬라이드에 AutoShape을 추가합니다.
  4. AutoShapeTextFrame을 추가하고 접근합니다.
  5. TextFrame의 기본 단락을 제거합니다.
  6. TextReader에서 원본 HTML 파일을 읽습니다.
  7. Paragraph 클래스를 통해 첫 번째 단락 인스턴스를 생성합니다.
  8. 읽은 TextReader의 HTML 파일 내용을 TextFrame의 ParagraphCollection에 추가합니다.
  9. 수정된 프레젠테이션을 저장합니다.

이 PHP 코드는 단락에 HTML 텍스트를 가져오는 단계의 구현 예시입니다:

# 빈 프레젠테이션 인스턴스를 생성합니다
$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 클래스의 인스턴스를 생성하고 원하는 프레젠테이션을 로드합니다.
  2. 인덱스를 통해 해당 슬라이드의 참조에 접근합니다.
  3. HTML로 내보낼 텍스트가 포함된 도형에 접근합니다.
  4. 도형의 TextFrame에 접근합니다.
  5. StreamWriter 인스턴스를 생성하고 새 HTML 파일을 추가합니다.
  6. 시작 인덱스를 지정하여 StreamWriter에 전달하고 원하는 단락을 내보냅니다.

이 PHP 코드는 PowerPoint 단락 텍스트를 HTML로 내보내는 방법을 보여줍니다:

# 프레젠테이션 파일을 로드합니다
$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 클래스로 표현되는 텍스트 단락을 이미지로 저장하는 두 가지 예제를 살펴봅니다. 두 예제 모두 Shape 클래스의 getImage 메서드를 사용해 단락이 포함된 도형의 이미지를 얻고, 도형 내에서 단락의 경계를 계산한 뒤 비트맵 이미지로 내보냅니다. 이러한 접근 방식은 PowerPoint 프레젠테이션에서 텍스트의 특정 부분을 추출해 별도 이미지로 저장해야 하는 다양한 시나리오에 유용합니다.

예제로 사용할 프레젠테이션 파일은 sample.pptx이며, 첫 번째 도형은 세 개의 단락을 포함하는 텍스트 상자입니다.

The text box with three paragraphs

예제 1

이 예제에서는 두 번째 단락을 이미지로 얻습니다. 프레젠테이션의 첫 번째 슬라이드에서 도형 이미지를 추출한 다음, 해당 도형 텍스트 프레임에서 두 번째 단락의 경계를 계산합니다. 그런 다음 단락을 새 비트맵 이미지에 다시 그려 PNG 형식으로 저장합니다. 이 방법은 특정 단락을 정확한 크기와 서식을 유지하면서 별도 이미지로 저장해야 할 때 특히 유용합니다.

$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

예제 2

이 예제에서는 이전 접근 방식에 스케일링 계수를 추가합니다. 도형을 프레젠테이션에서 추출하고 스케일 계수 2로 이미지로 저장합니다. 이를 통해 단락을 내보낼 때 고해상도 출력을 얻을 수 있습니다. 그 후 스케일을 고려하여 단락 경계를 계산합니다. 스케일링은 고품질 인쇄물 등 더 상세한 이미지가 필요할 때 특히 유용합니다.

$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)을 사용해 줄 바꿈을 끄면 프레임 가장자에서 줄이 끊기지 않습니다.

특정 단락의 슬라이드 상 정확한 경계를 어떻게 얻나요?

단락(또는 개별 구문)의 경계 사각형을 가져와 슬라이드 상에서 정확한 위치와 크기를 확인할 수 있습니다.

단락 정렬(왼쪽/오른쪽/가운데/양쪽 맞춤)은 어디서 제어하나요?

AlignmentParagraphFormat의 단락 수준 설정으로, 개별 구문의 서식과 무관하게 전체 단락에 적용됩니다.

단락의 일부분(예: 한 단어)만 맞춤법 확인 언어를 설정할 수 있나요?

예. 언어는 구문 수준(PortionFormat::setLanguageId)에서 설정되므로 단일 단락 내에 여러 언어를 동시에 사용할 수 있습니다.