MrSrsen/rpt-rs

GitHub: MrSrsen/rpt-rs

一个纯 Rust 编写的 SAP Crystal Reports(.rpt)文件解析库与 CLI 工具,无需 SAP 运行时或 Windows 环境即可跨平台读取、解码和导出报表定义。

Stars: 6 | Forks: 0

# rpt-rs [![License: MPL-2.0](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](LICENSE) ![Rust 1.85+](https://img.shields.io/badge/rust-1.85%2B-orange.svg) 一个纯 Rust 库和命令行工具,用于在无需 SAP runtime、数据库连接或任何 Windows 组件的情况下读取 **SAP Crystal Reports (`.rpt`)** 文件。 `.rpt` 是一种未公开的加密二进制格式。`rpt-rs` 可以打开文件,解密并解压其 stream,解码内部 record 结构,并将其投射到一个可供您检查或导出的类型化报表模型中。 ## 它的功能 - **直接读取 `.rpt`** — 打开 OLE/CFB 复合文件,解密报表 stream,将其解压并解码内部 record。无需 SAP DLL,无需数据库,跨平台支持。 - **构建类型化模型** — 将 record 投射到结构化的报表模型中:数据源和表、参数、公式、分组、节以及布局好的报表对象。 - **导出为 XML** — 将模型序列化为结构化的 XML 文档,以便检查或在版本控制中对比报表定义。 - **通过 CLI 检查** — 总结报表,列出其参数,并以文本或 JSON 格式转储 stream 和恢复的字符串。 - **无损往返** — 精确保留每一个 record,包括尚未建模的 record 类型,因此在读取时不会丢失任何内容。 ## Workspace | Crate | 功能描述 | | ------------ | ------------------------------------------------------------------------------------ | | `rpt` | 核心库:container → 解密 → record → 类型化模型。 | | `rpt-engine` | 基于模型计算的派生分析(例如字段使用计数、公式分析)。 | | `rpt-to-xml` | XML 导出器(二进制)。 | | `rpt-cli` | 检查 CLI(二进制文件:`rpt`)。 | ## 从源码构建 该 crate 尚未发布到 crates.io,因此请从源码构建(或使用下文的 Docker)。在安装了 Rust 工具链的情况下: ``` cargo build --release ``` 这会将两个独立的二进制文件写入 `target/release/`: - `rpt` — 检查 CLI - `rpt-to-xml` — XML 导出器 ## 用法 直接运行构建好的二进制文件 — 运行时无需 cargo: ``` # Inspect 一个 report ./target/release/rpt inspect report.rpt # 以 JSON 格式列出 report 的参数 ./target/release/rpt inputs report.rpt --json # Export 为 XML ./target/release/rpt-to-xml report.rpt out.xml ``` 作为库使用: ``` let rpt = rpt::Rpt::open("report.rpt")?; let report = rpt.report(); println!("{}", report.summary_info.title.as_deref().unwrap_or("")); ``` ## Docker 没有 Rust 环境?多阶段构建会生成一个小巧的镜像(约 14 MB),其中仅包含两个静态链接的二进制文件 — 没有工具链、shell 或 OS 包。 ``` docker build -t rpt-rs . # Inspect 一个 report(将其所在的目录挂载为 /data) docker run --rm -v "$PWD:/data" rpt-rs rpt inspect report.rpt # Export 为 XML docker run --rm -v "$PWD:/data" rpt-rs rpt-to-xml report.rpt out.xml ``` `rpt` 和 `rpt-to-xml` 都在镜像的 `PATH` 中;您可以覆盖命令来运行其中任意一个。 每次发布时,预构建的镜像都会发布到 GitHub Container Registry: ``` docker pull ghcr.io/mrsrsen/rpt-rs:latest ``` ## 文档 完整的技术文档位于 [`docs/`](docs/): - [文档索引](docs/README.md) - [格式概述](docs/01-format-overview.md) — `.rpt` 是什么以及解码是如何端到端工作的 - [Container](docs/02-container.md) — CFB 复合文件及其 stream - [Stream 解码](docs/03-stream-decoding.md) — 加密、压缩和 record 帧 - [Record 树](docs/04-record-tree.md) — record 嵌套、掩码和无损基底 - [语义模型](docs/05-semantic-model.md) — 将 record 投射到报表模型中 - [Block 目录](docs/06-block-catalog.md) — 每个已解码的 record 类型、其含义及其布局 - [代码库](docs/07-codebase.md) — crate 和模块 - [用法](docs/08-usage.md) — CLI 工具和库 API - [支持矩阵](docs/09-support-matrix.md) — 支持和不支持的内容 ## 贡献 有关如何构建、测试和构建更改结构的信息,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## License MPL-2.0。
标签:Rust, SAP Crystal Reports, XML导出, 可视化界面, 数据提取, 文件解析, 文档结构分析, 网络流量审计, 请求拦截, 通知系统