使用Apache POI Word JAVA编写docx文件

时间:2018-06-28 09:17:08

标签: java apache-poi file-writing

我正在使用Apache POI Word在Java中创建docx文件。

现在我正在使用以下代码

XWPFDocument document = new XWPFDocument();
  XWPFParagraph tmpParagraph = document.createParagraph();
  XWPFRun tmpRun = tmpParagraph.createRun();
  tmpRun.setText(newDocxData);

  try {
     document.write(new FileOutputStream(new File("C:\\test.docx")));
  } catch (FileNotFoundException ex) {
     Logger.getLogger(PersonnelFileHandlingStreamAttributesHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
  } catch (IOException ex) {
     Logger.getLogger(PersonnelFileHandlingStreamAttributesHandlerImpl.class.getName()).log(Level.SEVERE, null, ex);
  }

但是这将整个文本放在一个段落下。

但是我想将给定的字符串原样放入文档中。

我尝试将字符串转换为输入流,并在创建文档时将其传递

XWPFDocument document = new XWPFDocument(inputstream);

但是它也会给出一个错误。有什么解决办法吗?

这是我要编写的字符串的示例。

  

10-伊利诺伊州绍姆堡-美国xxx 2018-06-28

     

就业证明

     

这是为了证明John当前在xxx担任经理。

     

John从00年12月7日开始在xxx工作。

     

当前薪水为每月SalaryPerMonth SalaryCurrencyCode,正在工作   每周40小时的100%。

1 个答案:

答案 0 :(得分:1)

这里的问题是您要检索一个字符串中的所有文本。您应该使用“ getBodyElements”解析文档中的所有body元素,然后遍历所有这些元素并为每个元素启动一个段落。这是如何执行此操作的示例:

 public static XWPFDocument MergeDocument(XWPFDocument source, XWPFDocument output){

        for(IBodyElement element : source.getBodyElements()) {
           if(element instanceof XWPFParagraph) {
                XWPFParagraph paragraph = (XWPFParagraph)element;
                if(paragraph.getStyleID()!=null){
                    XWPFStyles styles= output.createStyles();
                    XWPFStyles stylesdoc2= source.getStyles();
                    styles.addStyle(stylesdoc2.getStyle(paragraph.getStyleID()));
                }    
                XWPFParagraph x= output.createParagraph();
                x.setStyle(((XWPFParagraph) element).getStyle());
                XWPFRun runx=x.createRun();
                runx.setText(((XWPFParagraph) element).getText());
            }
        }
return output;
    }