2014-11-26 4 views
0

은 HTML 콘텐츠와 함께 필드 "테스트"를 병합 HTML 콘텐츠와 병합 필드 :Docx4j은 - 교체 말씀은 제가 말씀을 대체하기 위해 노력하고

String myText = "<html><body><h1>Hello</h1></body></html>"; 

Docx4j를 사용하여.

결과
String myText = "<html><body><h1>Hello</h1></body></html>"; 
    try { 
     WordprocessingMLPackage docxOut = 
       WordprocessingMLPackage.load(new java.io.File("/tmp/template.docx")); 
     Map<DataFieldName, String> data = new HashMap<>(); 
     data.put(new DataFieldName("test"), myText); 
     org.docx4j.model.fields.merge.MailMerger.performMerge(docxOut, data, true); 
     docxOut.save(new java.io.File("/tmp/newTemplate.docx")); 
    } catch (Docx4JException e) { 
     LOGGER.error(e.getMessage()); 
    } 

, 나는 HTML로 해석되지 않고
"<html><body><h1>Hello</h1></body></html>" 

로 대체 내 병합 필드 출력 (newTemplate.docx)가 있습니다. 나는 다음을 추가하려고 시도했다 :

docxOut.getContentTypeManager(). addDefaultContentType ("html", "text/html");

그러나 여전히 작동하지 않았습니다. Word 병합 필드를 바꾸는 동안 HTML을 해석하는 것이 Docx4j를 사용하거나 뭔가 빠졌는지 잘 모르겠다.

도움이 될 것입니다.

답변

0

OpenDoPE 접근 방식을 사용하여 컨텐트 컨트롤을 이스케이프 처리 된 XHTML이 포함 된 사용자 지정 XML 요소에 바인딩 할 수 있습니다.

+0

Docx4j만으로 html을 삽입 할 수 없다는 뜻입니까? –

+0

MERGEFIELD가 아닌 XHTML의 자동 변환을 원할 경우 docx4j를 사용하여 콘텐츠 제어 데이터 바인딩을 수행해야 함을 의미합니다. 또는 ImportXHTML 코드를 사용하여 XHTML을 수동으로 변환 할 수 있습니다. – JasonPlutext

+0

나는 그것도 생각했지만 xhtmlImporterImpl.convert (htmlContent, null))는 Map 을 사용해야 할 병합 필드를 대체하는 동안 목록을 반환합니다. List에서 String을 얻는 방법이 없다면 String을 반환 할 수있는 XHTMLImporterImpl 메서드를 찾지 못했습니다. ? –