1

我正在尝试创建一个具有两种不同类型格式的 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 中。

4

2 回答 2

1

您需要调用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();
    }
}
于 2013-05-26T22:43:26.150 回答
0

问题是“setText()”覆盖了之前设置的文本,因此您只能看到最后设置的文本。为了在现有文本之后添加任何其他文本,请使用“appendText()”。

于 2015-10-21T16:04:14.997 回答