最近公司做的项目需要实现导出Word文档的功能,网上关于POI生成Word文档的例子很少,找了半天才在官网里找到个Demo,有了Demo一切就好办了。
- /* ====================================================================
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- ==================================================================== */
- package org.apache.poi.xwpf.usermodel;
- import java.io.FileOutputStream;
- /**
- * A simple WOrdprocessingML document created by POI XWPF API
- *
- * @author Yegor Kozlov
- */
- public class SimpleDocument {
- public static void main(String[] args) throws Exception {
- XWPFDocument doc = new XWPFDocument();
- XWPFParagraph p1 = doc.createParagraph();
- p1.setAlignment(ParagraphAlignment.CENTER);
- p1.setBorderBottom(Borders.DOUBLE);
- p1.setBorderTop(Borders.DOUBLE);
- p1.setBorderRight(Borders.DOUBLE);
- p1.setBorderLeft(Borders.DOUBLE);
- p1.setBorderBetween(Borders.SINGLE);
- p1.setVerticalAlignment(TextAlignment.TOP);
- XWPFRun r1 = p1.createRun();
- r1.setBold(true);
- r1.setText("The quick brown fox");
- r1.setBold(true);
- r1.setFontFamily("Courier");
- r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
- r1.setTextPosition(100);
- XWPFParagraph p2 = doc.createParagraph();
- p2.setAlignment(ParagraphAlignment.RIGHT);
- //BORDERS
- p2.setBorderBottom(Borders.DOUBLE);
- p2.setBorderTop(Borders.DOUBLE);
- p2.setBorderRight(Borders.DOUBLE);
- p2.setBorderLeft(Borders.DOUBLE);
- p2.setBorderBetween(Borders.SINGLE);
- XWPFRun r2 = p2.createRun();
- r2.setText("jumped over the lazy dog");
- r2.setStrike(true);
- r2.setFontSize(20);
- XWPFRun r3 = p2.createRun();
- r3.setText("and went away");
- r3.setStrike(true);
- r3.setFontSize(20);
- r3.setSubscript(VerticalAlign.SUPERSCRIPT);
- XWPFParagraph p3 = doc.createParagraph();
- p3.setWordWrap(true);
- p3.setPageBreak(true);
- //p3.setAlignment(ParagraphAlignment.DISTRIBUTE);
- p3.setAlignment(ParagraphAlignment.BOTH);
- p3.setSpacingLineRule(LineSpacingRule.EXACT);
- p3.setIndentationFirstLine(600);
- XWPFRun r4 = p3.createRun();
- r4.setTextPosition(20);
- r4.setText("To be, or not to be: that is the question: "
- + "Whether 'tis nobler in the mind to suffer "
- + "The slings and arrows of outrageous fortune, "
- + "Or to take arms against a sea of troubles, "
- + "And by opposing end them? To die: to sleep; ");
- r4.addBreak(BreakType.PAGE);
- r4.setText("No more; and by a sleep to say we end "
- + "The heart-ache and the thousand natural shocks "
- + "That flesh is heir to, 'tis a consummation "
- + "Devoutly to be wish'd. To die, to sleep; "
- + "To sleep: perchance to dream: ay, there's the rub; "
- + ".......");
- r4.setItalic(true);
- //This would imply that this break shall be treated as a simple line break, and break the line after that word:
- XWPFRun r5 = p3.createRun();
- r5.setTextPosition(-10);
- r5.setText("For in that sleep of death what dreams may come");
- r5.addCarriageReturn();
- r5.setText("When we have shuffled off this mortal coil,"
- + "Must give us pause: there's the respect"
- + "That makes calamity of so long life;");
- r5.addBreak();
- r5.setText("For who would bear the whips and scorns of time,"
- + "The oppressor's wrong, the proud man's contumely,");
- r5.addBreak(BreakClear.ALL);
- r5.setText("The pangs of despised love, the law's delay,"
- + "The insolence of office and the spurns" + ".......");
- FileOutputStream out = new FileOutputStream("simple.docx");
- doc.write(out);
- out.close();
- }
- }