Напишите файл docx, используя Apache POI Word JAVA

Я использую 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 - 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.

Что именно содержит StringnewDocxData? Откуда это взялось? Вам нужно проанализировать эту строку, чтобы разделить ее на разные абзацы и фрагменты текста.

Axel Richter 28.06.2018 11:24

эта строка содержит текст, извлеченный из текстового документа. когда я печатаю его в консоли, он печатается с форматированием. Поэтому я просто хочу создать еще один документ без добавления новых абзацев и всего такого.

jayz 28.06.2018 11:28

Можете ли вы добавить содержимое строки простым коротким способом, чтобы было ясно, чего вы хотите, и что происходит прямо сейчас?

soufrk 28.06.2018 11:33

На самом деле я читаю шаблон документа, заменяю некоторые строки и создаю новый файл. Я думаю, это упростит мои требования

jayz 28.06.2018 11:40

@AxelRichter есть идеи, как это сделать?

jayz 28.06.2018 11:49

Забудь это. Поскольку вы говорили о «форматировании», я подумал о более сложном содержании абзацев. С вашим примером строки: разделите ее на «\ n» или на «\ r \ n», а затем создайте абзац и текстовый прогон для каждой части.

Axel Richter 28.06.2018 11:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
961
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема здесь в том, что вы получаете весь текст в одной строке. вам следует проанализировать весь основной элемент документа с помощью "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;
    }

Другие вопросы по теме