2017-05-23 24 views
1

DOCX에 값으로 바꾸려는 변수가 있습니다. 첫째, 그 변수는 줄의 시작 부분에 놓이지 않고 탭 뒤에 붙입니다. 내 가치는 우편 주소이며 같은 들여 쓰기로 다른 줄에 거리 및 우편 번호 (+ 도시)를 갖고 싶습니다. 거리는 자신의 라인에 변수를 대체하고, 우편 번호 같은 새로운 라인에 : 나는 변수를 대체 넣을 수 있습니다DOCX4J 줄 바꿈을 삽입하십시오.

<w:p> 
    <w:pPr> 
     <w:tabs> 
      <w:tab w:val="left" w:pos="6120"/> 
     </w:tabs> 
     <w:ind w:firstLine="6300"/> 
     <w:rPr> 
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/> 
      <w:b/> 
      <w:sz w:val="22"/> 
      <w:szCs w:val="20"/> 
     </w:rPr> 
    </w:pPr> 
    <w:r> 
     <w:rPr> 
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/> 
      <w:b/> 
      <w:sz w:val="22"/> 
      <w:szCs w:val="20"/> 
     </w:rPr> 
     <w:t>$address$</w:t> 
    </w:r> 
</w:p> 

:이 변수에 대한 XML은

      4 Privet Drive 
          Little Whinging 

새로운 라인의 우편 번호 및 도시

r.clear(); //r contains the variable it's <w:r> </w:r> in my XML exemple, it's a list 
org.docx4j.wml.Text text = factory.createText(); //For the street 
r.add(k, text); 
org.docx4j.wml.Br br = factory.createBr(); 
r.add(k, br); 
org.docx4j.wml.Text text2 = factory.createText(); 
r.add(k, text2); 
text.setValue(zip); 
text2.setValue(street); 

이 거리로 varibale를 교체하고 우편으로 새로운 라인을 만들고 (내가 getJAXBNodesViaXPath()를 사용하여 내 변수를 검색 할 수 있습니다). 거리는 좋은 장소 (왼쪽)에 있지만 도시는 새로운 라인의 시작 부분에 있습니다. 새로운 DOCX에서

내 XML은 다음과 같습니다

<w:p> 
    <w:pPr> 
     <w:tabs> 
      <w:tab w:val="left" w:pos="6120"/> 
     </w:tabs> 
     <w:ind w:firstLine="6300"/> 
     <w:rPr> 
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/> 
      <w:b/> 
      <w:sz w:val="22"/> 
      <w:szCs w:val="20"/> 
     </w:rPr> 
    </w:pPr> 
    <w:r> 
     <w:rPr> 
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/> 
      <w:b/> 
      <w:sz w:val="22"/> 
      <w:szCs w:val="20"/> 
     </w:rPr> 
     <w:t>4 Privet Drive</w:t> 
     <:br/> 
     <w:t>Little Whinging</w:t> 
    </w:r> 
</w:p> 

그래서 나는 처음의 같은 위치에 두 번째 라인을 설정하는 방법을 몰라?

답변

1

두 가지 방법이 있습니다. 가정

<w:p> 
     <w:r> 
      <w:tab/> 
      <w:t>4 Privet Drive</w:t> 
      <w:br/> 
      <w:tab/> 
      <w:t>Little Whinging</w:t> 
     </w:r> 
    </w:p> 

코드 대응 P의 P : 승 IND/@ :

 // Create object for r 
     R r = wmlObjectFactory.createR(); 
     p.getContent().add(r); 
      // Create object for tab (wrapped in JAXBElement) 
      R.Tab rtab = wmlObjectFactory.createRTab(); 
      JAXBElement<org.docx4j.wml.R.Tab> rtabWrapped = wmlObjectFactory.createRTab(rtab); 
      r.getContent().add(rtabWrapped); 
      // Create object for t (wrapped in JAXBElement) 
      Text text = wmlObjectFactory.createText(); 
      JAXBElement<org.docx4j.wml.Text> textWrapped = wmlObjectFactory.createRT(text); 
      r.getContent().add(textWrapped); 
       text.setValue("4 Privet Drive"); 
      // Create object for br 
      Br br = wmlObjectFactory.createBr(); 
      r.getContent().add(br); 
      // Create object for tab (wrapped in JAXBElement) 
      R.Tab rtab2 = wmlObjectFactory.createRTab(); 
      JAXBElement<org.docx4j.wml.R.Tab> rtabWrapped2 = wmlObjectFactory.createRTab(rtab2); 
      r.getContent().add(rtabWrapped2); 
      // Create object for t (wrapped in JAXBElement) 
      Text text2 = wmlObjectFactory.createText(); 
      JAXBElement<org.docx4j.wml.Text> textWrapped2 = wmlObjectFactory.createRT(text2); 
      r3.getContent().add(textWrapped2); 
       text2.setValue("Little Whinging"); 

번째 w를 사용하는

첫 번째 탭을 사용하는 남아

<w:p> 
     <w:pPr> 
      <w:ind w:left="720"/> 
     </w:pPr> 
     <w:r> 
      <w:t>4 Privet Drive</w:t> 
      <w:br/> 
      <w:t>Little Whinging</w:t> 
     </w:r> 
    </w:p> 

Java의 핵심 비트는 다음과 같습니다.

  // Create object for ind 
      PPrBase.Ind pprbaseind = wmlObjectFactory.createPPrBaseInd(); 
      ppr.setInd(pprbaseind); 
       pprbaseind.setLeft(BigInteger.valueOf(720)); 

일반적으로 이와 같은 질문에 답하려면 Word에서 올바르게 보이는 것을 만든 다음 XML을 검사하십시오. Docx4j Word Helper AddIn 또는 Docx4j Webapp를 사용하여 해당 코드를 생성 할 수 있습니다.