使用 Java 将 HTML 转换为 Markdown

使用 Java 将 HTML 转换为 Markdown

HTML to Markdown with Java

有没有一种简单的方法可以用 JAVA 将 HTML 转换为 markdown?

我目前正在使用 Java MarkdownJ 库将 markdown 转换为 html。

1
2
3
4
5
6
7
8
9
10
import com.petebevin.markdown.MarkdownProcessor;
...
public static String getHTML(String markdown) {
    MarkdownProcessor markdown_processor = new MarkdownProcessor();
    return markdown_processor.markdown(markdown);
}

public static String getMarkdown(String html) {
/* TODO Ask stackoverflow */
}

有一个很棒的 JS 库,叫做 Turndown,你可以在这里在线试用。它适用于接受答案错误的 html。

我需要它用于 Java(作为问题),所以我移植了它。 Java 的库称为 CopyDown,它具有与 Turndown 相同的测试套件,我已经用实际示例进行了尝试,接受的答案是抛出错误。

使用 gradle 安装:

1
2
3
dependencies {
        compile 'io.github.furstenheim:copy_down:1.0'
}

然后使用它:

1
2
3
4
5
6
7
8
9
10
CopyDown converter = new CopyDown();
String myHtml ="h1Some title/h1divSome htmlpAnother paragraph/p/div";
String markdown = converter.convert(myHtml);
System.out.println(markdown);
 Some title\
==========\
\
Some html\
\
Another paragraph\

PS。它有 MIT 许可证


我正在研究同样的问题,并尝试了几种不同的技术。

上面的答案可以工作。您可以使用 jTidy 库进行初始清理工作并将 HTML 转换为 XHTML。您使用上面链接的 XSLT 样式表。

不幸的是,Java 中没有提供一站式功能的库。您可以尝试将 Python 脚本 html2text 与 Jython 一起使用,但我还没有尝试过!


有一个名为 flexmark 的 Java 库具有这样的功能。
Maven 依赖:

1
2
3
4
5
dependency
    groupIdcom.vladsch.flexmark/groupId
    artifactIdflexmark-html2md-converter/artifactId
    version0.64.0/version
/dependency

使用 com.vladsch.flexmark.html2md.converter.FlexmarkHtmlConverter 类,您可以在一行中将 HTML 字符串转换为 Markdown 字符串,如下所示:

1
String md = FlexmarkHtmlConverter.builder().build().convert(html);

如果您正在使用 WMD 编辑器并想在服务器端获取 MarkDown 代码,只需在加载 wmd.js 脚本之前使用这些选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
wmd_options = {
        // format sent to the server.  can also be"HTML"
        output:"Markdown",

        // line wrapping length for lists, blockquotes, etc.
        lineLength: 40,

        // toolbar buttons.  Undo and redo get appended automatically.
        buttons:"bold italic | link blockquote code image | ol ul heading hr",

        // option to automatically add WMD to the first textarea found.
        autostart: true
    };

有一个名为 pandoc 的 Haskell 库可以在大多数标记格式之间进行转换。
虽然它不是 Java 库,但可以通过其 CLI 在 Java 中使用。

您可以从这里获取并安装最新版本。在此处阅读入门指南。

1
2
3
4
5
6
7
var command ="pandoc --to=markdown_strict --output=result.md input.html";
var pandoc = new ProcessBuilder()
        .command(command.split(""))
        .directory(new File(".")) // Working directory
        .start();
pandoc.waitFor();
// The output result.md will be created in the working directory

此工具也可用于 GitHub Actions 工作流程。


推荐阅读

    linux简单查询命令?

    linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Lin

    linux使用命令的方法?

    linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,

    linux不太简单的命令?

    linux不太简单的命令?,系统,工作,地址,基础,命令,信息,代码,工具,网络,管理,

    linux的几个简单命令?

    linux的几个简单命令?,工作,系统,地址,管理,命令,网络,目录,信息,时间,操作,l

    linux简单基本命令?

    linux简单基本命令?,工作,地址,系统,管理,命令,信息,目录,网络,操作,控制台,l

    linux简单的显示命令?

    linux简单的显示命令?,工具,管理,系统,档案,工作,信息,命令,标准,技术,设备,L

    linux简单上机命令?

    linux简单上机命令?,工作,地址,系统,管理,信息,命令,目录,标准,网络,功能,Lin

    linux简单的文档命令?

    linux简单的文档命令?,系统,地址,标准,工作,命令,数据,管理,时间,信息,单位,l

    linux简单命令题目?

    linux简单命令题目?,系统,单位,工作,第一,管理,基础,网络,通信,名称,数字,lin

    java中linux命令?

    java中linux命令?,环境,系统,工程,代码,网络,平台,第一,终端,命令,程序,怎样

    linux服务器简单命令?

    linux服务器简单命令?,系统,情况,信息,命令,时间,状态,平均,管理,服务器,进

    linux简单命令全集?

    linux简单命令全集?,系统,工作,等级,地址,信息,工具,命令,数据,标准,基础,lin

    linux简单命令查询?

    linux简单命令查询?,系统,信息,工作,标准,管理,地址,命令,名称,密码,状态,lin

    了解linux简单命令?

    了解linux简单命令?,系统,地址,工作,信息,设备,命令,目录,网络,时间,服务,五

    linux命令输入方法?

    linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,lin

    linux停java命令?

    linux停java命令?,系统,情况,进程,号码,代码,概念,名称,实时,命令,结束,linux