2017-08-21 25 views
0

私はapache poi hslfを使用してパワーポイントにテキストボックスを追加します。テキストボックスでは、同じテキストボックスに見出しを付けてから箇条書きを追加します。しかし、私がrichtextrun.setbullet(true)を適用する場合。見出しは別々のリッチテキストで実行されますが、見出しの付いた箇条書きも配置されます。どんな助けもありがとう。私はサンプルコードを添付しています。事前にpptでapache poi hslfを使用して箇条書きと非箇条書きを追加する

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(); 

    } 

} 

おかげ

電流出力は enter image description here

は、私が最初の行のための弾丸をたくないです

答えて

1

あなたの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(); 
    } 
} 
+0

ありがとうございました:)それは期待通りに働いていますd :) – user3768904

関連する問題