什么是富文本?
富文本(Rich Text)指包含格式信息的文本(如字体、颜色、表格、图片等),常见于:
- HTML网页
- 办公文档(Word、PDF)- 图形界面组件(如Swing、JavaFX)
Java处理富文本的常见场景
Swing桌面应用
使用JEditorPane
显示基础HTML:
import javax.swing.*; public class RichTextSwing { public static void main(String[] args) { JFrame frame = new JFrame("富文本示例"); JEditorPane editorPane = new JEditorPane(); editorPane.setContentType("text/html"); // 设置为HTML模式 editorPane.setText("<html><h1 style='color:blue;'>Java富文本</h1>" + "<ul><li>支持HTML 3.2标签</li><li><b>粗体</b>、<i>斜体</i></li></ul></html>"); frame.add(new JScrollPane(editorPane)); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
注意:仅支持HTML 3.2标准,复杂样式需用第三方库。
JavaFX桌面应用
通过WebView
组件渲染现代HTML:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.web.WebView; import javafx.stage.Stage; public class RichTextJavaFX extends Application { @Override public void start(Stage stage) { WebView webView = new WebView(); webView.getEngine().loadContent( "<html><body style='background:#f0f0f0;'>" + "<h2 style='color:green;'>JavaFX富文本</h2>" + "<p>支持<strong>CSS3</strong>和<em>JavaScript</em>!</p>" + "</body></html>" ); Scene scene = new Scene(webView, 500, 400); stage.setScene(scene); stage.show(); } }
生成PDF文档
使用 Apache PDFBox 或 iText 库:
// 示例:用iText生成带格式的PDF import com.itextpdf.text.*; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileOutputStream; public class PDFGenerator { public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); document.open(); // 添加富文本内容 Paragraph title = new Paragraph("富文本PDF", FontFactory.getFont(FontFactory.HELVETICA_BOLD, 18, Font.BLUE)); document.add(title); Paragraph content = new Paragraph(); content.add(new Chunk("支持 ", FontFactory.getFont(FontFactory.TIMES_ROMAN, 12))); content.add(new Chunk("粗体", FontFactory.getFont(FontFactory.TIMES_BOLD, 12))); content.add(Chunk.NEWLINE); content.add("插入图片:"); document.add(content); Image img = Image.getInstance("logo.png"); document.add(img); document.close(); } }
处理Word文档
用 Apache POI 操作.docx
:
import org.apache.poi.xwpf.usermodel.*; import java.io.FileOutputStream; public class WordDocExample { public static void main(String[] args) throws Exception { XWPFDocument doc = new XWPFDocument(); XWPFParagraph title = doc.createParagraph(); title.setAlignment(ParagraphAlignment.CENTER); XWPFRun titleRun = title.createRun(); titleRun.setText("Java富文本Word文档"); titleRun.setBold(true); titleRun.setFontSize(16); XWPFParagraph body = doc.createParagraph(); XWPFRun bodyRun = body.createRun(); bodyRun.setText("第一行文本"); bodyRun.addBreak(); // 换行 bodyRun.setText("第二行文本(红色)"); bodyRun.setColor("FF0000"); // 设置红色 doc.write(new FileOutputStream("output.docx")); doc.close(); } }
高级场景与第三方库
场景 | 推荐库 | 用途 |
---|---|---|
HTML转PDF | Flying Saucer + iText | 将CSS/HTML精准转换为PDF |
Markdown处理 | flexmark-java | 解析/渲染Markdown文本 |
邮件正文 | Jakarta Mail + Jsoup | 发送带格式的HTML邮件 |
富文本编辑器 | CKEditor/TinyMCE + Spring Boot | 集成Web编辑器到Java应用 |
最佳实践
-
安全过滤
使用Jsoup
清理HTML防止XSS攻击:String safeHtml = Jsoup.clean(rawHtml, Safelist.basic());
-
性能优化
- 避免在循环中频繁创建富文本组件
- 对大型文档使用流式API(如PDFBox的
PDDocument
)
-
跨平台兼容
- PDF生成时嵌入字体
- HTML内容使用Web标准(HTML5+CSS3)
常见问题
-
Q:Swing的
JEditorPane
为何显示不全样式?
A:它仅支持旧版HTML,复杂布局建议用JavaFX或嵌入式浏览器。 -
Q:如何实现代码高亮?
A:使用highlight.js
(Web)或RSyntaxTextArea
(Swing)。 -
Q:富文本如何存储到数据库?
A:保存为HTML字符串或转义后的JSON(如{"type":"paragraph","text":"..."}
)。
引用说明:
- Oracle官方文档:Java Swing Tutorial
- Apache项目:POI, PDFBox
- iText官方:iText 7
- JavaFX文档:WebView API 基于Java 17和常用库的最新稳定版编写,遵循MIT开源许可。*
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/20798.html