Markdown to Docx(MD文件转Docx)

背景

Hexo 文章采用的是 Markdown ,当我想把 Markdown 格式的文章搬到别的平台时,WTF 它居然不支持 md 格式!!!这就影响了我采用md的初衷(避免一切不必要的文章排版等等)。

神奇的 Pandoc

苦寻 INTERNET 终于发现有方法能直接将 md 转化为 word 这种富文本格式。

下载链接:

  • 官网:https://pandoc.org/installing.html

  • 蓝奏云:https://www.lanzoui.com/iamfxhc

实现 md --> word

第一步:下载 Pandoc ,并将其添加进环境变量。

第二部:执行命令

命令很简单

pandoc 文件名.md -o 文件名.docx

但是这样一次只能转化一篇,太慢了。所以就写了个脚本帮助我实现批量转化。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: 阿张啊 time:2020/3/20

import os
# 当前目录下所有文件
all_files = os.listdir()

# 获取目录下的md文件, 并保存
all_md = []
for file in all_files:
    try:
        if file[-3:] == '.md':
            all_md.append(file)
    except Exception as reason:
        print(reason)
# 将md文件批量装换为docx
for md in all_md:
    try:
        tmp_docx = md[0: -3] + ".docx"
        command = "pandoc "+ md + " -o " + tmp_docx
        result = os.popen(command).readlines()
        if len(result) == 0:
            print(md, "转换成功")
    except Exception as reason:
        print(reason)

强大的 Pandoc

当然 Pandoc 怎么可能只有 md to docx 这么简单的功能呢。

Pandoc 还能实现

Pandoc可读取的格式Pandoc可生成的目标格式
MarkdownHTML 格式:包括 XHTML ,HTML5 及 HTML slide
reStructuredText文字处理软件格式:包括 docx 、odt 、OpenDocument XML
textile电子书格式:包括 EPUB(第2版及第3版)、FictionBook2
HTML技术文档格式:包括 DocBook 、GNU TexInfo 、Groff manpages 、Haddock
DocBook页面布局格式:InDesign ICML
LaTex大纲处理标记语言格式:OPML
MediaWiki标记语言TeX格式:包括 LaTeX、ConTeXt 、LaTeX Beamer
OPMLPDF格式:需要 LaTeX 支持
Org-Mode轻量级标记语言格式:包括 Markdown 、reStructuredText、textile、Org-Mode、MediaWiki标记语言、AsciiDoc
Haddock自定义格式:可使用 lua 自定义转换规则

Pandoc 的基本指令格式:

pandoc 源文件 -o 输出文件
看图比看表更清晰
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: // 将Markdown换为Docx的Java代码 ```java FileInputStream in = new FileInputStream("markdown.md"); XWPFDocument document = new XWPFDocument();// 创建 XHTML文档 ByteArrayOutputStream out = new ByteArrayOutputStream(); XHTMLOptions options = XHTMLOptions.create().indent(4); XHTMLConverter.getInstance().convert(document, out, options);// 将XHTML文档写入 Docx FileOutputStream outputStream = new FileOutputStream("docx.docx"); out.writeTo(outputStream);// 关闭输入输出流 in.close(); outputStream.close(); ``` ### 回答2: 要实现Java版的markdowndocx的代码,可以使用Apache POI库来操作docx文件,并使用CommonMark或flexmark-java库来解析markdown文本。 首先,确保已将Apache POI和CommonMark或flexmark-java库添加到项目的依赖中。 然后,创建一个Java类,命名为MarkdownToDocxConverter,实现以下换方法: ```java import org.apache.poi.xwpf.usermodel.*; import java.io.*; import org.commonmark.node.*; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.HtmlRenderer; public class MarkdownToDocxConverter { public static void convert(String markdownFilePath, String docxFilePath) throws IOException { // 读取markdown文件 File markdownFile = new File(markdownFilePath); BufferedReader reader = new BufferedReader(new FileReader(markdownFile)); String markdownText = reader.lines().reduce("", (a, b) -> a + "\n" + b); reader.close(); // 初始化docx对象 XWPFDocument docx = new XWPFDocument(); // 解析markdown文本 Parser parser = Parser.builder().build(); Node document = parser.parse(markdownText); // 将markdown为HTML HtmlRenderer renderer = HtmlRenderer.builder().build(); String html = renderer.render(document); // 创建段落,并添加HTML内容 XWPFParagraph paragraph = docx.createParagraph(); XWPFRun run = paragraph.createRun(); run.setText(html); // 保存docx文件 FileOutputStream out = new FileOutputStream(new File(docxFilePath)); docx.write(out); out.close(); } public static void main(String[] args) throws IOException { String markdownFilePath = "input.md"; String docxFilePath = "output.docx"; convert(markdownFilePath, docxFilePath); System.out.println("换完成!"); } } ``` 以上代码会将指定路径下的markdown文件换为docx文件。可以修改main方法中的markdownFilePath和docxFilePath来指定输入输出的文件路径。 注意:此代码仅供参考,实际换效果可能因markdown文本的复杂度而有所不同。若需要更细致的控制和更高级的特性,请参考Apache POI和CommonMark/flexmark-java的官方文档。 ### 回答3: 如要使用Java编写MarkdownDocx的代码,可以使用Apache POI库来实现。下面是一个简单的Java版MarkdownDocx的示例代码: ```java import org.apache.poi.xwpf.usermodel.*; import org.commonmark.node.*; import org.commonmark.parser.Parser; import org.commonmark.renderer.docx.DocxRenderer; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class MarkdownToDocxConverter { public static void main(String[] args) throws IOException { String markdownFile = "input.md"; String docxFile = "output.docx"; // 读取Markdown文件内容 InputStream inputStream = new FileInputStream(markdownFile); String markdownContent = new String(inputStream.readAllBytes()); // 解析Markdown内容为节点树 Parser parser = Parser.builder().build(); Node document = parser.parse(markdownContent); // 创建Docx文档对象 XWPFDocument docxDocument = new XWPFDocument(); // 使用DocxRenderer将Markdown节点树渲染为Word文档 DocxRenderer renderer = DocxRenderer.builder().build(); renderer.render(document, docxDocument.createParagraph()); // 保存为Docx文件 FileOutputStream outputStream = new FileOutputStream(docxFile); docxDocument.write(outputStream); // 关闭IO流 outputStream.close(); inputStream.close(); docxDocument.close(); System.out.println("Markdown换为Docx成功!"); } } ``` 该示例使用了Apache POI库来创建和操作Docx文档,以及CommonMark库来解析和渲染Markdown内容。首先读取Markdown文件的内容,然后使用CommonMark的Parser解析为节点树,接着使用CommonMark的DocxRenderer将节点树渲染为Docx文档,并将其保存到指定的文件中。最后关闭相关的IO流。 请注意,运行这段代码需要将相关的库文件添加到项目的依赖中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值