본문으로 바로가기

필자는 전자우편 분석 모듈을 개발하면서 분석 모듈 관리자에서 간단하게 평문 text로 요약하여 보여주는 기능을 구현해야 했습니다.

아래와 같이 간단하게 text/rtf를 text/html로 text/html을 text/plain으로 변환할 수 있습니다.

 

text/rtf를 text/html로 변환하기

추가적인 라이브러리의 필요없이 javax.swing의 JEditorPane을 사용하여 text/rtf를 text/html로 변환이 가능합니다.

import javax.swing.JEditorPane;
import javax.swing.text.EditorKit;

public static String toHTML(File file) throws Exception {
	JEditorPane p = new JEditorPane();
	p.setContentType("text/rtf");

	EditorKit kitRtf = p.getEditorKitForContentType("text/rtf");
	kitRtf.read(new FileReader(file), p.getDocument(), 0);
	kitRtf = null;

	EditorKit kitHtml = p.getEditorKitForContentType("text/html");
	Writer writer = new StringWriter();
	kitHtml.write(writer, p.getDocument(), 0, p.getDocument().getLength());

	return writer.toString();
}

 

text/html을 text/plain으로 변환하기

html을 변환하기 위해서는 jsoup 라이브러리가 필요합니다. <p><br> 태그를 줄 바꿈으로 처리하는 코드입니다. 필요시 하단의 2줄로 주석 처리된 코드를 사용할 수 있습니다.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Whitelist;

private static String toPlain(String html) {
	if (html == null)
		return html;
	
	Document document = Jsoup.parse(html);
	//makes html() preserve linebreaks and spacing
	document.outputSettings(new Document.OutputSettings().prettyPrint(false));
	document.select("br").append("\\n");
//	document.select("p").prepend("\\n\\n");
	document.select("p").prepend("\\n");
	return document.text().replaceAll("\\\\n", "\n");
//	String s = document.html().replaceAll("\\\\n", "\n");
//	return Jsoup.clean(s, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
}

 

 

참고자료

 

 

728x90