用途:本技能聚焦 pdfium-render 的字体生命周期,即在文档的 PdfFonts 集合中注册、嵌入、检查和提取字体。任何文本对象使用字体前,字体必须先加入文档的 PdfFonts 集合;创建使用字体的文本对象属于 pdfium-impl-page-objects-edit,读取页面文本属于 pdfium-syntax-text。API 名称依据 docs.rs/pdfium-render 0.9.1,默认面向 0.9.x,0.8.x 差异会标注。
主要能力:通过 PdfDocument::fonts()/fonts_mut() 获取字体集合;用 PdfFonts::helvetica() 等或 new_built_in(PdfFontBuiltin) 使用 14 种内置字体(TimesRoman、TimesBold、TimesItalic、TimesBoldItalic、Helvetica、HelveticaBold、HelveticaOblique、HelveticaBoldOblique、Courier、CourierBold、CourierOblique、CourierBoldOblique、Symbol、ZapfDingbats);用 load_true_type_from_bytes/file/reader 与 load_type1_from_* 嵌入自定义字体;用 get(token) 查回字体并检查 name、family、weight、is_embedded 等;用 data() 读取原始字体程序;用 glyphs() 遍历字形。
使用方式:构造函数返回 PdfFontToken(Copy、Eq、Hash,非 Send/Sync),而非 PdfFont。流程为 fonts_mut() 加载或内置构造得到 token,把 token 传给 PdfPageTextObject::new(),再用 fonts().get(token) 检查。每个文档应只注册一次字体并复用 token,重复加载会重复嵌入字体程序、增大文件。嵌入 CJK 或大 Unicode 字体时 is_cid_font 传 true,简单单字节拉丁字体传 false;标志与实际编码不匹配会导致乱码、方框或复制文本错误。
限制:内置字体仅覆盖拉丁字符,无法渲染 emoji、CJK 等;非嵌入字体调用 data() 不会得到字体文件。0.9.0 已移除 PdfFont::new_* 直接构造函数,必须通过 fonts_mut() 注册。_from_fetch/_from_blob 异步加载器仅用于 WASM。具体签名与示例见其 references 文件。