word 允许用户创建可供其他人录入信息的表单。表单可以从多个对象收集数据或反馈,并且能够保持收集到的内容格式一致。以下是在 word 文档中创建可填充表单可能需要用到的工具:
- 内容控件:供用户录入信息的表单区域。
- 表格:用于对齐表单中的文本和表单域,形成表单的边框和单元格等元素。
- 保护工具:允许用户填充表单域,但不能改变文档的其他内容。
word 中的内容控件是内容容器,用户可以使用它们来创建结构化文档。结构化文档控制内容在文档中出现的位置。word 2013 中有10种常见的内容控件,本文主要介绍如何使用 创建以下7种内容控件组成的可填充表单:
内容控件 | 描述 |
纯文本内容控件 | 允许用户输入无格式的文本。 |
格式文本内容控件 | 允许用户录入带格式的文本,以及表格、图片、内容控件等其他内容。 |
图片内容控件 | 允许用户录入单张图片。 |
下拉列表内容控件 | 允许用户从预定义的列表中选择项目。 |
组合框内容控件 | 允许用户从预定义的列表中选择项目或自己输入信息。 |
复选框内容控件 | 允许用户进行勾选。 |
日期选取器内容控件 | 允许用户从日历中选取日期。 |
安装 spire.doc for c
有两种方法可以将 spire.doc for c 集成到您的应用程序中。一种方法是通过 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 nuget 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
在 word 文档中创建可填充表单域
spire.doc for c 提供的 structuredocumenttaginline 类用于在段落中为 drawingml、域等内联级结构创建结构化文档标签。此类下的 sdtproperties 和 sdtcontent 属性可以设置对应结构化文档标签的属性和内容。以下是在 word 文档中创建可填充表单的详细操作步骤:
- 创建 document 的对象。
- 使用 document->addsection() 方法添加一个节。
- 使用 section->addtable() 方法添加一个表格。
- 使用 tablecell->addparagraph() 方法在单元格中添加段落。
- 创建 structuredocumenttaginline 的对象,并使用 paragraph->getchildobjects()->add() 方法将其作为子对象添加到段落中。
- 使用 structuredocumenttaginline 对象的 sdtproperties 和 sdtcontent 属性设置结构化文档标签的属性和内容。结构化文档标签的类型可通过 sdtproperties->setsdttype() 方法设置。
- 使用 document->protect() 方法设置不允许用户编辑表单域外的内容。
- 使用 document->savetofile() 方法保存文档。
- c
#include "spire.doc.o.h";
using namespace spire::doc;
using namespace std;
int main() {
//创建document的对象
document* doc = new document();
//添加一个节
section* section = doc->addsection();
//添加一个表格
table* table = section->addtable(true);
table->resetcells(7, 2);
//添加文本到第一列的单元格
paragraph* paragraph = table->getrows()->getitem(0)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"纯文本内容控件");
paragraph = table->getrows()->getitem(1)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"格式文本内容控件");
paragraph = table->getrows()->getitem(2)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"图片内容控件");
paragraph = table->getrows()->getitem(3)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"下拉列表内容控件");
paragraph = table->getrows()->getitem(4)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"复选框内容控件");
paragraph = table->getrows()->getitem(5)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"组合框内容控件");
paragraph = table->getrows()->getitem(6)->getcells()->getitem(0)->addparagraph();
paragraph->appendtext(l"日期选取器内容控件");
//添加纯文本内容控件到单元格(0,1)
paragraph = table->getrows()->getitem(0)->getcells()->getitem(1)->addparagraph();
structuredocumenttaginline* sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::text);
sdt->getsdtproperties()->setalias(l"纯文本");
sdt->getsdtproperties()->settag(l"纯文本");
sdt->getsdtproperties()->setisshowingplaceholder(true);
sdttext* text = new sdttext(true);
text->setismultiline(false);
sdt->getsdtproperties()->setcontrolproperties(text);
textrange* tr = new textrange(doc);
tr->settext(l"单击或点击此处输入文字。");
sdt->getsdtcontent()->getchildobjects()->add(tr);
//添加格式文本内容控件到单元格(1,1)
paragraph = table->getrows()->getitem(1)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::richtext);
sdt->getsdtproperties()->setalias(l"格式文本");
sdt->getsdtproperties()->settag(l"格式文本");
sdt->getsdtproperties()->setisshowingplaceholder(true);
text = new sdttext(true);
text->setismultiline(false);
sdt->getsdtproperties()->setcontrolproperties(text);
tr = new textrange(doc);
tr->settext(l"单击或点击此处输入文字。");
sdt->getsdtcontent()->getchildobjects()->add(tr);
//添加图片内容控件到单元格(2,1)
paragraph = table->getrows()->getitem(2)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::picture);
sdt->getsdtproperties()->setalias(l"图片");
sdt->getsdtproperties()->settag(l"图片");
sdtpicture* sdtpicture = new sdtpicture();
sdt->getsdtproperties()->setcontrolproperties(sdtpicture);
docpicture* pic = new docpicture(doc);
pic->loadimagespire(l"c:/workspace.png");
sdt->getsdtcontent()->getchildobjects()->add(pic);
//添加下拉列表内容控件到单元格(3,1)
paragraph = table->getrows()->getitem(3)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
sdt->getsdtproperties()->setsdttype(sdttype::dropdownlist);
sdt->getsdtproperties()->setalias(l"下拉列表");
sdt->getsdtproperties()->settag(l"下拉列表");
paragraph->getchildobjects()->add(sdt);
sdtdropdownlist* sddl = new sdtdropdownlist();
sddl->getlistitems()->add(new sdtlistitem(l"选择一项。", l"1"));
sddl->getlistitems()->add(new sdtlistitem(l"项目 2", l"2"));
sddl->getlistitems()->add(new sdtlistitem(l"项目 3", l"3"));
sddl->getlistitems()->add(new sdtlistitem(l"项目 4", l"4"));
sdt->getsdtproperties()->setcontrolproperties(sddl);
tr = new textrange(doc);
tr->settext(sddl->getlistitems()->getitem(0)->getdisplaytext());
sdt->getsdtcontent()->getchildobjects()->add(tr);
//添加两个复选框内容控件到单元格(4,1)
paragraph = table->getrows()->getitem(4)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::checkbox);
sdtcheckbox* scb = new sdtcheckbox();
sdt->getsdtproperties()->setcontrolproperties(scb);
tr = new textrange(doc);
sdt->getchildobjects()->add(tr);
scb->setchecked(false);
paragraph->appendtext(l" 选项 1");
paragraph = table->getrows()->getitem(4)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::checkbox);
scb = new sdtcheckbox();
sdt->getsdtproperties()->setcontrolproperties(scb);
tr = new textrange(doc);
sdt->getchildobjects()->add(tr);
scb->setchecked(false);
paragraph->appendtext(l" 选项 2");
//添加组合框内容控件到单元格(5,1)
paragraph = table->getrows()->getitem(5)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::combobox);
sdt->getsdtproperties()->setalias(l"组合框");
sdt->getsdtproperties()->settag(l"组合框");
sdtcombobox* cb = new sdtcombobox();
cb->getlistitems()->add(new sdtlistitem(l"选择一项。"));
cb->getlistitems()->add(new sdtlistitem(l"项目 2"));
cb->getlistitems()->add(new sdtlistitem(l"项目 3"));
sdt->getsdtproperties()->setcontrolproperties(cb);
tr = new textrange(doc);
tr->settext(cb->getlistitems()->getitem(0)->getdisplaytext());
sdt->getsdtcontent()->getchildobjects()->add(tr);
//添加日期选取器内容控件到单元格(6,1)
paragraph = table->getrows()->getitem(6)->getcells()->getitem(1)->addparagraph();
sdt = new structuredocumenttaginline(doc);
paragraph->getchildobjects()->add(sdt);
sdt->getsdtproperties()->setsdttype(sdttype::datepicker);
sdt->getsdtproperties()->setalias(l"日期选取器");
sdt->getsdtproperties()->settag(l"日期选取器");
sdtdate* date = new sdtdate();
date->setcalendartype(calendartype::default);
date->setdateformatspire(l"yyyy.mm.dd");
date->setfulldate(datetime::getnow());
sdt->getsdtproperties()->setcontrolproperties(date);
tr = new textrange(doc);
tr->settext(l"单击或点击此处输入日期。");
sdt->getsdtcontent()->getchildobjects()->add(tr);
//设置仅允许用户编辑表单域
doc->protect(protectiontype::allowonlyformfields, l"password");
//保存文档
doc->savetofile(l"output/表单.docx", fileformat::docx2013);
doc->close();
delete doc;
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。