方式一:
依赖:
<dependency>
<groupId>org.pegdown</groupId>
<artifactId>pegdown</artifactId>
<version>1.6.0</version>
</dependency>
生成案例
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import org.pegdown.PegDownProcessor;
public class PageGenerator {
public void generateHtml(File mdFile) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(mdFile), "UTF-8"));
String line = null;
String mdContent = "";
while ((line = br.readLine()) != null) {
mdContent += line + "\r\n";
}
PegDownProcessor pdp = new PegDownProcessor(Integer.MAX_VALUE);
String htmlContent = pdp.markdownToHtml(mdContent);
System.out.println(htmlContent);
}
public static void main(String[] args) throws IOException {
PageGenerator pageGenerator = new PageGenerator();
pageGenerator.generateHtml(new File("D:\\learning-blog\\后端\\Stream流妙用.md"));
}
}
方式二:
依赖:
<!-- markdown 转 html 官网 https://github.com/commonmark/commonmark-java -->
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-heading-anchor</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-gfm-tables</artifactId>
<version>0.10.0</version>
</dependency>
生成工具类
import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.TableBlock;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
import org.commonmark.node.Link;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.AttributeProvider;
import org.commonmark.renderer.html.AttributeProviderContext;
import org.commonmark.renderer.html.AttributeProviderFactory;
import org.commonmark.renderer.html.HtmlRenderer;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.List;
public class MarkdownToHtmlUtils {
public static String markdownToHtml(String markdown) {
Set<Extension> headingAnchorExtensions = Collections.singleton(HeadingAnchorExtension.create());
List<Extension> tableExtension = Arrays.asList(TablesExtension.create());
Parser parser = Parser.builder()
.extensions(tableExtension)
.build();
Node document = parser.parse(markdown);
HtmlRenderer renderer = HtmlRenderer.builder()
.extensions(headingAnchorExtensions)
.extensions(tableExtension)
.attributeProviderFactory(new AttributeProviderFactory() {
@Override
public AttributeProvider create(AttributeProviderContext context) {
return new CustomAttributeProvider();
}
})
.build();
return renderer.render(document);
}
static class CustomAttributeProvider implements AttributeProvider {
@Override
public void setAttributes(Node node, String tagName, Map<String, String> attributes) {
if (node instanceof Link) {
attributes.put("target", "_blank");
}
if (node instanceof TableBlock) {
attributes.put("class", "ui celled table");
}
}
}
public static void main(String[] args) {
String table = "| 1 | 2 | 3 |\n" +
"| ----- | ---- | ----- |\n" +
"| 22 | 22 | 22 |\n" +
"| 阿什顿发 | 非固定杆 | 撒阿什顿发 |\n" +
"\n";
String a = "[fereli 爱编程](http://www.lirenmi.cn)";
System.out.println(MarkdownToHtmlUtils.markdownToHtml(table));
System.out.println(MarkdownToHtmlUtils.markdownToHtml(a));
}
}
方式三:
依赖:
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark</artifactId>
<version>0.12.1</version>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-gfm-tables</artifactId>
<version>0.12.1</version>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-yaml-front-matter</artifactId>
<version>0.12.1</version>
</dependency>
生成工具类
package com.hshk.znhospital.care.utils;
import org.commonmark.Extension;
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
import org.commonmark.ext.gfm.tables.TableBlock;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.AttributeProvider;
import org.commonmark.renderer.html.HtmlRenderer;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class MarkdownUtils {
private static final List<Extension> EXTENSIONS = Arrays.asList(
YamlFrontMatterExtension.create(),
TablesExtension.create()
);
private static final Parser PARSER = Parser.builder().extensions(EXTENSIONS).build();
private static final HtmlRenderer RENDERER = HtmlRenderer.builder().extensions(EXTENSIONS).attributeProviderFactory(context -> new BlogAttributeProvider()).build();
public static String renderMarkdown(String content) {
final Node document = PARSER.parse(content);
return RENDERER.render(document);
}
static class BlogAttributeProvider implements AttributeProvider {
@Override
public void setAttributes(Node node, String s, Map<String, String> map) {
if (node instanceof TableBlock) {
map.put("class", "table table-bordered");
}
}
}
public static void main(String[] args) {
String renderMarkdown = MarkdownUtils.renderMarkdown("var buttons = document.getElementsByClassName(\"next_button___YGZWZ\");");
System.out.println("renderMarkdown = " + renderMarkdown);
}
}