TemplatePart¶
featherdoc::TemplatePart 是正文、页眉和页脚部件的统一编辑入口。
它把同一组模板操作应用到不同的 .docx 包部件上,适合处理书签填充、
内容控件替换,以及部件级模板校验。
常用任务入口¶
可以把本页当作部件级参考手册使用:
填充命名书签:调用
list_bookmarks()、find_bookmark(...)、replace_bookmark_text(...)或fill_bookmarks(...)。填充内容控件:使用
find_content_controls_by_tag(...)和replace_content_control_text_by_tag(...)。用生成内容替换模板槽位:使用书签或内容控件的段落、表格、表格行和图片替换方法。
用同一套 API 编辑页眉/页脚:先从
Document获取TemplatePart, 再调用paragraphs()、tables()、append_paragraph(...)或append_table(...)。校验局部模板表面:写入前调用
validate_template(...)。
成功/失败语义¶
返回形态 |
成功含义 |
失败或无变化含义 |
|---|---|---|
|
|
|
|
非零值表示匹配并修改或追加的槽位数量。 |
|
|
|
|
|
查看 |
在认为模板完整前,应检查 |
|
结果为真表示必需槽位通过校验。 |
缺失或类型不匹配的槽位会记录在结果详情中。 |
短示例¶
auto body = doc.body_template();
if (!body) return 1;
body.replace_bookmark_text("invoice_no", "INV-2026-001");
body.replace_content_control_text_by_tag("status", "approved");
类型化签名导读¶
TemplatePart 用于部件级编辑。只有 operator bool() 返回 true 时,
它才指向可用的包内 XML 部件。返回 std::size_t 的方法表示匹配并修改了
多少个书签或内容控件;返回 bool 的方法表示请求的 XML 修改是否成功应用。
签名 |
参数 |
返回语义 |
|---|---|---|
|
无。 |
指向可用包内 XML 部件时为 |
|
无。 |
包内条目名,例如 |
|
|
返回当前部件中新建的段落句柄。 |
|
|
返回当前部件中新建的表格句柄。 |
|
|
返回匹配、替换和缺失书签统计。 |
|
|
返回被替换的书签实例数量。 |
|
|
返回被替换的匹配控件数量。 |
|
|
返回被替换为表格的匹配控件数量。 |
|
|
返回缺失和类型不匹配槽位的校验结果。 |
|
|
返回创建的超链接数量; |
部件基础¶
每个 TemplatePart 都对应文档包中的一个 XML 部件。正文通常来自
Document::body_template(),页眉和页脚则来自对应的 header/footer 入口。
方法 |
返回值 |
用途 |
|---|---|---|
|
|
返回当前部件在 |
|
|
遍历当前部件中的段落。 |
|
|
在当前部件末尾追加段落。 |
|
|
遍历当前部件中的表格。 |
|
|
在当前部件末尾追加表格。 |
书签¶
书签 API 适合处理合同、报价单、通知书等模板中的命名占位区域。可以只替换 文本,也可以把书签位置替换成段落、表格或图片。
方法 |
返回值 |
用途 |
|---|---|---|
|
|
枚举当前部件中的书签。 |
|
|
按书签名查找单个书签。 |
|
|
替换匹配书签内部的文本。 |
|
|
一次填充多个书签,并返回填充结果。 |
|
|
用段落内容替换指定书签。 |
|
|
用表格替换指定书签。 |
|
|
用图片替换指定书签。 |
|
|
显示或隐藏带书签的块级内容。 |
内容控件¶
内容控件对应 Word 中的结构化文档标记。实际模板中通常使用 tag 作为稳定标识, 因此按 tag 替换文本、表格、图片或表单状态是最常见的工作流。
方法 |
返回值 |
用途 |
|---|---|---|
|
|
枚举当前部件中的内容控件。 |
|
|
按 tag 查找内容控件。 |
|
|
按 alias 查找内容控件。 |
|
|
按 tag 替换内容控件中的纯文本。 |
|
|
按 tag 用段落替换内容控件。 |
|
|
按 tag 用表格替换内容控件。 |
|
|
按 tag 用图片替换内容控件。 |
|
|
设置复选框、日期、下拉框、组合框、锁定或数据绑定状态。 |
模板校验¶
模板校验 API 用于把当前部件的必需槽位显式化,并检查必需书签和内容控件。
方法 |
返回值 |
用途 |
|---|---|---|
|
|
按必需槽位校验书签和内容控件。 |
文档级 Schema 工作流¶
validate_template_schema(...)、scan_template_schema(...)、
build_template_schema_patch_from_scan(...) 和 onboard_template(...)
是 featherdoc::Document API,因为它们会聚合正文、页眉、页脚和分节目标槽位。
TemplatePart 负责部件级填充和 validate_template(...) 校验;
整篇文档的 schema 治理应从 Document 入口执行。
示例¶
featherdoc::Document doc{"template.docx"};
if (doc.open()) {
return 1;
}
auto body = doc.body_template();
body.fill_bookmarks({
{"invoice_no", "INV-2026-001"},
{"customer_name", "Ada Lovelace"},
});
body.replace_content_control_text_by_tag("status", "approved");
auto validation = body.validate_template({
{"invoice_no", featherdoc::template_slot_kind::text, true},
{"status", featherdoc::template_slot_kind::text, false},
});
auto onboarding = doc.onboard_template();
return (!validation || doc.save_as("filled.docx")) ? 1 : 0;