JavaScript에서 PowerPoint 텍스트 단락 관리

소개

Aspose.Slides는 Java에서 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 개체를 생성하고 이를 TextFrameIParagraphs 컬렉션에 추가합니다.
  6. 각 새로운 Paragraph에 대해 세 개의 Portion 개체를 생성(기본 단락에는 두 개의 Portion)하고 각 Portion 개체를 해당 Paragraph의 IPortion 컬렉션에 추가합니다.
  7. 각 구문에 텍스트를 설정합니다.
  8. Portion 개체가 제공하는 서식 속성을 사용하여 각 구문에 원하는 서식을 적용합니다.
  9. 수정된 프레젠테이션을 저장합니다.

다음 Javascript 코드는 구문을 포함하는 단락을 추가하는 단계를 구현한 예시입니다:

// PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
var pres = new aspose.slides.Presentation();
try {
    // 첫 번째 슬라이드에 접근합니다
    var slide = pres.getSlides().get_Item(0);
    // Rectangle 유형의 AutoShape을 추가합니다
    var ashp = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 150, 300, 150);
    // AutoShape의 TextFrame에 접근합니다
    var tf = ashp.getTextFrame();
    // 다양한 텍스트 형식으로 Paragraph와 Portion을 생성합니다
    var para0 = tf.getParagraphs().get_Item(0);
    var port01 = new aspose.slides.Portion();
    var port02 = new aspose.slides.Portion();
    para0.getPortions().add(port01);
    para0.getPortions().add(port02);
    var para1 = new aspose.slides.Paragraph();
    tf.getParagraphs().add(para1);
    var port10 = new aspose.slides.Portion();
    var port11 = new aspose.slides.Portion();
    var port12 = new aspose.slides.Portion();
    para1.getPortions().add(port10);
    para1.getPortions().add(port11);
    para1.getPortions().add(port12);
    var para2 = new aspose.slides.Paragraph();
    tf.getParagraphs().add(para2);
    var port20 = new aspose.slides.Portion();
    var port21 = new aspose.slides.Portion();
    var port22 = new aspose.slides.Portion();
    para2.getPortions().add(port20);
    para2.getPortions().add(port21);
    para2.getPortions().add(port22);
    for (var i = 0; i < 3; i++) {
        for (var j = 0; j < 3; j++) {
            var portion = tf.getParagraphs().get_Item(i).getPortions().get_Item(j);
            portion.setText("Portion0" + j);
            if (j == 0) {
                portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
                portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "RED"));
                portion.getPortionFormat().setFontBold(aspose.slides.NullableBool.True);
                portion.getPortionFormat().setFontHeight(15);
            } else if (j == 1) {
                portion.getPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
                portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLUE"));
                portion.getPortionFormat().setFontItalic(aspose.slides.NullableBool.True);
                portion.getPortionFormat().setFontHeight(18);
            }
        }
    }
    // PPTX를 디스크에 저장합니다
    pres.save("multiParaPort_out.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        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~12단계를 반복합니다.
  14. 프레젠테이션을 저장합니다.

다음 Javascript 코드는 단락 글머리표를 추가하는 방법을 보여줍니다:

    // PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
    var pres = new aspose.slides.Presentation();
    try {
        // 첫 번째 슬라이드에 접근합니다
        var slide = pres.getSlides().get_Item(0);
        // AutoShape을 추가하고 접근합니다
        var aShp = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 200, 200, 400, 200);
        // AutoShape의 텍스트 프레임에 접근합니다
        var txtFrm = aShp.getTextFrame();
        // 기본 단락을 제거합니다
        txtFrm.getParagraphs().removeAt(0);
        // 단락을 생성합니다
        var para = new aspose.slides.Paragraph();
        // 단락 글머리표 스타일과 기호를 설정합니다
        para.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Symbol);
        para.getParagraphFormat().getBullet().setChar(8226);
        // 단락 텍스트를 설정합니다
        para.setText("Welcome to Aspose.Slides");
        // 글머리표 들여쓰기를 설정합니다
        para.getParagraphFormat().setIndent(25);
        // 글머리표 색상을 설정합니다
        para.getParagraphFormat().getBullet().getColor().setColorType(aspose.slides.ColorType.RGB);
        para.getParagraphFormat().getBullet().getColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
        para.getParagraphFormat().getBullet().setBulletHardColor(aspose.slides.NullableBool.True);// IsBulletHardColor를 true로 설정하여 자체 글머리표 색상을 사용합니다
        // 글머리표 높이를 설정합니다
        para.getParagraphFormat().getBullet().setHeight(100);
        // 단락을 텍스트 프레임에 추가합니다
        txtFrm.getParagraphs().add(para);
        // 두 번째 단락을 생성합니다
        var para2 = new aspose.slides.Paragraph();
        // 단락 글머리표 유형과 스타일을 설정합니다
        para2.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Numbered);
        para2.getParagraphFormat().getBullet().setNumberedBulletStyle(aspose.slides.NumberedBulletStyle.BulletCircleNumWDBlackPlain);
        // 단락 텍스트를 추가합니다
        para2.setText("This is numbered bullet");
        // 글머리표 들여쓰기를 설정합니다
        para2.getParagraphFormat().setIndent(25);
        // 글머리표 색상을 설정합니다
        para2.getParagraphFormat().getBullet().getColor().setColorType(aspose.slides.ColorType.RGB);
        para2.getParagraphFormat().getBullet().getColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
        para2.getParagraphFormat().getBullet().setBulletHardColor(aspose.slides.NullableBool.True);// IsBulletHardColor를 true로 설정하여 자체 글머리표 색상을 사용합니다
        // 글머리표 높이를 설정합니다
        para2.getParagraphFormat().getBullet().setHeight(100);
        // 단락을 텍스트 프레임에 추가합니다
        txtFrm.getParagraphs().add(para2);
        // 수정된 프레젠테이션을 저장합니다
        pres.save("Bullet_out.pptx", aspose.slides.SaveFormat.Pptx);
    } finally {
        if (pres != null) {
            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. 수정된 프레젠테이션을 저장합니다.

다음 Javascript 코드는 그림 글머리표를 추가하고 관리하는 방법을 보여줍니다:

// PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
var presentation = new aspose.slides.Presentation();
try {
    // 첫 번째 슬라이드에 접근합니다
    var slide = presentation.getSlides().get_Item(0);
    // 글머리표용 이미지를 인스턴스화합니다
    var picture;
    var image = aspose.slides.Images.fromFile("bullets.png");
    try {
        picture = presentation.getImages().addImage(image);
    } finally {
        if (image != null) {
            image.dispose();
        }
    }
    // AutoShape을 추가하고 접근합니다
    var autoShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 200, 200, 400, 200);
    // AutoShape의 텍스트 프레임에 접근합니다
    var textFrame = autoShape.getTextFrame();
    // 기본 단락을 제거합니다
    textFrame.getParagraphs().removeAt(0);
    // 새 단락을 생성합니다
    var paragraph = new aspose.slides.Paragraph();
    paragraph.setText("Welcome to Aspose.Slides");
    // 단락 글머리표 스타일과 이미지를 설정합니다
    paragraph.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Picture);
    paragraph.getParagraphFormat().getBullet().getPicture().setImage(picture);
    // 글머리표 높이를 설정합니다
    paragraph.getParagraphFormat().getBullet().setHeight(100);
    // 단락을 텍스트 프레임에 추가합니다
    textFrame.getParagraphs().add(paragraph);
    // 프레젠테이션을 PPTX 파일로 저장합니다
    presentation.save("ParagraphPictureBulletsPPTX_out.pptx", aspose.slides.SaveFormat.Pptx);
    // 프레젠테이션을 PPT 파일로 저장합니다
    presentation.save("ParagraphPictureBulletsPPT_out.ppt", aspose.slides.SaveFormat.Ppt);
} catch (e) {console.log(e);
} finally {
    if (presentation != null) {
        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. 수정된 프레젠테이션을 저장합니다.

다음 Javascript 코드는 다단계 글머리표를 추가하고 관리하는 방법을 보여줍니다:

// PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다
var pres = new aspose.slides.Presentation();
try {
    // 첫 번째 슬라이드에 접근합니다
    var slide = pres.getSlides().get_Item(0);
    // AutoShape을 추가하고 접근합니다
    var aShp = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 200, 200, 400, 200);
    // 생성된 AutoShape의 텍스트 프레임에 접근합니다
    var text = aShp.addTextFrame("");
    // 기본 단락을 삭제합니다
    text.getParagraphs().clear();
    // 첫 번째 단락을 추가합니다
    var para1 = new aspose.slides.Paragraph();
    para1.setText("Content");
    para1.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Symbol);
    para1.getParagraphFormat().getBullet().setChar(8226);
    para1.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    para1.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    // 글머리표 수준을 설정합니다
    para1.getParagraphFormat().setDepth(0);
    // 두 번째 단락을 추가합니다
    var para2 = new aspose.slides.Paragraph();
    para2.setText("Second Level");
    para2.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Symbol);
    para2.getParagraphFormat().getBullet().setChar('-');
    para2.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    para2.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    // 글머리표 수준을 설정합니다
    para2.getParagraphFormat().setDepth(1);
    // 세 번째 단락을 추가합니다
    var para3 = new aspose.slides.Paragraph();
    para3.setText("Third Level");
    para3.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Symbol);
    para3.getParagraphFormat().getBullet().setChar(8226);
    para3.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    para3.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "BLACK"));
    // 글머리표 수준을 설정합니다
    para3.getParagraphFormat().setDepth(2);
    // 네 번째 단락을 추가합니다
    var para4 = new aspose.slides.Paragraph();
    para4.setText("Fourth Level");
    para4.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Symbol);
    para4.getParagraphFormat().getBullet().setChar('-');
    para4.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    para4.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

