日期:2014-05-16  浏览次数:20588 次

JAVA生成WORD文件的方案
Web平台下JAVA生成WORD文件的方法目前有以下三种:
一、 是jacob。 但是局限于windows平台,往往许多JAVA程序运行于其他操作系统,在此不讨论该方案。
二、 是POI。 但是它的excel处理还凑合, word模块还局限于读取word的文本内容,写word文件的功能就更弱;还有一个要命的地方,处理doc格式和处理docx格式的类几乎完全不同,要分开针对不同的格式写不同的代码,这就意味着用户上传的docx格式文件如果使用了doc的扩展名,程序马上异常终止,但是如果项目的预算有限,也是只能考虑POI了。
OI对word文件操作的代码:
package org.apache.poi.xwpf.usermodel;
import java.io.FileOutputStream;
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; ");
      &n