ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

xberg Kotlin/Android 实战:通过 bytes 提取 API 将 PDF 解析为 Markdown 输出

xberg Kotlin/Android 实战:通过 bytes 提取 API 将 PDF 解析为 Markdown 输出 后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载本文以 xberg 仓库中自动生成的契约测试文档 output_format_bytes_markdown.md 为主线讲解在 Kotlin/Android 客户端中如何把内存中的 PDF 字节流交给 xberg 内核通过ExtractInput(kind bytes)与ExtractionConfig(output_format markdown)的配合直接拿到结构化 Markdown 文本与元数据。读完本文你将掌握 bytes 型输入的完整构造方式、Base64 编码细节、Jackson SNAKE_CASE 映射约定以及如何用契约断言验证mimeType、正文长度与metadata.outputFormat三个关键结果字段。一、这个测试片段在验证什么该片段属于contract契约测试分类目标是验证通过 bytes 提取 API 输出 Markdown 格式这一条端到端调用链。它在 xberg 的测试体系中对应两个实体文档片段本主题output_format_bytes_markdown.md以可读的 Kotlin 代码展示调用方式契约夹具fixtures/contract/output_format_bytes_markdown.json其中声明了三条断言results[0].mime_type application/pdf输入文档被正确识别为 PDFresults[0].content长度不小于 10Markdown 正文确实被产出results[0].metadata.output_format markdown配置项被真实生效并回显在元数据中。片段头部 front matter 标注了side_effect: safe与requires: []说明该用例无外部副作用、无额外依赖可以独立运行非常适合作为理解 xberg Kotlin 绑定 API 的入门样例。二、bytes 输入把 PDF 文件编码进 ExtractInput与uri型输入不同bytes型输入要求调用方将文档的原始字节以Base64 字符串形式放进ExtractInput.bytes字段。片段中的做法是val inputFile0 java.util.Base64.getEncoder().encodeToString( java.nio.file.Files.readAllBytes(java.nio.file.Path.of(pdf/fake_memo.pdf)) )这一步把本地pdf/fake_memo.pdf仓库 e2e 测试夹具见 e2e/kotlin_android/pdf读取并编码成 Base64随后用 Jackson 反序列化出一个ExtractInputval input mapper.readValue( {\bytes\:\__ALEF_DOC_FILE_0__\,\config\:{\output_format\:\markdown\},\filename\:\fake_memo.pdf\,\kind\:\bytes\,\mime_type\:\application/pdf\} .replace(__ALEF_DOC_FILE_0__, inputFile0), ExtractInput::class.java )对照 ExtractInput.kt 的定义可以一一对应kind bytes指明数据来源bytes携带 Base64 载荷filename与mimeType是辅助 xberg 完成 MIME 嗅探与元数据补全的提示字段config则允许对该输入单独覆盖抽取配置。此外该 JSON 使用了config: {output_format: markdown}这种内联于输入的配置优先级高于外层全局配置这在批量混合场景中很有用。三、抽取配置output_format markdown 是核心开关片段同时构造了一个独立的全局配置对象val config mapper.readValue( {\output_format\:\markdown\,\url\:{\crawl\:{\ssrf\:{}}}}, ExtractionConfig::class.java )其中output_format: markdown是让 xberg 将文档正文渲染为 Markdown 的关键开关url.crawl.ssrf是一个空的安全配置对象默认的 SSRF 防护策略在 bytes 场景下它实际不参与网络访问只是ExtractionConfig数据结构中默认需要存在的字段。从 Rust 内核侧看该字段定义在 core.rs 的output_format: OutputFormat默认值为OutputFormat::Plain见同文件 L618当配置显式指定为Markdown后抽取管线在 pipeline/format.rs 等环节会选择对应的渲染器输出 Markdown 文本同时把该值写入结果元数据。这也是为什么断言metadata.output_format markdown能够成立它不是调用方单方面声明的而是内核在extract调用返回时如实回填的。四、发起调用并读取结果输入与配置就绪后直接调用 Kotlin 绑定的顶层入口val result Xberg.extract(input, config) println(result.results.first().mimeType) println(result.results.first().content) println(result.results.first().metadata.outputFormat)Xberg.extract是 Kotlin/Android 包中面向单文档抽取的统一入口对应的 JNI 桥接在 crates/xberg-jni 中实现Rust 侧的服务端处理逻辑可参考 api/handlers.rs。返回结果中results.first().mimeType应等于application/pdf证明 xberg 依据字节内容而非仅凭文件名完成了格式识别results.first().content即 Markdown 渲染后的正文长度不小于 10 个字符results.first().metadata.outputFormat即本次实际生效的输出格式应等于markdown。这里还有一个容易踩坑的细节片段中的mapper显式设置了PropertyNamingStrategies.SNAKE_CASEval mapper jacksonObjectMapper() .setPropertyNamingStrategy(com.fasterxml.jackson.databind.PropertyNamingStrategies.SNAKE_CASE)xberg 的 Kotlin 数据类如ExtractInput、ExtractionConfig以 camelCase 命名 Kotlin 属性outputFormat、mimeType而 JSON 线上协议使用 snake_caseoutput_format、mime_type。因此必须在 ObjectMapper 上启用 SNAKE_CASE 策略JSON 才能与 Kotlin 字段正确互转e2e 测试中 ContractTest.kt 也是以同样的方式初始化MAPPER并在断言中使用result.results.first().metadata.outputFormat.orEmpty()读取字段。五、从断言看结果契约契约夹具 output_format_bytes_markdown.json 的assertions部分就是这段 Kotlin 代码对应的验收标准断言字段断言类型期望值语义results[0].mime_typeequalsapplication/pdf格式识别正确results[0].contentmin_length10Markdown 正文非空且具备可用长度results[0].metadata.output_formatequalsmarkdown输出格式配置生效并回显对应的真实测试用例testOutputFormatBytesMarkdown位于 ContractTest.kt其断言与夹具完全一致。这类夹具 代码片段 真实测试三件套正是 alef 契约体系的典型形态片段是给人看的用法说明夹具是可机器校验的验收契约而测试类是真正在 JVM 上执行的验证。六、同族用例与后续延伸理解 bytes markdown 的组合后可以顺带对比仓库中其余同族契约uri 版 Markdown 输出output_format_markdown.md 及其夹具 fixtures/contract/output_format_markdown.json验证的是kind uri通过 mock 服务器下载pdf/fake_memo.pdf同样产出 Markdown断言与 bytes 版完全一致批量抽取extract_batch系列用例见 docs-site/src/snippets-generated/kotlin-android/batch支持对多个输入一次调用其中extract_batch_bytes_mixed_format等夹具展示了混合格式批量处理时output_format的按输入覆盖能力表格访问table_access.md 展示了 HTML 表格如何同时暴露结构化 cells 与 Markdown 渲染结果印证 Markdown 输出对表格类文档的兼容性。七、小结通过这个契约片段你可以得到一条可直接照抄的 Kotlin/Android 侧 PDF→Markdown 抽取模板读取文件 → Base64 编码 → 构造ExtractInput(kind bytes)→ 构造ExtractionConfig(output_format markdown)→ 调用Xberg.extract→ 用mimeType、content、metadata.outputFormat三个字段验证结果。整个过程不依赖网络、无需额外文件系统约定适合在 Android 的本地文档处理、离线解析或内容归档场景中直接落地。赞分享后端AI 应用NLP【免费下载链接】xbergPolyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with CLI, REST API, and MCP server.项目地址https://gitcode.com/gh_mirrors/kr/xberg点击查看免费下载相关推荐xberg C API 实战通过 bytes 输入将 PDF 提取为 Markdown 输出格式xberg C API 实战通过 bytes 输入将 PDF 提取为 Markdown 输出格式 本文基于 xberg 仓库中自动生成的 C 语言契约测试片段后端AI 应用NLPXberg C 字节提取 API 实战通过 ExtractAsync 将 PDF 转为 Markdown 输出Xberg C 字节提取 API 实战通过 ExtractAsync 将 PDF 转为 Markdown 输出 本篇技术指南围绕 Xberg 的 bytes后端AI 应用NLPXberg Java 绑定实战通过 bytes 输入提取 PDF 并输出 Markdown 格式Xberg Java 绑定实战通过 bytes 输入提取 PDF 并输出 Markdown 格式 本文以 Xberg 仓库中的契约测试文档 docs site后端AI 应用NLP上一篇Easy Vibe 课程实践大模型微调与部署完全指南 —— 从数据工程、LoRA 到量化与推理服务下一篇终极Minecraft模组管理方案Ferium支持Modrinth、CurseForge和GitHub全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表