Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ppt中使用apache poi hslf添加项目符号和非项目符号_Java_Apache Poi_Powerpoint_Hslf - Fatal编程技术网

Java 在ppt中使用apache poi hslf添加项目符号和非项目符号

Java 在ppt中使用apache poi hslf添加项目符号和非项目符号,java,apache-poi,powerpoint,hslf,Java,Apache Poi,Powerpoint,Hslf,我想使用ApachePOI hslf在powerpoint中添加一个文本框。在文本框中,我想添加标题,然后在同一文本框中添加项目符号。但是如果我应用richtextrun.setbullet(true);虽然标题在单独的富文本运行中,但它也会将项目符号与标题放在一起。任何帮助都将不胜感激。我附上样本代码 import org.apache.poi.hslf.record.StyleTextPropAtom; import org.apache.poi.hslf.record.TextChars

我想使用ApachePOI hslf在powerpoint中添加一个文本框。在文本框中,我想添加标题,然后在同一文本框中添加项目符号。但是如果我应用richtextrun.setbullet(true);虽然标题在单独的富文本运行中,但它也会将项目符号与标题放在一起。任何帮助都将不胜感激。我附上样本代码

import org.apache.poi.hslf.record.StyleTextPropAtom; 
import org.apache.poi.hslf.record.TextCharsAtom; 
import org.apache.poi.hslf.record.Record; 
import org.apache.poi.hslf.model.*; 
import org.apache.poi.hslf.model.textproperties.TextPropCollection; 
import org.apache.poi.hslf.usermodel.SlideShow; 
import org.apache.poi.hslf.usermodel.RichTextRun; 

import java.awt.*; 
import java.io.*; 

public class test { 

     public static void main(String[] args) throws Exception { 

         SlideShow ppt = new SlideShow(); 
         Slide slide = ppt.createSlide(); 
         TextShape shape = new TextBox(); 
         shape.setSheet(slide); 

         TextRun run = shape.getTextRun(); 
         StyleTextPropAtom styleAtom = null; 
         TextCharsAtom textAtom = null; 
         for(Record r : run.getRecords()){ 
             if(r instanceof StyleTextPropAtom) styleAtom = (StyleTextPropAtom)r; 
             else if(r instanceof TextCharsAtom) textAtom = (TextCharsAtom)r; 
         } 

         styleAtom.getParagraphStyles().clear(); 
         styleAtom.getCharacterStyles().clear(); 

         StringBuffer text = new StringBuffer(); 
         TextPropCollection prProps, chProps; 
         RichTextRun rt; 
         String chunk; 

         //begin building rich text runs 

         //this should be heading and without bullet ppoint
         chunk = " Apache POI"; 

         text.append(chunk); 
         prProps = styleAtom.addParagraphTextPropCollection(chunk.length()); 
         chProps = styleAtom.addCharacterTextPropCollection(chunk.length()); 
         rt = new RichTextRun(shape.getTextRun(), text.length(), chunk.length(), null, chProps, false, false); 
         rt.supplySlideShow(ppt); 
         rt.setFontColor(Color.green); 
         rt.setItalic(true); 
         rt.setFontSize(24); 

        String chunk = " \r is \r cool"; 
        int len = chunk.length();
         text.append(chunk); 
         prProps = styleAtom.addParagraphTextPropCollection(chunk.length()); 
         chProps = styleAtom.addCharacterTextPropCollection(chunk.length()); 
         rt = new RichTextRun(shape.getTextRun(), text.length(), chunk.length(), prProps, chProps, false, false); 
         rt.supplySlideShow(ppt); 
         PPFont font = new PPFont(); 
         font.setFontName("Times New Roman"); 
         int fontIndex = ppt.addFont(font); 
         rt.setFontIndex(fontIndex); 
         rt.setBold(true); 
         rt.setFontSize(24); 
         rt.setBullet(true);

         //sum of chunk lengths must be text.length+1, add a dummy char to the end 
         styleAtom.addParagraphTextPropCollection(1); 
         styleAtom.addCharacterTextPropCollection(1); 

         String txt = text.toString(); 
         textAtom.setText(txt); 
         shape.getTextRun().buildRichTextRuns(styleAtom.getParagraphStyles(), styleAtom.getCharacterStyles(), txt); 
         //end building rich text runs 

         shape.setAnchor(new Rectangle(100, 100, 300, 50)); 
         slide.addShape(shape); 

         FileOutputStream out = new FileOutputStream("test.ppt"); 
         ppt.write(out); 
         out.close(); 

     } 

} 
提前谢谢

电流输出为


我不希望第一行使用bullet

您应该更新POI JAR,然后执行以下操作:

import java.awt.Rectangle;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hslf.usermodel.HSLFTextBox;
import org.apache.poi.hslf.usermodel.HSLFTextRun;

public class BulletTest {
    public static void main(String[] args) throws IOException {
        HSLFSlideShow ppt = new HSLFSlideShow();
        HSLFSlide slide = ppt.createSlide();
        HSLFTextBox tb = slide.createTextBox();
        tb.setAnchor(new Rectangle(100, 100, 200, 200));

        HSLFTextRun titleTR = tb.appendText("Title", true);
        HSLFTextRun bullet1TR = tb.appendText(" bullet1", true);
        bullet1TR.getTextParagraph().setBullet(true);
        HSLFTextRun bullet2TR = tb.appendText(" bullet2", true);
        bullet2TR.getTextParagraph().setBullet(true);

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