Form Design
Fillable PDF forms (AcroForm) are well suited to application form design, such as tax and other government forms. Form design APIs add form fields to PDF files or remove them from PDF documents. Designing a form from scratch lets developers create forms with the content and layout they need.
Add a Text Form Field to a PDF
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_pdfdoc.h"
#include "include/pdf/fs_pdfpage.h"
#include "include/pdf/interform/fs_pdfform.h"
using namespace foxit;
using namespace pdf;
using namespace interform;
...
// Assuming PDFDoc doc has been loaded.
// Assuming PDFPage page has been loaded and parsed.
// Add text field
Control control = form.AddControl(page, L"Text Field0", Field::e_TypeTextField, RectF(50, 600, 90, 640));
control.GetField().SetValue(L"3");
// Update text field's appearance.
control.GetWidget().ResetAppearanceStream();
Control control1 = form.AddControl(page, L"Text Field1", Field::e_TypeTextField, RectF(100, 600, 140, 640));
control1.GetField().SetValue(L"123");
// Update text field's appearance.
control1.GetWidget().ResetAppearanceStream();
...C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_pdfdoc_c.h"
#include "include/fs_pdfpage_c.h"
#include "include/fs_pdfform_c.h"
...
// Assuming FS_PDFDOC_HANDLE doc has been loaded.
// Assuming FS_PDFPAGE_HANDLE page has been loaded and parsed.
// Add text field
FS_CONTROL_HANDLE control;
FSRectF rect;
rect.left = 50;
rect.bottom = 600;
rect.right = 90;
rect.top = 640;
FSDK_Form_AddControl(form, page, L"Text Field0", e_FSTypeTextField, rect, &control);
FS_FIELD_HANDLE field;
FSDK_Control_GetField(control, &field);
FSDK_Field_SetValue(field, L"3");
// Update text field's appearance.
FS_WIDGETANNOT_HANDLE widget;
FSDK_Control_GetWidget(control, &widget);
FS_BOOL result;
FSDK_Annot_ResetAppearanceStream(widget, &result);
rect.left = 100;
rect.bottom = 600;
rect.right = 140;
rect.top = 640;
FS_CONTROL_HANDLE control1;
FSDK_Form_AddControl(form, page, L"Text Field1", e_FSTypeTextField, rect, &control1);
FS_FIELD_HANDLE field1;
FSDK_Control_GetField(control, &field1);
FSDK_Field_SetValue(field1, L"123");
// Update text field's appearance.
FS_WIDGETANNOT_HANDLE widget1;
FSDK_Control_GetWidget(control1, &widget1);
FS_BOOL result1;
FSDK_Annot_ResetAppearanceStream(widget1, &result1);
...java
import com.foxit.sdk.pdf.interform.Form;
import com.foxit.sdk.pdf.interform.Control;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.common.fxcrt.RectF;
...
// Assuming PDFDoc doc has been loaded.
...
Form form = new Form(doc);
Control control = form.addControl(page, "Text Field0", Field.e_TypeTextField, new RectF(50, 600, 90, 640));
control.getField().setValue("3");
// Update text field's appearance.
control.getWidget().resetAppearanceStream();
...py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
#replace with the python2 lib path
site.addsitedir('../../../')
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
# Assuming PDFDoc doc has been loaded.
# Assuming PDFPage page has been loaded and parsed.
# Add text field
control = form.AddControl(page, "Text Field0", Field.e_TypeTextField, RectF(50, 600, 90, 640))
control.GetField().SetValue("3")
# Update text field's appearance.
control.GetWidget().ResetAppearanceStream()
control1 = form.AddControl(page, "Text Field1", Field.e_TypeTextField, RectF(100, 600, 140, 640))
control1.GetField().SetValue("123")
# Update text field's appearance.
control1.GetWidget().ResetAppearanceStream()
...objc
#include "FSPDFObjC.h"
...
// Add test field
FSControl *control = [form addControl:page field_name:@"Text Field0" field_type:FSFieldTypeTextField rect:[[FSRectF alloc] initWithLeft1:50.0 bottom1:600 right1:90 top1:640]];
[control getField].value = @"3";
// Update text field's appearance.
[[control getWidget] resetAppearanceStream];
...js
const FSDK = require("@fuxinsoft/foxit-pdf-sdk-node");
...
// Assuming PDFDoc doc has been loaded.
// Add text field
control = form.AddControl(page, "Text Field0", FSDK.Field.e_TypeTextField, new FSDK.RectF(50, 600, 90, 640))
control.GetField().SetValue("3")
// Update text field's appearance.
control.GetWidget().ResetAppearanceStream()
control1 = form.AddControl(page, "Text Field1", FSDK.Field.e_TypeTextField, new FSDK.RectF(100, 600, 140, 640))
control1.GetField().SetValue("123")
// Update text field's appearance.
control1.GetWidget().ResetAppearanceStream()
...csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.interform;
using foxit.pdf.annots;
using foxit.pdf.actions;
...
// Assuming PDFDoc doc has been loaded.
Control control = form.AddControl(page, "Text Field0", Field.Type.e_TypeTextField, new RectF(50f, 600f, 90f, 640f))
...go
import (
. “foxit.com/fsdk”
)
...
# Assuming PDFDoc doc has been loaded.
# Assuming PDFPage page has been loaded and parsed.
# Add text field
control := form.AddControl(page, "Text Field0", FieldE_TypeTextField, NewRectF(float32(50), float32(600), float32(90), float(640)))
control.GetField().SetValue("3")
# Update text field's appearance.
control.GetWidget().ResetAppearanceStream()
control1 = form.AddControl(page, "Text Field1", FieldE_TypeTextField, NewRectF(float32(100), float32(600), float32(140), float32(640)))
control1.GetField().SetValue("123")
# Update text field's appearance.
control1.GetWidget().ResetAppearanceStream()
...Remove a Text Form Field from a PDF
c++
#include "include/common/fs_common.h"
#include "include/pdf/fs_pdfdoc.h"
#include "include/pdf/fs_pdfpage.h"
#include "include/pdf/interform/fs_pdfform.h"
using namespace foxit;
using namespace pdf;
using namespace interform;
...
// Assuming PDFDoc doc has been loaded.
Form form(doc);
const wchar_t* filter = L"text1";
int countFields = form.GetFieldCount(NULL);
for (int i = 0; i < countFields; i++)
{
Field field = form.GetField(i, filter);
if (field.GetType() == Field::e_TypeTextField) {
form.RemoveField(field);
}
}
...C
#include "include/fs_basictypes_c.h"
#include "include/fs_common_c.h"
#include "include/fs_pdfdoc_c.h"
#include "include/fs_pdfpage_c.h"
#include "include/fs_pdfform_c.h"
...
// Assuming FS_PDFDOC_HANDLE doc has been loaded.
FS_FORM_HANDLE form;
FSDK_Form_Create(doc, form);
const wchar_t* filter = L"text1";
int countFields;
FSDK_Form_GetFieldCount(form, NULL, &countFields);
for (int i = 0; i < countFields; i++)
{
FS_FIELD_HANDLE field;
FSDK_Form_GetField(form, i, filter, &field);
FSFieldType type;
FSDK_Field_GetType(field, &type);
if (type == e_FSTypeTextField) {
FSDK_Form_RemoveField(form, field);
}
}
...java
import com.foxit.sdk.pdf.interform.Form;
import com.foxit.sdk.pdf.interform.Control;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.common.fxcrt.RectF;
...
// Assuming PDFDoc doc has been loaded.
...
Form form = new Form(doc);
Control control = form.addControl(page, "Text Field0", Field.e_TypeTextField, new RectF(50, 600, 90, 640));
control.getField().setValue("3");
// Update text field's appearance.
control.getWidget().resetAppearanceStream();
...py
import sys
import site
if sys.version_info.major == 2:
_PYTHON2_ = True
else:
_PYTHON2_ = False
if _PYTHON2_:
#replace with the python2 lib path
site.addsitedir('../../../')
from FoxitPDFSDKPython2 import *
else:
from FoxitPDFSDKPython3 import *
...
# Assuming PDFDoc doc has been loaded.
form = Form(doc)
filter = "text1"
countFields = form.GetFieldCount("")
for i in range(0, countFields):
field = form.GetField(i, filter)
if field.GetType() == Field.e_TypeTextField:
form.RemoveField(field)
...objc
#include "FSPDFObjC.h"
...
// Assuming FSPDFDoc doc has been loaded.
...
FSForm *form = [[FSForm alloc] initWithDocument:doc];
int count = [form getFieldCount:@""];
for (int i = 0; i < count; i++) {
FSField* field = [form getField:i filter:@""];
FSFieldType field_type = [field getType];
if (FSFieldTypeTextField == field_type)
[field removeField:field];
}
...js
const FSDK = require("@fuxinsoft/foxit-pdf-sdk-node");
...
// Assuming PDFDoc doc has been loaded.
let form = new FSDK.Form(doc)
let filter = "text1"
countFields = form.GetFieldCount("")
for(var i = 0; i < countFields; i++) {
let field = form.GetField(i, filter)
if(field.GetType() == FSDK.Field.e_TypeTextField)
form.RemoveField(field)
}
...csharp
using foxit;
using foxit.common;
using foxit.common.fxcrt;
using foxit.pdf;
using foxit.pdf.interform;
using foxit.pdf.annots;
using foxit.pdf.actions;
...
// Assuming PDFDoc doc has been loaded.
Field field = form.GetField(0, "Text Field0");
form.RemoveField(field);
...go
import (
. “foxit.com/fsdk”
)
...
# Assuming PDFDoc doc has been loaded.
form := NewForm(doc)
defer DeleteForm(form)
filter := "text1"
countFields := form.GetFieldCount("")
for i:=0; i<countFields; i++{
field := form.GetField(i, filter)
if field.GetType() == FieldE_TypeTextField{
form.RemoveField(field)
}
}
...