一个面向文档转 Markdown 的 Java 实现版本。项目以 CLI 和 Java Library 两种形态交付,定位为 Microsoft MarkItDown 的 Java 重写版本,并用于开源重写比赛场景。
| 项目 | 说明 |
|---|---|
| 当前版本 | 0.0.4 |
| 运行语言 | Java 11 |
| 交付形态 | 可执行 Shaded JAR + Java Library |
| OCR 引擎 | tesseract-cli、http、paddleocr |
| 主产物 | target/markitdown4j-0.0.4.jar |
| 许可证 | MIT |
当前仓库只描述和交付当前 Java 版本,项目定位包括:
- Microsoft MarkItDown 的 Java 重写实现
- 面向开源重写比赛的交付项目
- 可直接本地使用的文档转 Markdown CLI
- 可嵌入 Java 系统的转换库
markitdown4j 将多种输入内容转换为 Markdown,并通过两种产品形态暴露同一套核心能力:
- CLI:用于本地批量转换、OCR 控制、配置查看和自动化脚本调用
- Java Library:用于在 Java 服务、工具链和业务系统内直接集成转换能力
- 支持本地文件、目录、HTTP(S) URL 和标准输入流
- 支持可配置的 Markdown、表格和图片输出方式
- 支持把提取出的图片写入输出目录附近的资源目录
- 支持在图片型文本提取场景下启用 OCR
- 支持基于 YAML 的配置加载、校验和有效配置查看
- 支持单文件转换、目录批量转换和多文件顺序处理
| 引擎 | 适用场景 |
|---|---|
tesseract-cli |
本地安装 Tesseract 后进行跨平台 OCR |
http |
通过自定义 HTTP OCR 服务执行识别 |
paddleocr |
通过 PaddleOCR 任务接口执行识别 |
- DOCX
- XLSX
- HTML / HTM
- TXT / Markdown
- CSV / JSON / XML
- 图片
- ZIP 压缩包
- DOC
- PPTX
- PPT
- XLS
- 音频
当前仓库交付的 CLI 产物为:
target/markitdown4j-0.0.4.jar本文中的 markitdown4j 只是文档写法,等价于:
java -jar target/markitdown4j-0.0.4.jar如果你没有自行创建别名或包装脚本,请直接使用 java -jar ... 形式执行。
mvn clean packagemarkitdown4j [options] <input...>转换单个 PDF:
markitdown4j report.pdf -o output.md批量转换目录中的支持文件:
markitdown4j ./docs --batch -o out/转换远程文件:
markitdown4j https://example.com/report.pdf -o out/启用 OCR 转换:
markitdown4j scan.pdf --ocr --ocr-engine tesseract-cli -o output.md生成并检查配置:
markitdown4j --generate-config
markitdown4j --validate-config
markitdown4j --show-config当前版本采用 YAML-first 配置模型。
可识别的配置文件包括:
markitdown.ymlmarkitdown.local.ymlmarkitdown.example.yml
解析顺序为:
- 内置默认值
markitdown.ymlmarkitdown.local.yml- CLI 覆盖项
完整配置说明、场景配置示例、校验规则和 CLI 覆盖行为请参考 configuration.md。
Library 不是附属功能,而是当前产品形态的一部分。
典型使用方式包括:
- 在 Java 服务中处理用户上传文档
- 在 Java 批处理流程中执行文档转换
- 以结构化方式消费 Markdown、metadata 和 warnings
- 在 Java 代码中扩展或控制转换器注册与调用
安装到本地仓库:
mvn clean installMaven 坐标:
<dependency>
<groupId>com.markitdown</groupId>
<artifactId>markitdown4j</artifactId>
<version>0.0.4</version>
</dependency>| 类型 | 作用 |
|---|---|
com.markitdown.core.MarkItDownEngine |
主转换入口 |
com.markitdown.config.ConversionOptions |
运行时转换选项 |
com.markitdown.api.ConversionResult |
包含 Markdown、metadata、warnings 和状态的结果对象 |
com.markitdown.api.DocumentConverter |
转换器扩展契约 |
com.markitdown.exceptions.ConversionException |
转换失败时的受检异常 |
com.markitdown.MarkItDownApplication |
提供 createEngine() 的便捷入口 |
MarkItDownEngine engine = MarkItDownApplication.createEngine();
try {
ConversionOptions options = ConversionOptions.builder().build();
ConversionResult result = engine.convert(Path.of("report.pdf"), options);
if (result.isSuccessful()) {
System.out.println(result.getMarkdown());
} else {
System.err.println(result.getWarnings());
}
} finally {
engine.shutdown();
}try (InputStream input = /* your stream */) {
ConversionResult result = engine.convert(input, "text/plain", options);
}ConversionOptions options = ConversionOptions.builder()
.includeMetadata(true)
.includeImages(true)
.includeTables(true)
.tableFormat("github")
.imageFormat("markdown")
.useOcr(true)
.ocrEngine("tesseract-cli")
.language("eng")
.tesseractPath("O:/tesserOCR/tesseract.exe")
.tessdataPath("O:/tesserOCR/tessdata")
.maxFileSize(0)
.build();常用结果读取接口包括:
getMarkdown()getMetadata()getWarnings()isSuccessful()
失败场景主要包括:
- 文件不存在或不可读
- MIME 类型无法识别或没有可用转换器
- OCR 引擎不可用或执行失败
- 输入文件超过大小限制
- 远程输入下载失败
这类错误在 CLI 中会转换为面向用户的诊断信息,在 Library 中则可通过结果对象和异常处理逻辑进行控制。
当前 Library 还提供以下入口:
convertAsync(Path, ConversionOptions)convertAsync(InputStream, String, ConversionOptions)convertParallel(List<Path>, ConversionOptions)convertAll(List<Path>, ConversionOptions)
boolean supportedPath = engine.isSupported(Path.of("input.pdf"));
boolean supportedMime = engine.isSupported("application/pdf");Engine 持有运行时资源。转换结束后应调用 shutdown() 释放资源,避免长生命周期进程中出现资源残留。
中文文档:
- usage.md:CLI 和 Java Library 的使用方法、命令模式、输出规则、OCR 用法与集成示例
- configuration.md:配置模型、YAML 键、场景配置示例、校验规则与 CLI 覆盖行为
- testing.md:当前测试项、测试内容、测试结果范围与手工功能验证命令
- development.md:当前版本的软件设计、目录结构、模块职责、运行流程和开发说明
English documents:
- readme.en.md: English project homepage.
- usage.en.md: CLI and Java library usage, command patterns, output rules, OCR usage, and integration examples.
- configuration.en.md: configuration model, YAML keys, scenario-based configuration examples, validation rules, and CLI override behavior.
- testing.en.md: current test inventory, test scope, and concrete test command references.
- development.en.md: implementation-oriented design and development documentation for contributors.
- JDK 11
- Maven 3.8+
- 如果使用
tesseract-cliOCR,需要系统中安装 Tesseract 可执行程序
| 形态 | 定位 | 说明 |
|---|---|---|
| CLI | 面向最终使用者 | 用于本地转换、自动化脚本和手工命令执行 |
| Java Library | 面向 Java 集成方 | 用于嵌入业务系统、工具链和后端服务 |