2016-06-09 5 views
0

HTML 형식의 문자열을 docx로 구문 분석하고 싶습니다. 나는 현재 jsoup를 사용하여 깨끗한 xhtml 문자열과 docx4j (최신 버전)로 html을 변환하여 xhtml을 docx로 파싱합니다.공간이 CSS 태그 앞에 추가되었습니다. docx4j/Jsoup

docx4j에서 지원하는 태그가 아니기 때문에 색상에 약간의 문제가있었습니다. 새로운 태그 (무작위 이름 태그)로 CSS 스타일을 변경하기 위해 문자열을 포맷했습니다. 색깔은 지금 작동한다 그러나 나는 색깔에서 writting의 앞에 그리고 후에 약간 공간을 추가했다.

다음은 코드입니다.

import java.io.File; 
import java.util.List; 

import org.docx4j.Docx4J; 
import org.docx4j.convert.in.xhtml.XHTMLImporter; 
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl; 
import org.docx4j.openpackaging.exceptions.Docx4JException; 
import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 

public class test { 

    public static void main(String[] args) throws Docx4JException { 
     WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
     String outputfilepath = "test.docx"; 


     String d = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><style type=\"text/css\">body{font-family:Arial; font-size:120%;}si{color:#0000FF;padding-right: 0;margin:0;}si:before { padding-right: 0;margin:0;indent:0; }</style></head><body><p>blabla<si><strong>blaebdqzd</strong>qdzd</si>zdqzdq</p></body></html>"; 
     String e ="<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><style type=\"text/css\">body{font-family:Arial; font-size:120%;}si{color:#0000FF;padding-right: 0;margin:0;}si:before { padding-right: 0;margin:0;indent:0; }</style></head><body><p><si><strong>blaebdqzd</strong>qdzd</si>zdqzdq</p></body></html>"; 


     XHTMLImporter importer = new XHTMLImporterImpl(wordMLPackage); 
     String text = htmlToXhtml(d); 
     List<Object> content = importer.convert(text, null); 
     wordMLPackage.getMainDocumentPart().getContent().addAll(content); 

     importer = new XHTMLImporterImpl(wordMLPackage); 
     text = htmlToXhtml(e); 
     content = importer.convert(text, null); 
     wordMLPackage.getMainDocumentPart().getContent().addAll(content); 


     Docx4J.save(wordMLPackage, new File(outputfilepath), Docx4J.FLAG_NONE); 
    } 

    private static String htmlToXhtml(final String html) { 
     final Document document = Jsoup.parse(html); 
     document.outputSettings().syntax(Document.OutputSettings.Syntax.xml); 
     return document.html(); 
    } 
} 

누군가 나를 도와 줄 수 있습니까? 당신이 시도 할 수

답변

0

두 가지 :

  1. 당신의 임의 요소 "시"의 블록 또는 인라인
  2. 이 범위를 사용 여부를 설정하는 대신

가 더 일반적으로, DOCX에 XHTML가 의존 Flying Saucer/xhtml 렌더러, 그래서 당신은 때로는 인터넷 검색으로 유용한 정보를 찾을 수 있습니다.

+0

감사합니다. 인라인 스타일을 사용하면 완벽하게 작동하므로 이전 또는 이후 공간을 추가하지 않아도됩니다. – David

관련 문제