Creating a form in PDF not only ensures a professional appearance but also allows users to fill out and submit data electronically, streamlining data entry processes. Whether you are collecting survey responses, gathering client information, or creating employment applications, the ability to generate interactive PDF forms offers a seamless and organized way to capture, store, and manage valuable data. In this article, you will learn how to create a fillable PDF form as well as how to fill in a PDF form using Spire.PDF for Python.
Install Spire.PDF for Python
This scenario requires Spire.PDF for Python and plum-dispatch v1.7.4. They can be easily installed in your Windows through the following pip command.
pip install Spire.PDF
If you are unsure how to install, please refer to this tutorial: How to Install Spire.PDF for Python on Windows
Create a Fillable Form in PDF in Python
Spire.PDF for Python provides a range of helpful classes that enable programmers to generate and modify different types of form fields in PDF files. These include text boxes, check boxes, combo boxes, list boxes, and radio buttons. The table below lists some of the classes involved in this tutorial.
Class | Description |
PdfForm | Represents interactive form of the PDF document. |
PdfField | Represents field of the PDF document's interactive form. |
PdfTextBoxField | Represents text box field in the PDF form. |
PdfCheckBoxField | Represents check box field in the PDF form. |
PdfComboBoxField | Represents combo box field in the PDF Form. |
PdfListBoxField | Represents list box field of the PDF form. |
PdfListFieldItem | Represents an item of a list field. |
PdfRadioButtonListField | Represents radio button field in the PDF form. |
PdfRadioButtonListItem | Represents an item of a radio button list. |
PdfButtonField | Represents button field in the PDF form. |
To generate a PDF form, start by creating an instance of the respective field class. Set the field's size and position in the document using the Bounds property, and finally, add it to the PDF using the PdfFormFieldCollection.Add() method. The following are the main steps to create various types of form fields in a PDF document using Spire.PDF for Python.
- Create a PdfDocument object.
- Add a page using PdfDocuemnt.Pages.Add() method.
- Create a PdfTextBoxField object, set the properties of the field including Bounds, Font and Text, and then add it to the document using PdfFormFieldCollection.Add() method.
- Repeat the step 3 to add check box, combo box, list box, radio button, and button to the document.
- Save the document to a PDF file using PdfDocument.SaveToFile() method.
- Python
from spire.pdf.common import * from spire.pdf import * # Create a PdfDocument object doc = PdfDocument() # Add a page page = doc.Pages.Add() # Initialize x and y coordinates baseX = 100.0 baseY = 30.0 # Create two brush objects brush1 = PdfSolidBrush(PdfRGBColor(Color.get_Blue())) brush2 = PdfSolidBrush(PdfRGBColor(Color.get_Black())) # Create a font font = PdfFont(PdfFontFamily.TimesRoman, 12.0, PdfFontStyle.Regular) # Add a textbox page.Canvas.DrawString("Name:", font, brush1, PointF(10.0, baseY)) tbxBounds = RectangleF(baseX, baseY, 150.0, 15.0) textBox = PdfTextBoxField(page, "name") textBox.Bounds = tbxBounds textBox.Font = font doc.Form.Fields.Add(textBox) baseY += 30.0 # add two checkboxes page.Canvas.DrawString("Gender:", font, brush1, PointF(10.0, baseY)); checkboxBound1 = RectangleF(baseX, baseY, 15.0, 15.0) checkBoxField1 = PdfCheckBoxField(page, "male") checkBoxField1.Bounds = checkboxBound1 checkBoxField1.Checked = False page.Canvas.DrawString("Male", font, brush2, PointF(baseX + 20.0, baseY)) checkboxBound2 = RectangleF(baseX + 70.0, baseY, 15.0, 15.0) checkBoxField2 = PdfCheckBoxField(page, "female") checkBoxField2.Bounds = checkboxBound2 checkBoxField2.Checked = False page.Canvas.DrawString("Female", font, brush2, PointF(baseX + 90.0, baseY)) doc.Form.Fields.Add(checkBoxField1) doc.Form.Fields.Add(checkBoxField2) baseY += 30.0 # Add a listbox page.Canvas.DrawString("Country:", font, brush1, PointF(10.0, baseY)) listboxBound = RectangleF(baseX, baseY, 150.0, 50.0) listBoxField = PdfListBoxField(page, "country") listBoxField.Items.Add(PdfListFieldItem("USA", "usa")) listBoxField.Items.Add(PdfListFieldItem("Canada", "canada")) listBoxField.Items.Add(PdfListFieldItem("Mexico", "mexico")) listBoxField.Bounds = listboxBound listBoxField.Font = font doc.Form.Fields.Add(listBoxField) baseY += 60.0 # Add two radio buttons page.Canvas.DrawString("Hobbies:", font, brush1, PointF(10.0, baseY)) radioButtonListField = PdfRadioButtonListField(page, "hobbies") radioItem1 = PdfRadioButtonListItem("travel") radioBound1 = RectangleF(baseX, baseY, 15.0, 15.0) radioItem1.Bounds = radioBound1 page.Canvas.DrawString("Travel", font, brush2, PointF(baseX + 20.0, baseY)) radioItem2 = PdfRadioButtonListItem("movie") radioBound2 = RectangleF(baseX + 70.0, baseY, 15.0, 15.0) radioItem2.Bounds = radioBound2 page.Canvas.DrawString("Movie", font, brush2, PointF(baseX + 90.0, baseY)) radioButtonListField.Items.Add(radioItem1) radioButtonListField.Items.Add(radioItem2) doc.Form.Fields.Add(radioButtonListField) baseY += 30.0 # Add a combobox page.Canvas.DrawString("Degree:", font, brush1, PointF(10.0, baseY)) cmbBounds = RectangleF(baseX, baseY, 150.0, 15.0) comboBoxField = PdfComboBoxField(page, "degree") comboBoxField.Bounds = cmbBounds comboBoxField.Items.Add(PdfListFieldItem("Bachelor", "bachelor")) comboBoxField.Items.Add(PdfListFieldItem("Master", "master")) comboBoxField.Items.Add(PdfListFieldItem("Doctor", "doctor")) comboBoxField.Font = font doc.Form.Fields.Add(comboBoxField) baseY += 30.0 # Add a button page.Canvas.DrawString("Button:", font, brush1, PointF(10.0, baseY)) btnBounds = RectangleF(baseX, baseY, 50.0, 15.0) buttonField = PdfButtonField(page, "button") buttonField.Bounds = btnBounds buttonField.Text = "Submit" buttonField.Font = font submitAction = PdfSubmitAction("https://www.e-iceblue.com/getformvalues.php") buttonField.Actions.MouseDown = submitAction doc.Form.Fields.Add(buttonField) # Save to file doc.SaveToFile("output/Form.pdf", FileFormat.PDF)
Fill in a PDF Form in Python
In order to fill in a form, the necessary steps include obtaining all form fields from the PDF document, locating a specific field based on its type and name, and subsequently entering or selecting a value from a predetermined list. The following are the detailed steps.
- Create a PdfDocument object.
- Load a sample PDF document using PdfDocument.LoadFromFile() method.
- Get the form from the document through PdfDocument.Form property.
- Get the form widget collection through PdfFormWidget.FieldsWidget property.
- Get a specific form field by its type and name.
- Enter a value or select a value from the predefined list for the field.
- Save the document to a PDF file using PdfDocument.SaveToFile() method.
- Python
from spire.pdf.common import * from spire.pdf import * # Create a PdfDocument object doc = PdfDocument() # Load a PDF document contaning form fields doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Form.pdf") # Get form from the document form = doc.Form formWidget = PdfFormWidget(form) # Get form widget collection formWidgetCollection = formWidget.FieldsWidget # If the collection is nut null if formWidgetCollection.Count > 0: # Loop through the elements in the form widget collection for i in range(formWidgetCollection.Count): # Get a specific field field = formWidgetCollection.get_Item(i) # Determine if a field is a textbox if isinstance(field, PdfTextBoxFieldWidget): textBoxField = field if isinstance(field, PdfTextBoxFieldWidget) else None # Determine if the name of the text box is "name" if textBoxField.Name == "name": # Add text to the text box textBoxField.Text = "Jackson Green" # Choose an item from the list box if isinstance(field, PdfListBoxWidgetFieldWidget): listBoxField = field if isinstance(field, PdfListBoxWidgetFieldWidget) else None if listBoxField.Name == "country": index = [1] listBoxField.SelectedIndex = index # Choose an item from the combo box if isinstance(field, PdfComboBoxWidgetFieldWidget): comBoxField = field if isinstance(field, PdfComboBoxWidgetFieldWidget) else None if comBoxField.Name == "degree": items = [0] comBoxField.SelectedIndex = items # Select an item in the radio buttons if isinstance(field, PdfRadioButtonListFieldWidget): radioBtnField = field if isinstance(field, PdfRadioButtonListFieldWidget) else None if radioBtnField.Name == "hobbies": radioBtnField.SelectedIndex = 1 # Check the specified check box if isinstance(field, PdfCheckBoxWidgetFieldWidget): checkBoxField = field if isinstance(field, PdfCheckBoxWidgetFieldWidget) else None if checkBoxField.Name == "male": checkBoxField.Checked = True # Save the document doc.SaveToFile("output/FillForm.pdf") doc.Close()
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.