commonmark使用教程

简单来说就是一款将markdown编辑器生成的html转换成文本的工具。

1.第一步肯定就是导入依赖,第一个就是commonmark基本的依赖,第二个是调整标题的,第三个是调整table的。

<dependency>
            <groupId>com.atlassian.commonmark</groupId>
            <artifactId>commonmark</artifactId>
            <version>0.17.0</version>
        </dependency>
        <dependency>
            <groupId>com.atlassian.commonmark</groupId>
            <artifactId>commonmark-ext-heading-anchor</artifactId>
            <version>0.17.0</version>
        </dependency>
        <dependency>
            <groupId>com.atlassian.commonmark</groupId>
            <artifactId>commonmark-ext-gfm-tables</artifactId>
            <version>0.17.0</version>
        </dependency>

2.编写commonmark工具类

public class MarkdownUtils {

    public static String markdownToHtml(String markdown) {
        Parser parser = Parser.builder().build();
        Node document = parser.parse(markdown);
        HtmlRenderer renderer = HtmlRenderer.builder().build();
        return renderer.render(document);
    }
    public static String markdownToHtmlExtensions(String markdown) {
        //h标题生成id
        Set<Extension> headingAnchorExtensions = Collections.singleton(HeadingAnchorExtension.create());
        //转换table的HTML
        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() {
                    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) {
            //改变a标签的target属性为_blank
            if (node instanceof Link) {
                attributes.put("target", "_blank");
            }
            if (node instanceof TableBlock) {
                attributes.put("class", "ui celled table");
            }
        }
    }
}

3.直接调用方法,简单解释一下就是从数据库收到文章信息之后,将这个文章信息转换为文本格式,但是又不希望数据库原有的数据受到改变,就使用BeanUtil将数据库的内容进行复制,在转换,return到controller层。返回到前端。BenaUtil也放到这里

public class MyBeanUtils {
    public static String[] getNullPropertyNames(Object source){
        BeanWrapper beanWrapper=new BeanWrapperImpl(source);
        PropertyDescriptor [] pds=beanWrapper.getPropertyDescriptors();
        List<String> nullPropertyNames=new ArrayList<>();
        for (PropertyDescriptor pd:pds){
            String propertyName=pd.getName();
            if (beanWrapper.getPropertyValue(propertyName)==null){
                nullPropertyNames.add(propertyName);
            }
        }
        return  nullPropertyNames.toArray(new String[nullPropertyNames.size()]);
    }
}
@Override
    public Blog getAndConvert(Long id) {
        Blog blog=blogRepository.findById(id).get();
        if (blog==null){
            throw  new NotFoundException("该博客不存在");
        }
        Blog b=new Blog();
        BeanUtils.copyProperties(blog,b);
        String content=b.getContent();
        b.setContent(MarkdownUtils.markdownToHtmlExtensions(content));
        return b;
    }

4.前端渲染界面,使用thymelf渲染。这里要使用utext,否则会有html的文本出现。

th:utext="${blog.content}"

5.有任何问题可以发评论一起探讨 ,感谢观看。

 

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要将Java CommonMark HTML转换为Markdown,你可以使用以下步骤: 1. 使用Java CommonMark库将HTML解析为通用抽象语法树(AST)表示形式。可以使用像flexmark-java这样的库,它提供了将HTML解析为AST的功能。 2. 遍历AST,并根据节点类型将其转换为Markdown语法。根据节点类型的不同,你可能需要执行不同的转换操作。 3. 根据需要处理节点的子节点和属性。例如,对于链接节点,你需要提取链接文本和链接URL,并将其转换为Markdown链接语法。 4. 构建Markdown字符串,并将转换后的AST节点添加到字符串中。你可以使用StringBuilder或类似的工具来构建字符串。 以下是一个简单的示例代码,演示了如何使用flexmark-java库将HTML转换为Markdown: ```java import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.parser.Parser; public class HtmlToMarkdownConverter { public static String convert(String html) { // 创建解析器和渲染器 Parser parser = Parser.builder().build(); HtmlRenderer renderer = HtmlRenderer.builder().build(); // 将HTML解析为AST Node document = parser.parse(html); // 将AST转换为Markdown String markdown = renderer.render(document); return markdown; } public static void main(String[] args) { String html = "<h1>Hello, world!</h1>"; String markdown = convert(html); System.out.println(markdown); } } ``` 这个示例中,我们使用flexmark-java库的Parser类将HTML解析为AST,然后使用HtmlRenderer类将AST渲染为Markdown字符串。你可以根据你的需求进一步处理AST节点,以执行更复杂的转换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值