poi动态生成word

public class SimpleDocument {
  
  /**
   * sd
   */
  public static void main(String[] args) throws Exception {
    XWPFDocument doc = new XWPFDocument();
    XWPFParagraph p1 = doc.createParagraph();
    
    XWPFTable table = doc.createTable(11, 2);
    // 设置上下左右四个方向的距离,可以将表格撑大
    table.setCellMargins(20, 20, 20, 20);
    // table.set
    List<XWPFTableCell> tableCells = table.getRow(0).getTableCells();
    tableCells.get(0).setText("第一行第一列的数据");
    tableCells.get(1).setText("第一行第二列的数据");
    
    List<XWPFTableCell> tableCellsq = table.getRow(1).getTableCells();
    tableCellsq.get(0).setText("第二行第二列的数据");
    tableCellsq.get(1).setText("第二行第二列的数据");
    
    // 设置字体对齐方式
    p1.setAlignment(ParagraphAlignment.CENTER);
    p1.setVerticalAlignment(TextAlignment.TOP);
    // 第一页要使用p1所定义的属性
    XWPFRun r1 = p1.createRun();
    // 设置字体是否加粗
    r1.setBold(true);
    r1.setFontSize(20);
    // 设置使用何种字体
    r1.setFontFamily("Courier");
    // 设置上下两行之间的间距
    r1.setTextPosition(20);
    r1.setText("公司招聘会入场须知");
    
    // 设置个人信息
    XWPFParagraph p2 = doc.createParagraph();
    p2.setAlignment(ParagraphAlignment.LEFT);
    XWPFRun r2 = p2.createRun();
    r2.setTextPosition(15);
    r2.setText("姓名" + "                    " + "张三");
    r2.addCarriageReturn();
    r2.setText("性别" + "                    " + "女");
    r2.addCarriageReturn();
    r2.setText("手机号" + "               " + "12345678965");
    r2.addCarriageReturn();
    r2.setText("邮箱" + "                    " + "[email protected]");
    r2.addCarriageReturn();
    r2.setText("开始时间" + "      " + "2013-05-28 12:30");
    r2.addCarriageReturn();
    r2.setText("结束时间" + "      " + "2013-05-28 13:20");
    r2.addCarriageReturn();
    
    // 存放试题信息
    XWPFParagraph p3 = doc.createParagraph();
    p3.setWordWrap(true);
    XWPFRun r3 = p3.createRun();
    r3.setTextPosition(10);
    r3.setFontSize(15);
    r3.setText("一、选择题(共50分)");
    // 题目和选项
    XWPFParagraph p4 = doc.createParagraph();
    p4.setWordWrap(true);
    XWPFRun r4 = p4.createRun();
    r4.setTextPosition(13);
    r4.setText("    1、下面说法正确的是?(3分)");
    r4.addCarriageReturn();
    r4.setText("        A:子类如果使用父类的方法必须使用super关键字");
    r4.addCarriageReturn();
    r4.setText("        B:子类如果使用父类的方法必须使用super关键字");
    r4.addCarriageReturn();
    r4.setText("        C:子类如果使用父类的方法必须使用super关键字");
    r4.addCarriageReturn();
    r4.setText("        D:子类如果使用父类的方法必须使用super关键字");
    r4.addCarriageReturn();
    r4.setText("正确答案:ABCD");
    r4.setText("选择答案:AC");
    
    // 判断题
    XWPFParagraph p5 = doc.createParagraph();
    p5.setWordWrap(true);
    XWPFRun r5 = p5.createRun();
    r5.setTextPosition(10);
    r5.setFontSize(15);
    r5.setText("一、判断题(共50分)");
    XWPFParagraph p6 = doc.createParagraph();
    p6.setWordWrap(true);
    // 题目
    int i;
    for (i = 0; i < 5; i++) {
      XWPFRun r6 = p6.createRun();
      r6.setTextPosition(13);
      r6.setText("1、子类如果使用父类的方法必须使用super关键字(5分)");
      r6.addCarriageReturn();
      r6.setText("正确答案:对");
      r6.setText("      ");
      r6.setSubscript(VerticalAlign.BASELINE);
      r6.setText("选择答案:");
      XWPFRun r7 = p6.createRun();
      r7.setTextPosition(13);
      // 控制某一个字体颜色为红色
      if (i == 3) {
        r7.setColor("FF0000");
      }
      r7.setText("错");
      r7.addCarriageReturn();
    }
    FileOutputStream out = new FileOutputStream("E:\\simple.docx");
    doc.write(out);
    out.close();
    System.out.println("success");
  }
}

 public void exportWord() {

    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance()
        .getExternalContext().getResponse();
    
    response.setContentType("application/x-msdownloadoctet-stream;charset=utf-8");
    try {
      response.setHeader("Content-Disposition", "attachment;filename=\""
          + new String("simple.docx".getBytes(), "utf-8") + "\"");
      OutputStream out = response.getOutputStream();
      XWPFDocument doc = exportFormat();
      doc.write(out);
      out.flush();
      out.close();
      FacesContext.getCurrentInstance().responseComplete();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }定义上一个方法返回值为XWPFDocument

<h:commandLink>好使

//设置字体是否倾斜
    r4.setItalic(true);
        // 是否在字体上面加线
    // r3.setStrike(true);
       // 设置是否分页
    p3.setPageBreak(false);    
//设置当前行往后缩多少才显示
    p13.setIndentationFirstLine(100);
    // 设置下划线属性
    // r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);

猜你喜欢

转载自blog.csdn.net/xwq1012/article/details/51397060