使用 Apache POI Word 编写一个 docx 文件 JAVA

Write a docx file using Apache POI Word JAVA

我正在使用 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 - SchaumburgIllinois - US xxx 2018-06-28

Certificate of employment

This is to certify that John is currently employed at xxx as Manager.

John has worked at xxx since 07-DEC-00.

Current salary is SalaryPerMonth SalaryCurrencyCode per month, working 100 % of a 40-hour week.

这里的问题是您正在检索一个字符串中的所有文本。您应该使用 "getBodyElements" 解析文档中的所有主体元素,然后遍历所有元素并为每个元素启动一个段落。这是一个如何做到这一点的例子:

 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;
    }