当前仓库交付的 CLI 产物为 target/markitdown4j-<version>.jar。本文中的 markitdown4j 是 java -jar target/markitdown4j-<version>.jar 的文档简写。如果你没有创建自己的 shell 别名或包装脚本,请直接使用 java -jar ...。
基本形式:
markitdown4j [options] <input...>转换单个文件:
markitdown4j report.pdf -o output.md把目录中的支持文件批量转换到输出目录:
markitdown4j ./docs --batch -o out/递归处理多级目录:
markitdown4j ./docs --batch --recursive -o out/转换远程文件:
markitdown4j https://example.com/file.pdf -o out/从标准输入读取文本:
Get-Content -Raw input.txt | markitdown4j从标准输入读取 JSON 并显式指定 MIME:
'{"hello":"world"}' | markitdown4j --mime-type application/json启用 OCR:
markitdown4j scan.pdf --ocr --ocr-engine tesseract-cli -o output.md输出帮助示例:
markitdown4j --examples列出支持格式:
markitdown4j --list-formats当前版本的输出路径规则如下:
- 单文件且
-o指向文件:直接写入该文件 - 单文件且
-o指向目录:输出为<source>.md - 单文件未指定
-o:默认输出到源文件旁边 - 批量目录转换:按源文件名生成
<source>.md - 远程输入未指定输出文件:默认写入当前工作目录
如果路径末尾显式带分隔符,即使目录尚不存在,也按目录处理。
生成配置模板:
markitdown4j --generate-config校验配置:
markitdown4j --validate-config查看当前有效配置:
markitdown4j --show-config显式加载一份配置:
markitdown4j --show-config --config-path verification/manual/markitdown.release.yml在 YAML 基础上叠加 CLI 覆盖:
markitdown4j --show-config --config-path verification/manual/markitdown.release.yml --ocr --ocr-engine http适用场景:
- 本地 OCR
- 跨平台部署
- 不希望依赖 JVM 内嵌 OCR 绑定
命令示例:
markitdown4j test/with-text.png --ocr --ocr-engine tesseract-cli -o out/ocr/如果通过配置文件使用:
ocr:
enabled: true
engine: tesseract-cli
language: eng
tesseractPath: O:/tesserOCR/tesseract.exe
tessdataPath: O:/tesserOCR/tessdata适用场景:
- OCR 服务由外部 HTTP 接口统一提供
- CLI 运行机器不直接安装 OCR 引擎
适用场景:
- 接入 PaddleOCR 任务服务
- 需要远程 OCR 管理能力
| 类型 | 作用 |
|---|---|
com.markitdown.core.MarkItDownEngine |
主转换运行时入口 |
com.markitdown.config.ConversionOptions |
类型化转换选项 |
com.markitdown.api.ConversionResult |
转换结果对象 |
com.markitdown.api.DocumentConverter |
转换器扩展接口 |
com.markitdown.exceptions.ConversionException |
转换失败异常 |
com.markitdown.MarkItDownApplication |
创建默认 engine 的便捷入口 |
MarkItDownEngine engine = MarkItDownApplication.createEngine();通常建议:
- 长流程中复用一个 engine
- 在生命周期结束时调用
shutdown()
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());
}
} finally {
engine.shutdown();
}try (InputStream input = /* your stream */) {
ConversionResult result = engine.convert(input, "text/plain", options);
}注意事项:
- 流式转换时应尽量提供正确 MIME type
- 并不是所有转换器都支持流输入
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()
如果你只关心最终文本内容,最常用的是:
isSuccessful()getMarkdown()
如果你需要排查转换路径,则还应读取:
getWarnings()getMetadata()
常见失败类型包括:
- 文件缺失
- MIME 不支持
- 转换器不支持流输入
- OCR 引擎不可用
- OCR 执行失败
- 文件大小超过限制
CLI 中这类问题会转为用户可读的错误信息。Library 集成中则应结合返回值和异常进行处理。
当前版本提供:
convertAsync(Path, ConversionOptions)convertAsync(InputStream, String, ConversionOptions)convertParallel(List<Path>, ConversionOptions)convertAll(List<Path>, ConversionOptions)
适用场景:
- 批量文件队列
- 后台任务调度
- 需要并行转换的 Java 服务
boolean supportedPath = engine.isSupported(Path.of("input.pdf"));
boolean supportedMime = engine.isSupported("application/pdf");适合在正式转换前做预校验。
Engine 持有运行资源。无论转换是否成功,完成后都应调用:
engine.shutdown();