
后端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 仓库中crates/xberg-native-pdf/ATTRIBUTIONS.md展开系统梳理该原生 PDF 引擎的完整来源归属它如何从上游 PDFOxide 分叉而来、仓库内直接打包vendored的 fontdb 代码、通过include_bytes!内嵌的三套字体资产的许可证细节以及由deny.toml管控的非 MIT/Apache-2.0 依赖清单。读完本文你将掌握一套可直接复用的「Rust crate 合规审计」方法论分叉许可证选择、vendored 代码改造记录、字体资源单独授权、以及基于 cargo-deny 的依赖许可证白名单策略。一、crate 身份与许可基调xberg-native-pdf是 xberg 工作区中的原生 PDF 引擎 crate负责文本提取、表格/表单解析、页面光栅渲染、加解密与文档编辑见 crates/xberg-native-pdf/README.md。其Cargo.toml中明确声明license MIT见 crates/xberg-native-pdf/Cargo.toml关键字为pdf-parser、pdf-rendering等。该 crate 的合规结构分为三层自身许可证MIT由仓库根目录的LICENSE承载直接打包的第三方代码src/vendor/fontdb/下的 fontdb 代码MIT 许可内嵌的字体资源src/fonts/assets/下的多套 TTF各自持有独立许可证传递依赖许可证由根目录 deny.toml 的[licenses]白名单统一管控。ATTRIBUTIONS.md正是对上述第 24 层的完整登记。二、上游来源PDFOxide 分叉与 MIT 单臂选择2.1 分叉背景与许可继承xberg-native-pdf的绝大部分代码派生自 yfedoseev/pdf_oxide简称 PDFOxide作者 Yury Fedoseev该上游项目采用MIT OR Apache-2.0 双许可。xberg 的 fork 选择了双许可中的MIT 单臂——依据两份许可证的条款从 MIT-OR-Apache-2.0 双许可中择一使用是允许的。仓库根目录的LICENSE如实反映了这一血统保留上游原始版权声明Copyright (c) 2025-present Yury Fedoseev同时增加 fork 自身的贡献者声明Copyright (c) 2026-present Kreuzberg, Inc.。2.2 商标与命名边界ATTRIBUTIONS.md特别强调了一个容易踩坑的合规点上游的商标政策允许描述性表述——将本 crate 描述为「a fork of PDFOxide」或「derived from PDFOxide」是被明确允许的但不允许将上游名称PDFOxide、pdf_oxide用作本发行版的产品名也不得暗示与上游或其作者存在背书或隶属关系。这一原则也在 crates/xberg-native-pdf/Cargo.toml 中得到呼应其authors字段刻意保留为 xberg 自己的维护者Naaman Hirschfeld、Tobias Perelsteininclude列表则把ATTRIBUTIONS.md、LICENSE、README.md一并打包进.crate发行物确保任何下游用户都能看到完整的归属信息。2.3 分叉历史不写入 CHANGELOG上游在 fork 之前的变更历史没有复制进CHANGELOG.md这段历史只存在于本仓库的 git 历史与上游项目中。对维护者而言这意味着追溯 fork 之前的 bug 修复需要回看上游仓库而 fork 之后的变更则在本仓库的CHANGELOG.md中。三、Vendored 代码fontdb 的本地化改造3.1 为什么选择 vendoring 而非依赖src/vendor/fontdb/打包了来自 fontdb 的模块文档中Third-party code vendored directly into this crate rather than pulled in as a Cargo dependency, typically because it needed non-trivial surgery (e.g. an unsafe code path removed, or an internal parser swapped out) that isnt appropriate to carry as a patched fork of someone elses crate.即因为要对上游做「非平凡手术」而这类改造不适合以「维护一个他人的 crate 的补丁 fork」的方式来承载所以选择直接 vendoring。src/vendor/fontdb/LICENSE内保存了 fontdb 0.24.0 的 MIT 许可全文Copyright (c) 2020 Yevhenii Reizner。3.2 三处具体改造与上游相比vendored 的 fontdb 代码做了以下修改字体解析栈替换内联的字体解析器被替换为fontations/skrifa技术栈——与 crates/xberg-native-pdf/Cargo.toml 中声明的skrifa 0.46依赖相吻合日志后端替换log调用点全部替换为tracing——在 crates/xberg-native-pdf/src/vendor/fontdb/mod.rs 与system_fonts.rs中可检索到多处tracing::debug/trace调用验证了这一改造移除 unsafe 内存映射路径删除了上游基于mmap的 unsafe 读取路径提升安全性。这三项改造同时解释了为何该 crate 的 Cargo 依赖中包含fontconfig-parser仅 Linux/BSD 系统字体发现路径使用macOS/Windows 不依赖 fontconfig并佐证了 fork 工程中「保留上游版权、记录改造点」的合规实践。四、内嵌字体资产三套字体的单独授权4.1 主字体清单src/fonts/assets/下通过include_bytes!编译进二进制的字体文件共三套每套持有独立许可证文件许可证上游来源DejaVuSans.ttf、DejaVuSans-Bold.ttfBitstream Vera / DejaVu 许可证宽松但修改后必须重命名——全文见src/fonts/assets/LICENSE-DejaVuDejaVu Fonts 项目基础字形 © 2003 Bitstream, Inc.DroidSansFallbackFull.ttf约 4.0 MBApache License, Version 2.0Droid Sans Fallback© Google Inc.源自 Android Open Source Projectframeworks/base/data/fontsNotoEmoji-Regular.ttf约 419 KBSIL Open Font License, Version 1.1Noto Emoji单色© Google Inc. 及贡献者事实边界说明ATTRIBUTIONS.md明确写道DroidSansFallbackFull.ttf与NotoEmoji-Regular.ttf的来源与许可证主张以src/fonts/assets/LICENSE-fallback-fonts文件所载为准该文档本身不独立核验上游版权。这份严谨的措辞本身就是合规文档的范本——只陈述自己确认过的证据。4.2 许可证要点DejaVu 的重命名义务src/fonts/assets/LICENSE-DejaVu即 Bitstream Vera 派生的 DejaVu Fonts 许可证的核心条款值得注意允许复制、分发、合并、出售字体软件但修改字体后必须重命名为不含 Bitstream 或 Vera 字样的名称license 原文the fonts are renamed to names not containing either the words Bitstream or the word Vera字体按「AS IS」提供Bitstream 与 GNOME Foundation 不承担任何担保。由于 xberg 在输出 PDF 时会对内嵌字体做subset子集化见下文 4.4这种「修改即需重命名」的约束是维护者必须持续遵守的合规细节。4.3 字体用途与功能开关src/fonts/assets/LICENSE-fallback-fonts文件澄清了这些回退字体的用途在交互式表单被扁平化flatten时用于烘焙非拉丁 / emoji 表单字段值。其启用条件与cjk-form-fontsCargo feature 绑定——只有启用该 feature 的二进制才会内嵌这两套字体。从源码看crates/xberg-native-pdf/src/fonts/form_fallback.rs 实现了这一机制Fallback::CjkDroid Sans Fallback与Fallback::EmojiNoto Emoji两个枚举变体classify(c)将字符分类Latin-1≤ U00FF直接用字段自身/DA字体渲染否则归入 CJK 或 Emoji 回退类split_runs(text)将文本按回退类切分为连续 run变体选择符UFE0E/FE0F与 ZWJU200D会附着到前一个 run保证一个 emoji 序列不跨字体font_bytes(kind)在cjk-form-fonts表单扁平化路径或cjk-render-fallback页面渲染 CJK 替换路径任一 feature 下返回对应字体的原始 TrueType 字节——两套 feature 相互独立启用其一不会激活另一条路径。配套的单元测试如runs_split_mixed_cjk_emoji验证やまだA被切成 Cjk / Emoji / None 三段可以直接验证分类逻辑的正确性。4.4 渲染路径中的 DejaVu 回退与表单路径不同crates/xberg-native-pdf/src/fonts/bundled.rs 内嵌的 DejaVu Sans / Bold 服务于markdown / DOCX / PPTX → PDF 渲染路径当请求的文本包含标准 14 PDF 字体WinAnsiEncoding无法覆盖的字符希腊文、拉丁扩展、西里尔文等时回退到 Unicode 兼容字体面。两个关键实现细节needs_unicode_font(s)先对数学字母数字符号做归一化再判断避免不必要的字体切换字体在输出时会被子集化subset on emit最终 PDF 中只包含实际用到的字形从而把二进制与输出体积都控制在合理范围。五、非 MIT/Apache-2.0 依赖deny.toml 白名单管控5.1 权威清单cargo deny check licenses该 crate 以 MIT 单许可证发布但其传递依赖图必然携带其他许可证。ATTRIBUTIONS.md指定根目录 deny.toml 的[licenses]段为唯一权威来源并给出运行时命令cargo deny check licenses运行该命令即可获得依赖许可证的完整、实时视图。根deny.toml的[licenses]段确实列出了完整的白名单含 MIT、Apache-2.0、BSD-2/3-Clause、ISC、Zlib、Unlicense、CC0-1.0、CDLA-Permissive-2.0、Unicode-3.0、Unicode-DFS-2016、bzip2-1.0.6、BSL-1.0、OpenSSL、NCSA 等并有少量例外条目如cbindgen、option-ext、colored、r-efi、dyn-eq、symphonia*等允许 MPL-2.0 或 LGPL-2.1-or-later。5.2 逐项解析非 MIT/Apache-2.0 许可证为何存在下表汇总ATTRIBUTIONS.md记录的每项非 MIT/Apache-2.0 许可证及其来源链路许可证携带 crate进入路径BSD-3-Clausetiny-skia渲染路径BSD-2-Clausearrayref渲染路径Apache-2.0 WITH LLVM-exceptiontarget-lexicon→pyo3-build-config→pyo3传递依赖Python 绑定NCSAlibfuzzer-sys→rav1e→ravif→image 0.25.10传递依赖图像编码CDLA-Permissive-2.0Mozilla CA 根证书数据webpki-roots→ureq传递依赖网络OpenSSL Licenseaws-lc-rs/fips→aws-lc-fips-sys仅在可选fipsfeature 下生效Unicode-3.0、Zlib、ISC、CC0-1.0、BSL-1.0其他传递依赖详见deny.toml其中值得注意的合规细节tiny-skiaBSD-3-Clause与arrayrefBSD-2-Clause都出现在渲染路径上与 xberg 的页面光栅渲染能力对应OpenSSL License 是条件性的只在启用fips这一可选项时才进入依赖图aws-lc-fips-sys默认构建不含deny.toml对依赖图中的MPL-2.0 及任何 GPL/AGPL/SSPL 许可证记录了明确的拒绝决定MPL-2.0 仅通过exceptions针对具体 crate 放行GPL 系则完全不在允许列表内。5.3 未穷举的 MIT/Apache-2.0 依赖该 crate 约有 100 个传递性的 MIT/Apache-2.0 依赖ATTRIBUTIONS.md明确不在此逐一列举而是再次指向cargo deny check licenses作为全量许可证清单的真相来源。对审计者而言这意味着人工维护的归属文档只需覆盖「非默认许可」的例外项常规许可交由自动化工具持续校验——这正是大型 Rust 仓库普遍采用的分层合规策略。六、测试夹具字体与发布边界除编译期内嵌字体外tests/fixtures/fonts/还存放两套仅测试使用的字体DejaVuSansMono.ttfStandardSymbolsPS.otf二者由tests/fixtures/fonts/LICENSE覆盖与src/fonts/assets/LICENSE-DejaVu相同Bitstream Vera / DejaVu Fonts 许可证。它们是 test-only 夹具不会打进编译后的二进制。发布边界由 crates/xberg-native-pdf/Cargo.toml 的include列表控制.crate包只包含src/**、Cargo.toml、LICENSE、README.md、ATTRIBUTIONS.md、CHANGELOG.md以及 6 个被 doctest 与打包单元测试实际读取的夹具含tests/fixtures/fonts/StandardSymbolsPS.otf。注释给出了明确理由tests/目录约 10 MB被 PDF 与 TTF 主导且压缩率差若整体打包会把.crate推过 crates.io 的 10 MiB 上限。七、合规审计清单可直接复用的实践要点从ATTRIBUTIONS.md及其配套文件可以提炼出五条可复用的开源合规实践分叉必须保留双重记录根LICENSE同时保留上游版权声明与本 fork 贡献者声明CHANGELOG.md不冒充上游历史vendored 代码单独建档为每个 vendored 依赖保存其原始 MIT 许可全文如 crates/xberg-native-pdf/src/vendor/fontdb/LICENSE并在模块文档中记录改造理由与具体改动解析器替换、日志后端替换、移除 unsafe字体等二进制资产逐套授权按文件粒度登记许可证与上游来源标注「本文件未独立核验上游版权」以划清证据边界许可证白名单自动化以cargo deny check licenses作为持续校验手段例外项收敛到deny.toml的exceptions并注释理由功能开关与体积控制联动体积敏感的字体CJK 回退字体通过 Cargo feature 默认关闭、按需开启避免 WASM/CDN 场景的二进制膨胀。八、延伸阅读仓库根 ATTRIBUTIONS.mdxberg 全仓库的归属总览crates/xberg-native-pdf/LICENSE上游版权 fork 贡献的双声明deny.toml依赖许可证白名单与例外项权威配置crates/xberg-native-pdf/src/vendor/mod.rsvendored 代码的改造原则说明crates/xberg-native-pdf/src/fonts/form_fallback.rs 与 crates/xberg-native-pdf/src/fonts/bundled.rs内嵌字体的两类用途表单扁平化回退与渲染路径 Unicode 回退crates/xberg-native-pdf/Cargo.toml许可证声明、feature 开关与发布include边界。赞分享后端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点击查看免费下载相关推荐Lance Java SDK 第三方依赖清单解析从许可证合规到依赖用途全景Lance Java SDK 第三方依赖清单解析从许可证合规到依赖用途全景 Lance 是一个面向多模态 AI 的开源 Lakehouse 数据格式其 Ja数据库向量数据库数据湖全文检索HandBrake 开源依赖生态与许可证合规全解析从 THANKS 清单到 contrib 构建体系HandBrake 开源依赖生态与许可证合规全解析从 THANKS 清单到 contrib 构建体系 HandBrake 是一个面向 Linux、macOS音视频视频处理桌面应用Blender 第三方许可证全景解读从依赖合规清单到 make license 自动化生成机制Blender 第三方许可证全景解读从依赖合规清单到 make license 自动化生成机制 本文以 release/license/license.md图形学3D渲染桌面应用音视频上一篇如何快速掌握NHSE存档编辑器动物森友会游戏修改器完整指南下一篇原神帧率解锁终极指南3步轻松突破60FPS限制的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考