Создать 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()".