필자는 전자우편 분석 모듈을 개발하면서 분석 모듈 관리자에서 간단하게 평문 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));
}
참고자료
- Preserving Line Breaks When Using Jsoup
- How do I preserve line breaks when using jsoup to convert html to plain text?
728x90
'Tips, Tricks > Java, Spring Framework' 카테고리의 다른 글
Java 사용자 디렉토리 찾기 (0) | 2024.11.18 |
---|---|
Parsing EML files in Java(자바에서 EML 파일 파싱하기) (0) | 2021.01.06 |
Using a FilenameFilter in Java(자바에서 FilenameFilter 사용하기) (0) | 2021.01.06 |
Create multi WAR for a single maven project(단일 Maven 프로젝트에서 여러 개의 WAR 만들기) (0) | 2020.12.10 |
Find links from a web page(웹페이지에서 링크 찾기) (0) | 2020.12.10 |