사용자 지정 번호 매기기 목록이 있는 단락 관리

BulletFormat 클래스는 NumberedBulletStartWith 속성 등 여러 속성을 제공하여 사용자 지정 번호 매기기 또는 서식이 적용된 단락을 관리할 수 있게 합니다.

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

다음 Javascript 코드는 사용자 지정 번호 매기기 또는 서식이 적용된 단락을 추가하고 관리하는 방법을 보여줍니다:

var presentation = new aspose.slides.Presentation();
try {
    var shape = presentation.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 200, 200, 400, 200);
    // 생성된 AutoShape의 텍스트 프레임에 접근합니다
    var textFrame = shape.getTextFrame();
    // 기본 존재 단락을 제거합니다
    textFrame.getParagraphs().removeAt(0);
    // 첫 번째 목록
    var paragraph1 = new aspose.slides.Paragraph();
    paragraph1.setText("bullet 2");
    paragraph1.getParagraphFormat().setDepth(4);
    paragraph1.getParagraphFormat().getBullet().setNumberedBulletStartWith(2);
    paragraph1.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Numbered);
    textFrame.getParagraphs().add(paragraph1);
    var paragraph2 = new aspose.slides.Paragraph();
    paragraph2.setText("bullet 3");
    paragraph2.getParagraphFormat().setDepth(4);
    paragraph2.getParagraphFormat().getBullet().setNumberedBulletStartWith(3);
    paragraph2.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Numbered);
    textFrame.getParagraphs().add(paragraph2);
    var paragraph5 = new aspose.slides.Paragraph();
    paragraph5.setText("bullet 7");
    paragraph5.getParagraphFormat().setDepth(4);
    paragraph5.getParagraphFormat().getBullet().setNumberedBulletStartWith(7);
    paragraph5.getParagraphFormat().getBullet().setType(aspose.slides.BulletType.Numbered);
    textFrame.getParagraphs().add(paragraph5);
    presentation.save("SetCustomBulletsNumber-slides.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

단락에 첫 줄 들여쓰기 적용

ParagraphFormat.setIndent 메서드를 사용하여 단락의 첫 줄 들여쓰기를 제어합니다. 이 메서드는 단락의 왼쪽 여백에 상대적으로 첫 번째 줄만 이동합니다. 양수 값은 첫 줄을 오른쪽으로 이동시키고, 나머지 줄은 본문에 맞춰 정렬됩니다.

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

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

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

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

let presentation = new aspose.slides.Presentation();
try {
    let slide = presentation.getSlides().get_Item(0);

    let rectangleShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 50, 420, 220);
    rectangleShape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
    rectangleShape.getLineFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    rectangleShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "GRAY"));

    let textFrame = rectangleShape.addTextFrame("");
    textFrame.getTextFrameFormat().setAutofitType(java.newByte(aspose.slides.TextAutofitType.Shape));
    textFrame.getParagraphs().removeAt(0);

    let firstParagraph = new aspose.slides.Paragraph();
    firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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);
    firstParagraph.getParagraphFormat().setIndent(0);

    let secondParagraph = new aspose.slides.Paragraph();
    secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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);
    secondParagraph.getParagraphFormat().setIndent(20);

    let thirdParagraph = new aspose.slides.Paragraph();
    thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    thirdParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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);
    thirdParagraph.getParagraphFormat().setIndent(40);

    textFrame.getParagraphs().add(firstParagraph);
    textFrame.getParagraphs().add(secondParagraph);
    textFrame.getParagraphs().add(thirdParagraph);

    presentation.save("paragraph_indent.pptx", aspose.slides.SaveFormat.Pptx);
}
finally {
    presentation.dispose();
}

