Создать TextBox с двумя разными форматами

Я пытаюсь создать org.apache.poi.hslf.model.TextBox, который имеет два разных типа форматирования. Я хочу, чтобы часть текста была размером 14 и жирным шрифтом, а остальная часть была размером 10, а не жирным шрифтом.

Я пробовал что-то вроде этого:

TextRun run = textBox.createTextRun();
run.setText("small text"\n);

TextRun run = textBox.createTextRun();
RichTextRun format = run.getRichTextRuns()[0];
format.setBold(true);
format.setFontSize(14);
run.setText("big text");

Однако отображается только "большой текст".

Кто-нибудь знает как это сделать. Я действительно хотел бы сохранить это в одном TextBox.

2 ответа

Вам нужно позвонить TextRun.appendText() вместо звонка TextRun.createTextRun() дважды, потому что второй вызов перезапишет первый экземпляр.

import java.awt.geom.Rectangle2D;
import java.io.FileOutputStream;
import org.apache.poi.hslf.model.*;
import org.apache.poi.hslf.usermodel.*;

public class HslfTextBox {
    public static void main(String[] args) throws Exception {
        SlideShow ppt = new SlideShow();
        Slide s = ppt.createSlide();
        TextBox txt = new TextBox();
        txt.setAnchor(new Rectangle2D.Double(100,100,100,100));
        TextRun run = txt.createTextRun();
        RichTextRun rtr1 = run.getRichTextRuns()[0];
        rtr1.setText("small text\n");
        rtr1.setFontSize(10);
        RichTextRun rtr2 = run.appendText("big text\n");
        rtr2.setBold(true);
        rtr2.setFontSize(14);
        s.addShape(txt);

        FileOutputStream fos = new FileOutputStream("hssftext.ppt"); 
        ppt.write(fos);
        fos.close();
    }
}

Проблема состоит в том, что setText() перезаписывает текст, установленный ранее, в результате вы можете видеть только последний текст набора. Для добавления любого дополнительного текста после существующего текста используйте "appendText()".

Другие вопросы по тегам