Java使用commonmark将Markdown转换成HTML

😂 这篇文章最后更新于1738天前,您需要注意相关的内容是否还可用。

所需依赖:

<dependency>
    <groupId>com.atlassian.commonmark</groupId>
    <artifactId>commonmark</artifactId>
    <version>0.11.0</version>
</dependency>

代码示例:

import org.commonmark.node.Image;
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.Map;

public class Md2Html {
    public static void main(String[] args){
        Parser parser = Parser.builder().build();
        Node document = parser.parse("```java\n" +
                "    //根据id获取课程\n" +
                "    @Override\n" +
                "    @GetMapping(\"/coursebase/get/{courseId}\")\n" +
                "    public CourseBase getCourseBaseById(@PathVariable(\"courseId\") String courseId) throws RuntimeException {\n" +
                "        return courseService.getCourseBaseById(courseId);\n" +
                "    }\n" +
                "```");
        HtmlRenderer renderer = HtmlRenderer.builder().
                attributeProviderFactory(new AttributeProviderFactory() {
                    @Override
                    public AttributeProvider create(AttributeProviderContext attributeProviderContext) {
                        return new AttributeProvider() {
                            //                            自定义标签属性 可用单独类继承AttributeProvider接口
                            @Override
                            public void setAttributes(Node node, String s, Map<String, String> map) {
                                if (node instanceof Image) {
                                    map.put("style", "width:150px;height:200px;position:relative;left:50%;margin-left:-100px;");
                                }
                                if (node instanceof Link) {
                                    map.put("target", "_blank");
                                }
                            }
                        };
                    }
                }).
                build();
        /*  lamada改写
        *  HtmlRenderer renderer = HtmlRenderer.builder().
                attributeProviderFactory(attributeProviderContext -> (node, s, map) -> {
                    if (node instanceof Image) {
                        map.put("style", "width:150px;height:200px;position:relative;left:50%;margin-left:-100px;");
                    }
                    if (node instanceof Link) {
                        map.put("target", "_blank");
                    }
                }).
                build();
        * */
        String mdHtml = renderer.render(document);
        mdHtml=mdHtml.replace("<pre>", "<pre class=\"fy-prettyprint linenums\">");
        System.out.println(mdHtml);
    }
}

效果:

<pre class="fy-prettyprint linenums"><code class="language-java">    //根据id获取课程
    @Override
    @GetMapping(&quot;/coursebase/get/{courseId}&quot;)
    public CourseBase getCourseBaseById(@PathVariable(&quot;courseId&quot;) String courseId) throws RuntimeException {
        return courseService.getCourseBaseById(courseId);
    }
</code></pre>