Xberg Dart 绑定 XLSX 冒烟测试实战:从 RustLib 初始化到电子表格元数据提取
后端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 仓库中 Dart 语言的 XLSX 冒烟测试片段smoke_xlsx_basic.md为主体逐行拆解其在纯 Dart / Flutter 环境下通过 flutter_rust_bridge 调用 Rust 内核提取.xlsx电子表格数据的完整流程。读完本文你将掌握RustLib初始化与释放的生命周期管理、ExtractInput与ExtractionConfig的 JSON 构造方式、XbergBridge.extract的底层调用链以及如何通过端到端测试断言验证表格内容、工作表数量与工作表名称等元数据。测试片段定位alef 自动生成的多语言冒烟测试该文档位于docs-site/src/snippets-generated/dart/smoke/目录属于 Xberg 文档站中由 alef 工具链自动生成的代码片段文件头部注释明确标注 This file is auto-generated by alef — DO NOT EDIT.。这类片段服务于两类场景类型检查frontmatter 中level: typecheck表示该片段会作为 Dart 源码参与编译级校验确保绑定 API 的签名在代码生成后仍然有效端到端测试side_effect: server表明该测试在运行时会启动或连接一个 mock server 提供远程文档验证uri形式的提取输入。同一目录下还有smoke_docx_basic.md、smoke_pdf_basic.md、smoke_image_png.md等姊妹片段它们共享同一套 Dart 代码骨架RustLib.init()→extract→RustLib.dispose()仅输入 JSON 的mime_type与uri不同。XLSX 片段的核心在于用一段 20 行左右的代码验证了「远程 URI 输入 → 默认配置 → 表格文档提取 → 元数据读取」整条通路。代码逐行拆解1. 原生运行时初始化RustLib.init()import dart:io; import package:xberg/xberg.dart; import package:xberg/src/xberg_bridge_generated/frb_generated.dart show RustLib;XbergBridge的所有方法都通过 flutter_rust_bridgeFRB桥接到 Rust 内核仓库中的核心 crate 为crates/xberg。RustLib.init()负责加载平台原生动态库Linux 为libxberg_dart.somacOS 为libxberg_dart.dylibWindows 为xberg_dart.dll其解析逻辑集中在 native_loader.dart缓存路径按cache/xberg/version/rid/组织例如 Linux x64 对应linux-x64RID下载与校验若本地缓存缺失会从 release 资产下载对应平台的 tar.gz并比对发布侧的.sha256摘要文件校验失败会直接拒绝安装Refusing to install a native library that does not match its published checksum开发捷径环境变量FRB_DART_LOAD_EXTERNAL_LIBRARY_NATIVE_LIB_DIR可指向本地原生库目录跳过下载测试/开发场景。2. 构造输入createExtractInputFromJsonfinal input await createExtractInputFromJson(json: {kind:uri,mime_type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,uri:https://example.com/xlsx/stanley_cups.xlsx});输入 JSON 包含三个字段对应 Rust 侧ExtractInput的序列化结构字段取值含义kinduri/bytes输入来源。uri表示远程地址bytes表示内存字节流mime_typeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetXLSX 的标准 MIME 类型帮助提取器在内容探测之外快速路由uri远程文件地址本次冒烟测试指向stanley_cups.xlsxNHL 球队斯坦利杯数据表在 xberg.dart 的扩展实现中ExtractInputKind的 wire 值即为uri/bytes见ExtractInputKindWireValue与 JSON 字符串一一对应这是从 Dart 侧直接把 JSON 文本反序列化为 Rust 强类型对象的基础。3. 默认配置createExtractionConfigFromJson(json: {})final config await createExtractionConfigFromJson(json: {});空对象{}表示全部使用 Rust 侧默认值。ExtractionConfig是生成的数据类、本身没有默认值因此官方推荐从 JSON 构建凡是省略的字段都保持 Rust 内核的默认配置。这意味着本次冒烟测试考察的是「零配置开箱即用」的 XLSX 提取体验与生产环境按需配置如开启 OCR、限定页数、调整表格模型形成对比。4. 核心调用XbergBridge.extractfinal result await XbergBridge.extract(input, config: config); stdout.writeln(result.results[0].metadata);XbergBridge.extract的 Dart 实现xberg.dart非常薄当config为空时它会自动补上createExtractionConfigFromJson(json: {})然后委托给rust_bridge.extract。返回的ExtractionResult.results是文档数组本次测试只读取第一个结果results[0]并打印其metadata—— 这正是本测试片段关注的输出面。5. 收尾RustLib.dispose()} finally { RustLib.dispose(); }通过try / finally保证无论提取是否抛错原生运行时都会被释放避免在长驻服务或测试进程中泄漏 FFI 资源。这是所有 Dart 绑定用法的标准收尾模式。端到端测试中的完整断言链代码片段本身只打印metadata但仓库中的端到端测试补全了全部验证点。在 smoke_test.dart 中同名测试「Smoke test: XLSX with basic spreadsheet data including tables」以XbergBridge.extract的真实返回值做了一组断言MIME 类型回显results[0].mimeType必须等于application/vnd.openxmlformats-officedocument.spreadsheetml.sheet内容长度content.length 100确保提取出的文本足够充实内容关键词content必须同时包含Team、Location、Stanley Cups、Blues、Flyers、Maple Leafs以及球队缩写STL、PHI、TOR—— 这证明表头与单元格值都进入了提取结果表格结构results[0].tables.length 1确认表格被结构化识别Excel 元数据metadata.format.excel.sheet_count 2且sheet_names中包含Stanley Cups。对应地format_specific_test.dart 中的「XLSX spreadsheet extraction using extract」也复用了同一份stanley_cups.xlsx验证格式专项路径的提取不报错。这些断言的契约源头是 fixture 文件 xlsx_basic.json它声明了 mock 响应路径/xlsx/stanley_cups.xlsx返回application/octet-stream原始字节并将上述断言以equals、min_length、contains_all、count_min、greater_than_or_equal等声明式规则固化下来。也就是说文档片段、fixture 契约与端到端测试三者由同一套生成链路alef e2e generate保持一致。Rust 内核侧Excel 提取器如何工作按扩展名分派的读取入口Dart 绑定只负责参数编解码真正的提取逻辑在 Rust 内核。入口位于 excel/open.rs 的read_excel_file它根据文件扩展名把请求分派给不同读取器——.xlsx/.xlsm/.xltm→read_xlsx_family_filecalamine XLSX 读取器 sheet 修订与批注合并.xlam/.xla→ 加载项专用读取路径解析失败时回退为空工作簿.xlsb→ calamine Xlsb 二进制工作簿读取器.ods及其他 →open_workbook_auto自动探测。ZIP 安全预检XLSX 本质是 ZIP 容器因此在进入 calamine 之前validate_zip_containerexcel/open.rs会先解析 ZIP 中央目录并施加两层防护条目数不得超过SecurityLimits::max_files_in_archive累计解压大小与压缩比不得超过max_archive_size/max_compression_ratio复用ZipBombValidator。注释明确指出这是为了在 calamine 内部读取路径之前拦截「zip 炸弹」且解析中央目录不会解压任何条目属于廉价的预检。Excel 元数据模型冒烟测试打印的metadata对应 Rust 侧ExcelMetadatatypes/metadata.rs字段与端到端断言完全对应pub struct ExcelMetadata { pub sheet_count: Optionu32, // 工作簿中的工作表数量 pub sheet_names: OptionVecString, // 所有工作表的名称 }在 Dart 端metadata.format以FormatMetadata_Excel判别体出现其field0即承载这两个字段——这正是smoke_test.dart中(result.results[0].metadata.format as FormatMetadata_Excel).field0.sheetCount断言的访问路径。如何运行这个测试安装 Dart 包dart pub add xberg # 纯 Dart 项目 flutter pub add xberg # Flutter 项目包版本与依赖约束见 pubspec.yamlSDK 要求3.11.0 4.0.0运行时基于flutter_rust_bridge2.13.0。首次运行时原生库会按平台 RID 自动下载并校验见上文native_loader.dart。运行冒烟测试# 在 e2e/dart 目录下需要 mock server 与 SUT dart test test/smoke_test.dart --name XLSX测试通过SUT_URL/MOCK_SERVER_URL环境变量或本地http://localhost:8008定位 mock server见 smoke_test.dart也可以借助 run-with-mock-server.sh 一键拉起整套环境。片段中的https://example.com/...是占位地址真实运行时由 mock 响应替换。快速自验示例若不依赖 mock server可把片段改造为本地文件输入import package:xberg/xberg.dart; Futurevoid main() async { final output await XbergBridge.extract( const ExtractInput(kind: ExtractInputKind.uri, uri: stanley_cups.xlsx), ); print(output.results.first.content); }该模式与 README.md 的 Quick Start 一致ExtractInput未指定mime_type时Rust 侧会执行格式探测后自动路由。从冒烟测试走向生产配置冒烟测试验证的是默认路径而真实项目通常需要精细控制。同类测试如config_*系列 fixture展示了可扩展的配置面例如final config await createExtractionConfigFromJson(json: { output_format: markdown, ocr: {backend: tesseract, language: [eng]}, table: {model: tatr} } );其 Rust 侧默认值、字段枚举如TableModel、OutputFormat均可从 xberg.dart 中生成的扩展方法TableModelWireValue、ExtractionMethodWireValue等逐一对齐 wire 值。需要批量处理时还可改用XbergBridge.extractBatch(inputs)并行提取多个文档。小结通过这一份 20 行的 Dart 冒烟测试片段可以完整透视 Xberg 的多语言绑定架构Dart 层负责 JSON 编解码与 FFI 生命周期Rust 内核负责格式分派、安全预检与结构化解构alef 生成链路则把同一测试契约同步到文档片段、fixture 与端到端断言。对于 XLSX 场景默认配置下即可获得文本内容、结构化表格、工作表数量与名称四类产物为后续的 RAG 切块、表格问答与元数据索引提供了可直接消费的输入。赞分享后端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点击查看免费下载相关推荐使用 C 绑定提取 XLSX 电子表格Xberg 冒烟测试代码实战解析使用 C 绑定提取 XLSX 电子表格Xberg 冒烟测试代码实战解析 本文以 Xberg 仓库中的 C 冒烟测试片段 docs site/src/snip后端AI 应用NLP使用 xberg 的 Dart 绑定提取 XLSX 电子表格extract API 实战指南使用 xberg 的 Dart 绑定提取 XLSX 电子表格extract API 实战指南 本篇技术指南以仓库中自动生成的 Dart 示例文档 format后端AI 应用NLPXberg Dart 绑定 JSON 文档提取smoke_json_basic 冒烟测试逐行解析Xberg Dart 绑定 JSON 文档提取smoke_json_basic 冒烟测试逐行解析 本指南围绕 Xberg 仓库中的 Dart 冒烟测试片段 s后端AI 应用NLP上一篇gRPC-Web 客户端运行时库实战指南protoc 代码生成、Envoy 网关代理与 TypeScript 流式调用下一篇Pinia状态迁移工具从Vuex到Pinia的平滑过渡创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →