Строка Docx4j разрывается в строке

У меня есть эта строка:

Prueba
Lista:
- li1
- li2
- li3
- li4

               Tabulado
               Tabulado                   Tabulado                   Tabulado                   Tabulado
               Tabulado                   Tabulado                   Tabulado                   Tabulado                   Tabulado                   Tabulado
               Tabulado                   Tabulado                   Tabulado                   Tabulado                   Tabulado                   Tabulado                   Tabulado                   Tabulado

но когда я готовлю свой .docx, строка печатается так:

Prueba Listas: - li1 - li2 - li3 - li4 Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado
Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado Tabulado

Вот где я получаю строку:

String escDesc = report.getDescription();
if (escDesc.contains("\n")){
   //escDesc = escDesc.replaceAll("\\n", System.getProperty("line.separator"));
   //escDesc  = escDesc.replaceAll("\\n", "<w:br/>");
}
escDesc = StringEscapeUtils.escapeXml(escDesc); 

valuesAdd.put("DESCRIPCION", escDesc);  

И здесь я добавляю все переменные:

private void replacePlaceholders()
      throws Exception {

  MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

  VariablePrepare.prepare(wordMLPackage);

  documentPart.variableReplace(valuesAdd);

  List<SectionWrapper> sectionWrappers = wordMLPackage.getDocumentModel().getSections();
  String xml = null;

  for (SectionWrapper sw : sectionWrappers) {
    HeaderFooterPolicy hfp = sw.getHeaderFooterPolicy();

    if (hfp != null) {

      HeaderPart headerPart = hfp.getDefaultHeader();

      if (headerPart != null) {
          xml = XmlUtils.marshaltoString(headerPart.getJaxbElement());
      }


    Object obj = null;
    try {
      obj = XmlUtils.unmarshallFromTemplate(xml, valuesAdd);
    } catch (JAXBException e) {
      e.printStackTrace();
    }

    // Inject result into docx
    headerPart.setJaxbElement((Hdr) obj);
    }
  }
}

Я хочу сохранить \n, но я не знаю, что мне делать прямо сейчас. Я надеюсь, что кто-нибудь может дать мне несколько советов.

Это System.out.println(escDesc);:

введите здесь описание изображения

А это строка в документе:

введите здесь описание изображения Спасибо.


person Pablo Salcedo T.    schedule 24.02.2017    source источник


Ответы (1)


Как вы, наверное, уже поняли, WordML использует разные элементы для табуляции и разрыва строки (мягкий возврат).

XML выглядит примерно так:

        <w:r>
            <w:t>Tabulado</w:t>
            <w:tab/>
            <w:t>Tabulado</w:t>
            <w:br/>
            <w:t>Tabulado</w:t>
        </w:r>

и соответствующий код Java:

            org.docx4j.wml.ObjectFactory wmlObjectFactory = new org.docx4j.wml.ObjectFactory();

            // Create object for tab (wrapped in JAXBElement) 
            R.Tab rtab = wmlObjectFactory.createRTab(); 
            JAXBElement<org.docx4j.wml.R.Tab> rtabWrapped = wmlObjectFactory.createRTab(rtab); 
            // Add it to the run... 
            run.getContent().add( rtabWrapped); 

            // Create object for br
            Br br = wmlObjectFactory.createBr(); 

Это основы. Возможно, вы сможете заменить что-то вроде «TabuladoTabulado».

В качестве альтернативы используйте привязку данных управления содержимым или импортируйте XHTML.

person JasonPlutext    schedule 27.02.2017