3 个版本 (1 个稳定版)

1.0.0 2024年7月26日
0.3.4 2024年5月7日
0.3.0 2024年4月25日
0.2.1 2024年4月18日
0.0.1 2024年3月19日

#410 in 文本处理

Download history 128/week @ 2024-04-23 158/week @ 2024-04-30 151/week @ 2024-05-07 1/week @ 2024-05-14 13/week @ 2024-05-21 4/week @ 2024-06-11 47/week @ 2024-07-02 118/week @ 2024-07-23 77/week @ 2024-07-30

每月195次下载

自定义许可

675KB
346 代码行

Metatron

Metatron

Metatron 库:基于 Shiva 库 的报告生成实现

支持的报告类型

  • 纯文本
  • Markdown
  • HTML
  • PDF

用法

Cargo.toml

[dependencies]
metatron = "1.0.0"
fn main() {
    let template = std::fs::read_to_string("report-template.kdl").unwrap();
    let data = std::fs::read_to_string("report-data.json").unwrap();
    let images = HashMap::new();
    let doc = Report::generate(&template, &data, &images).unwrap();
    let result = shiva::pdf::Transformer::generate(&doc).unwrap();
    std::fs::write("report.pdf",result.0).unwrap();
}

工作原理

report-template.kdl

template {
    title {
        image src="data/logo.png" width=100 height=100
        header level=1 "$P{company_name} Employee Report"
    }
    page_header {
        text size=7 "Confidential information"
    }
    column_header {
        column name="Name" width=30
        column name="Age" width=10
        column name="Salary" width=20
    }
    row {
        value "$F(name)"
        value "$F(age)"
        value "$F(salary)"
    }
    column_footer {
        value "Average:"
        value "$P{average_age}"
        value "$P{average_salary}"
    }
    page_footer {
        text size=7 "Tel: +1 123 456 789"
    }
    summary {
        paragraph {
            text size=10 "Company address: $P{company_address}"
        }
    }
}

report-data.json

{
   "rows": [
     {
       "name": "John",
       "age": 25,
       "salary": 50000
     },
     {
       "name": "Jane",
       "age": 30,
       "salary": 60000
     },
     {
       "name": "Jim",
       "age": 35,
       "salary": 70000
     }
   ],
   "params": {
     "company_name": "ABCDFG Ltd",
     "company_address": "1234 Elm St, Springfield, IL 62701",
     "average_age": 30,
     "average_salary": 60000
   }
}

生成的报告

PDF

贡献

我希望看到社区的贡献。如果您遇到错误,请随时提交问题。如果您想实现新功能或修复错误,请按照以下步骤进行

  1. 阅读 "贡献者许可协议 (CLA)"
  2. 通过telegram @ievkz 或 discord @igumnovnsk 联系我
  3. 在存储库中确认电子邮件邀请
  4. 执行 "git clone"
  5. 创建分配给您的问题的分支
  6. 向主分支创建拉取请求

依赖项

~13–24MB
~371K SLoC