Напишите файл docx, используя Apache POI Word JAVA - PullRequest
0 голосов
/ 28 июня 2018

Я использую Apache POI Word для создания файла docx в java.

Сейчас я использую следующий код

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 - США XXX 2018-06-28

Справка с места работы

Это удостоверяет, что Джон в настоящее время работает на xxx в качестве менеджера.

Джон работает в ххх с 07 декабря 2005 года.

Текущий оклад SalaryPerMonth SalaryCurrencyCode в месяц, работает 100% 40-часовой недели.

1 Ответ

0 голосов
/ 03 июля 2018

Проблема здесь в том, что вы получаете весь текст в одной строке. Вы должны проанализировать все элементы body из вашего документа, используя «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;
    }
...