2017-02-24 284 views
0

我有这个字符串: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); 

这里是我添加的所有variebles:

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

enter image description here

而且这是在文档中的字符串:

enter image description here 感谢。

回答

2

正如您可能已经想出的一样,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。