Creating a fillable form in Word allows you to design a document that can be easily completed and customized by others. Whether you need to collect information, gather feedback, or create an interactive document, fillable forms provide a convenient way to capture data electronically. By adding various elements such as text fields, checkboxes, dropdown menus, and more, you can tailor the form to your specific requirements.
To create a fillable form in Word, you probably need to use the following tools.
- Content Controls: The areas where users input information in a form.
- Tables: Tables are used in forms to align text and form fields, and to create borders and boxes.
- Protection: Allows users to populate fields but not to make changes to the rest of the document.
In Word, content controls serve as containers for structured documents, allowing users to organize content within a document. Word 2013 provides ten types of content controls. This article introduces how to create a fillable form in Word that includes the following seven commonly-used content controls using Spire.Doc for Python.
Content Control | Description |
Plain Text | A text field limited to plain text, so no formatting can be included. |
Rich Text | A text field that can contain formatted text or other items, such as tables, pictures, or other content controls. |
Picture | Accepts a single picture. |
Drop-Down List | A drop-down list displays a predefined list of items for the user to choose from. |
Combo Box | A combo box enables users to select a predefined value in a list or type their own value in the text box of the control. |
Check Box | A check box provides a graphical widget that allows the user to make a binary choice: yes (checked) or no (not checked). |
Date Picker | Contains a calendar control from which the user can select a date. |
Install Spire.Doc for Python
This scenario requires Spire.Doc for Python and plum-dispatch v1.7.4. They can be easily installed in your Windows through the following pip command.
pip install Spire.Doc
If you are unsure how to install, please refer to this tutorial: How to Install Spire.Doc for Python on Windows
Create a Fillable Form in Word in Python
Spire.Doc for Python offers the StructureDocumentTagInline class, which is utilized to generate structured document tags within a paragraph. By utilizing the SDTProperties property and SDTContent property of this class, one can define the properties and content of the current structured document tag. Below are the step-by-step instructions for creating a fill form in a Word document in Python.
- Create a Document object.
- Add a section using Document.AddSection() method.
- Add a table using Section.AddTable() method.
- Add a paragraph to a specific table cell using TableCell.AddParagraph() method.
- Create an instance of StructureDocumentTagInline class, and add it to the paragraph as a child object using Paragraph.ChildObjects.Add() method.
- Specify the type, content and other attributes of the structured document tag through the SDTProperties property and the SDTContent property of the StructureDocumentTagInline object.
- Prevent users from editing content outside form fields using Document.Protect() method.
- Save the document using Document.SaveToFile() method.
- Python
from spire.doc import * from spire.doc.common import * # Create a Document object doc = Document() # Add a section section = doc.AddSection() # Add a table table = section.AddTable(True) table.ResetCells(7, 2) table.SetColumnWidth(0, 120, CellWidthType.Point) table.SetColumnWidth(1, 350, CellWidthType.Point) # Add text to the cells of the first column paragraph = table.Rows[0].Cells[0].AddParagraph() paragraph.AppendText("Name") paragraph = table.Rows[1].Cells[0].AddParagraph() paragraph.AppendText("Profile") paragraph = table.Rows[2].Cells[0].AddParagraph() paragraph.AppendText("Photo") paragraph = table.Rows[3].Cells[0].AddParagraph() paragraph.AppendText("Country") paragraph = table.Rows[4].Cells[0].AddParagraph() paragraph.AppendText("Hobbies") paragraph = table.Rows[5].Cells[0].AddParagraph() paragraph.AppendText("Birthday") paragraph = table.Rows[6].Cells[0].AddParagraph() paragraph.AppendText("Sex") # Add a plain text content control to the cell (0,1) paragraph = table.Rows[0].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.Text sdt.SDTProperties.Alias = "Plain Text" sdt.SDTProperties.Tag = "Plain Text" sdt.SDTProperties.IsShowingPlaceHolder = True text = SdtText(True) text.IsMultiline = False sdt.SDTProperties.ControlProperties = text textRange = TextRange(doc) textRange.Text = "your name here" sdt.SDTContent.ChildObjects.Add(textRange) # Add a rich text content control to the cell (1,1) paragraph = table.Rows[1].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.RichText sdt.SDTProperties.Alias = "Rich Text" sdt.SDTProperties.Tag = "Rich Text" sdt.SDTProperties.IsShowingPlaceHolder = True text = SdtText(True) text.IsMultiline = False sdt.SDTProperties.ControlProperties = text textRange = TextRange(doc) textRange.Text = "brief introduction of yourself" sdt.SDTContent.ChildObjects.Add(textRange ) # Add a picture content control to the cell (2,1) paragraph = table.Rows[2].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.Picture sdt.SDTProperties.Alias = "Picture" sdt.SDTProperties.Tag = "Picture" sdtPicture = SdtPicture(True) sdt.SDTProperties.ControlProperties = sdtPicture pic = DocPicture(doc) pic.LoadImage("C:\\Users\\Administrator\\Desktop\\placeHolder.png") sdt.SDTContent.ChildObjects.Add(pic) # Add a dropdown list content control to the cell (3,1) paragraph = table.Rows[3].Cells[1].AddParagraph(); sdt = StructureDocumentTagInline(doc) sdt.SDTProperties.SDTType = SdtType.DropDownList sdt.SDTProperties.Alias = "Dropdown List" sdt.SDTProperties.Tag = "Dropdown List" paragraph.ChildObjects.Add(sdt) stdList = SdtDropDownList() stdList.ListItems.Add(SdtListItem("USA", "1")) stdList.ListItems.Add(SdtListItem("China", "2")) stdList.ListItems.Add(SdtListItem("Briza", "3")) stdList.ListItems.Add(SdtListItem("Austrilia", "4")) sdt.SDTProperties.ControlProperties = stdList; textRange = TextRange(doc) textRange .Text = stdList.ListItems[0].DisplayText sdt.SDTContent.ChildObjects.Add(textRange ) # Add two check box content controls to the cell (4,1) paragraph = table.Rows[4].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.CheckBox sdtCheckBox = SdtCheckBox() sdt.SDTProperties.ControlProperties = sdtCheckBox textRange = TextRange(doc) sdt.ChildObjects.Add(textRange) sdtCheckBox.Checked = False paragraph.AppendText(" Movie") paragraph = table.Rows[4].Cells[1].AddParagraph(); sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.CheckBox sdtCheckBox = SdtCheckBox() sdt.SDTProperties.ControlProperties = sdtCheckBox textRange = TextRange(doc) sdt.ChildObjects.Add(textRange) sdtCheckBox.Checked = False paragraph.AppendText(" Game") # Add a date picker content control to the cell (5,1) paragraph = table.Rows[5].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.DatePicker sdt.SDTProperties.Alias = "Date Picker" sdt.SDTProperties.Tag = "Date Picker" stdDate = SdtDate() stdDate.CalendarType = CalendarType.Default stdDate.DateFormat = "yyyy.MM.dd" stdDate.FullDate = DateTime.get_Now() sdt.SDTProperties.ControlProperties = stdDate textRange = TextRange(doc) textRange.Text = "your birth date" sdt.SDTContent.ChildObjects.Add(textRange) # Add a combo box content control to the cell (6,1) paragraph = table.Rows[6].Cells[1].AddParagraph() sdt = StructureDocumentTagInline(doc) paragraph.ChildObjects.Add(sdt) sdt.SDTProperties.SDTType = SdtType.ComboBox sdt.SDTProperties.Alias = "Combo Box" sdt.SDTProperties.Tag = "Combo Box" stdComboBox = SdtComboBox() stdComboBox.ListItems.Add(SdtListItem("Male")) stdComboBox.ListItems.Add(SdtListItem("Female")) sdt.SDTProperties.ControlProperties = stdComboBox textRange = TextRange(doc) textRange.Text = stdComboBox.ListItems[0].DisplayText sdt.SDTContent.ChildObjects.Add(textRange) # Allow users to edit the form fields only doc.Protect(ProtectionType.AllowOnlyFormFields, "permission-psd") # Save to file doc.SaveToFile("output/Form.docx", FileFormat.Docx2013)
Apply for a Temporary License
If you'd like to remove the evaluation message from the generated documents, or to get rid of the function limitations, please request a 30-day trial license for yourself.