How can I set background colour of a run (a word in line or a paragraph) in a docx file by using Apache POI?

前端 未结 1 845
终归单人心
终归单人心 2020-12-12 01:31

I want to create a docx file by using Apache POI.

I want to set background colour of a run (i.e. a word or some parts of a paragraph).

How can I do this?

相关标签:
1条回答
  • 2020-12-12 01:45

    Word provides two possibilities for this. There are really background colors possible within runs. But there are also so called highlighting settings.

    With XWPF both possibilities are only possible using the underlying objects CTShd and CTHighlight. But while CTShd is shipped with the default poi-ooxml-schemas-3.13-...jar, for the CTHighlight the fully ooxml-schemas-1.3.jar is needed as mentioned in https://poi.apache.org/faq.html#faq-N10025.

    Example:

    import java.io.FileOutputStream;
    
    import org.apache.poi.xwpf.usermodel.*;
    
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor;
    /*
    To
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor;
    the fully ooxml-schemas-1.3.jar is needed as mentioned in https://poi.apache.org/faq.html#faq-N10025
    */
    
    public class WordRunWithBGColor {
    
     public static void main(String[] args) throws Exception {
    
      XWPFDocument doc= new XWPFDocument();
    
      XWPFParagraph paragraph = doc.createParagraph();
      XWPFRun run=paragraph.createRun();  
      run.setText("This is text with ");
    
      run=paragraph.createRun();  
      run.setText("background color");
      CTShd cTShd = run.getCTR().addNewRPr().addNewShd();
      cTShd.setVal(STShd.CLEAR);
      cTShd.setColor("auto");
      cTShd.setFill("00FFFF");
    
      run=paragraph.createRun();  
      run.setText(" and this is ");
    
      run=paragraph.createRun();  
      run.setText("highlighted");
      run.getCTR().addNewRPr().addNewHighlight().setVal(STHighlightColor.YELLOW);
    
      run=paragraph.createRun();  
      run.setText(" text.");
    
      doc.write(new FileOutputStream("WordRunWithBGColor.docx"));
    
     }
    }
    
    0 讨论(0)
提交回复
热议问题