결과:

단락의 첫 줄 들여쓰기

단락에 매달린 들여쓰기 적용

매달린 들여쓰기란 첫 줄이 나머지 줄보다 왼쪽에 시작되는 단락 레이아웃을 말합니다. Aspose.Slides에서는 ParagraphFormat.setIndent 메서드에 음수 값을 지정하여 첫 줄을 본문보다 왼쪽으로 이동시킵니다.

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

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

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

다음 코드는 단락에 매달린 들여쓰기를 적용하는 방법을 보여줍니다:

let presentation = new aspose.slides.Presentation();
try {
    let slide = presentation.getSlides().get_Item(0);

    let rectangleShape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 50, 50, 420, 220);
    rectangleShape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
    rectangleShape.getLineFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    rectangleShape.getLineFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("java.awt.Color", "GRAY"));

    let textFrame = rectangleShape.addTextFrame("");
    textFrame.getTextFrameFormat().setAutofitType(java.newByte(aspose.slides.TextAutofitType.Shape));
    textFrame.getParagraphs().removeAt(0);

    let firstParagraph = new aspose.slides.Paragraph();
    firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    firstParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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);
    firstParagraph.getParagraphFormat().setIndent(-20);

    let secondParagraph = new aspose.slides.Paragraph();
    secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().setFillType(java.newByte(aspose.slides.FillType.Solid));
    secondParagraph.getParagraphFormat().getDefaultPortionFormat().getFillFormat().getSolidFillColor().setColor(java.getStaticFieldValue("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);
    secondParagraph.getParagraphFormat().setIndent(-30);

    textFrame.getParagraphs().add(firstParagraph);
    textFrame.getParagraphs().add(secondParagraph);

    presentation.save("hanging_indent.pptx", aspose.slides.SaveFormat.Pptx);
}
finally {
    presentation.dispose();
}

결과:

단락의 매달린 들여쓰기

단락 종료 실행 속성 관리

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

다음 Javascript 코드는 PowerPoint 단락의 End 속성을 설정하는 방법을 보여줍니다:

var pres = new aspose.slides.Presentation();
try {
    var shape = pres.getSlides().get_Item(0).getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, 200, 250);
    var para1 = new aspose.slides.Paragraph();
    para1.getPortions().add(new aspose.slides.Portion("Sample text"));
    var para2 = new aspose.slides.Paragraph();
    para2.getPortions().add(new aspose.slides.Portion("Sample text 2"));
    var portionFormat = new aspose.slides.PortionFormat();
    portionFormat.setFontHeight(48);
    portionFormat.setLatinFont(new aspose.slides.FontData("Times New Roman"));
    para2.setEndParagraphPortionFormat(portionFormat);
    shape.getTextFrame().getParagraphs().add(para1);
    shape.getTextFrame().getParagraphs().add(para2);
    pres.save(resourcesOutputPath + "pres.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        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. 수정된 프레젠테이션을 저장합니다.

다음 Javascript 코드는 HTML 텍스트를 단락으로 가져오는 단계 구현 예시입니다:

// 빈 프레젠테이션 인스턴스를 생성합니다
var pres = new aspose.slides.Presentation();
try {
    // 프레젠테이션의 기본 첫 번째 슬라이드에 접근합니다
    var slide = pres.getSlides().get_Item(0);
    // HTML 내용을 수용하기 위해 AutoShape을 추가합니다
    var ashape = slide.getShapes().addAutoShape(aspose.slides.ShapeType.Rectangle, 10, 10, pres.getSlideSize().getSize().getWidth() - 20, pres.getSlideSize().getSize().getHeight() - 10);
    ashape.getFillFormat().setFillType(java.newByte(aspose.slides.FillType.NoFill));
    // 도형에 텍스트 프레임을 추가합니다
    ashape.addTextFrame("");
    // 추가된 텍스트 프레임의 모든 단락을 제거합니다
    ashape.getTextFrame().getParagraphs().clear();
    // 스트림 리더를 사용해 HTML 파일을 로드합니다
    var tr = java.newInstanceSync("StreamReader", "file.html");
    // 텍스트 프레임에 HTML 스트림 리더의 텍스트를 추가합니다
    ashape.getTextFrame().getParagraphs().addFromHtml(tr.readToEnd());
    // 프레젠테이션을 저장합니다
    pres.save("output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

단락 텍스트를 HTML로 내보내기

Aspose.Slides는 단락에 포함된 텍스트를 HTML로 내보내는 기능을 강화했습니다.

  1. Presentation 클래스의 인스턴스를 생성하고 원하는 프레젠테이션을 로드합니다.
  2. 인덱스를 통해 해당 슬라이드에 대한 참조에 접근합니다.
  3. HTML로 내보낼 텍스트가 포함된 도형에 접근합니다.
  4. 도형의 TextFrame에 접근합니다.
  5. StreamWriter 인스턴스를 생성하고 새 HTML 파일을 추가합니다.
  6. 시작 인덱스를 StreamWriter에 제공하고 원하는 단락을 내보냅니다.

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

// 프레젠테이션 파일을 로드합니다
var pres = new aspose.slides.Presentation("ExportingHTMLText.pptx");
try {
    // 프레젠테이션의 기본 첫 번째 슬라이드에 접근합니다
    var slide = pres.getSlides().get_Item(0);
    // 원하는 인덱스
    var index = 0;
    // 추가된 도형에 접근합니다
    var ashape = slide.getShapes().get_Item(index);
    // 출력 HTML 파일을 생성합니다
    var os = java.newInstanceSync("java.io.FileOutputStream", "output.html");
    var writer = java.newInstanceSync("java.io.OutputStreamWriter", os, "UTF-8");
    // 첫 번째 단락을 HTML로 추출합니다
    // 단락 시작 인덱스와 복사할 총 단락 수를 지정하여 단락 데이터를 HTML로 작성합니다
    writer.write(ashape.getTextFrame().getParagraphs().exportToHtml(0, ashape.getTextFrame().getParagraphs().getCount(), null));
    writer.close();
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

단락을 이미지로 저장

이 섹션에서는 Paragraph 클래스로 표현되는 텍스트 단락을 이미지로 저장하는 두 가지 예제를 살펴봅니다. 두 예제 모두 Shape 클래스의 getImage 메서드를 사용해 단락을 포함하는 도형의 이미지를 얻고, 도형 내 단락의 경계를 계산한 뒤 비트맵 이미지로 내보내는 과정을 포함합니다. 이러한 방법을 통해 PowerPoint 프레젠테이션에서 텍스트의 특정 부분을 추출하여 별도 이미지로 저장할 수 있어 다양한 시나리오에 활용하기 편리합니다.

예제로 사용할 프레젠테이션 파일은 sample.pptx이며, 하나의 슬라이드에 첫 번째 도형이 세 개의 단락을 포함한 텍스트 상자라고 가정합니다.

세 개의 단락이 포함된 텍스트 상자

예제 1

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

const imageio = java.import("javax.imageio.ImageIO");
const presentation = new aspose.slides.Presentation("sample.pptx");
try {
    const firstShape = presentation.getSlides().get_Item(0).getShapes().get_Item(0);

    // 메모리에서 도형을 비트맵으로 저장합니다.
    const shapeImage = firstShape.getImage();
        
    const shapeImageStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
    shapeImage.save(shapeImageStream, aspose.slides.ImageFormat.Png);
    shapeImage.dispose();
    shapeImageStream.flush();
    
    // 메모리에서 도형 비트맵을 생성합니다.
    const byteBuffer = java.callMethodSync(shapeImageStream, "toByteArray");    
    const javaBytes = java.newArray("byte", Array.from(byteBuffer));
    const ByteArrayInputStream = java.import("java.io.ByteArrayInputStream");
    const shapeImageInputStream = new ByteArrayInputStream(javaBytes);
    const shapeBitmap = imageio.read(shapeImageInputStream);

    // 두 번째 단락의 경계 영역을 계산합니다.
    const secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
    const paragraphRectangle = secondParagraph.getRect();

    // 출력 이미지의 좌표와 크기를 계산합니다 (최소 크기 - 1x1 픽셀).
    const imageX = Math.floor(paragraphRectangle.getX());
    const imageY = Math.floor(paragraphRectangle.getY());
    const imageWidth = Math.max(1, Math.ceil(paragraphRectangle.getWidth()));
    const imageHeight = Math.max(1, Math.ceil(paragraphRectangle.getHeight()));

    // 도형 비트맵을 잘라서 단락 비트맵만 얻습니다.
    const paragraphBitmap = shapeBitmap.getSubimage(imageX, imageY, imageWidth, imageHeight);

    const file = java.newInstanceSync("java.io.File", "paragraph.png");

    imageio.write(paragraphBitmap, "png", file);
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

결과:

단락 이미지

예제 2

이 예제에서는 이전 방법에 스케일링 팩터를 추가합니다. 도형을 추출하고 스케일 팩터 2로 이미지로 저장하여 고해상도 출력을 얻습니다. 그런 다음 스케일을 고려하여 단락 경계를 계산합니다. 스케일링은 고품질 인쇄물 등 자세한 이미지가 필요할 때 유용합니다.

const imageScaleX = 2;
const imageScaleY = imageScaleX;

const imageio = java.import("javax.imageio.ImageIO");
const presentation = new aspose.slides.Presentation("sample.pptx");
try {
    const firstShape = presentation.getSlides().get_Item(0).getShapes().get_Item(0);

    // 스케일링을 적용하여 도형을 메모리의 비트맵으로 저장합니다.
    const shapeImage = firstShape.getImage(aspose.slides.ShapeThumbnailBounds.Shape, imageScaleX, imageScaleY);
    const shapeImageStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
    shapeImage.save(shapeImageStream, aspose.slides.ImageFormat.Png);
    shapeImage.dispose();

    // 메모리에서 도형 비트맵을 생성합니다.
    const byteBuffer = java.callMethodSync(shapeImageStream, "toByteArray");    
    const javaBytes = java.newArray("byte", Array.from(byteBuffer));
    const ByteArrayInputStream = java.import("java.io.ByteArrayInputStream");
    const shapeImageInputStream = new ByteArrayInputStream(javaBytes);
    const shapeBitmap = imageio.read(shapeImageInputStream);

    // 두 번째 단락의 경계 영역을 계산합니다.
    const secondParagraph = firstShape.getTextFrame().getParagraphs().get_Item(1);
    const paragraphRectangle = secondParagraph.getRect();
    paragraphRectangle.setRect(
            paragraphRectangle.getX() * imageScaleX,
            paragraphRectangle.getY() * imageScaleY,
            paragraphRectangle.getWidth() * imageScaleX,
            paragraphRectangle.getHeight() * imageScaleY
    );

    // 출력 이미지의 좌표와 크기를 계산합니다 (최소 크기 - 1x1 픽셀).
    const imageX = Math.floor(paragraphRectangle.getX());
    const imageY = Math.floor(paragraphRectangle.getY());
    const imageWidth = Math.max(1, Math.ceil(paragraphRectangle.getWidth()));
    const imageHeight = Math.max(1, Math.ceil(paragraphRectangle.getHeight()));

    // 도형 비트맵을 잘라 단락 비트맵만 얻습니다.
    const paragraphBitmap = shapeBitmap.getSubimage(imageX, imageY, imageWidth, imageHeight);

    const file = java.newInstanceSync("java.io.File", "paragraph.png");

    imageio.write(paragraphBitmap, "png", file);
} finally {
    if (presentation != null) {
        presentation.dispose();
    }
}

FAQ

텍스트 프레임 안에서 줄 바꿈을 완전히 비활성화할 수 있나요?

예. 텍스트 프레임의 줄 바꿈 설정(setWrapText)을 사용해 줄 바꿈을 끄면 프레임 가장자리에서 줄이 깨지지 않습니다.

특정 단락의 정확한 슬라이드 상 위치를 어떻게 얻을 수 있나요?

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

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

setAlignmentParagraphFormat에 있는 단락 수준 설정 메서드로, 개별 구문 서식과 무관하게 전체 단락에 적용됩니다.

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

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