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("郵箱" + " " + "
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);