Wiki Markup |
---|
Hidden |
DO NOT EDIT THE CONTENT OF THIS PAGE DIRECTLY, UNLESS YOU KNOW WHAT YOU'RE DOING.
THE STRUCTURE OF THE CONTENT IS VITAL IN BEING ABLE TO EXTRACT CHANGES FROM THE PAGE AND MERGE THEM BACK INTO SERVOY SOURCE{hidden}
{sub-section:description|text=}The PDF Forms plugin can be used to publish PDF Forms through the Application Server. User can *open* the PDF Form, *fill in* the fields and *submit* the PDF Form. The submitted PDF Form is sent to the plugin and the values of the fields are *extracted* from the PDF Form and *stored* in the database.
For the plugin to receive the filled out PDF Form and to extract the data, the following is required:
- The fields need to be uniquely named
- The PDF Form required to have a ['submit' button|#Submit button], which sends the form data back to the plugin.
The PDF Forms plugin is a 100% server side operating plugin and interacts directly with the database for retrieving the form and storing the filled in field values.
h4.Basic Workflow
# Actual PDF Forms are uniquely stored as a record in the pdf_template table.
# For each time that an actual PDF Form needs to be filled out a pdf_action record is created
# Links to open the PDF Form for a specific action are provided to the people that need to fill out the form (for example through an application or through email)
# The user opens the PDF Form (in a browser), fills in the fields and submits the PDF Form
# The plugin receives the submitted form, reads the values from the fields and saves those as individual records with the field name and value in the pdf_form_values table, related to the pdf_action record.
# The user gets redirected to the redirect URL
# The pdf_action record is marked as closed
h4.Creating PDF Forms
The PDF Forms plugin supports PDF Forms (both FDF and XFA) created using [Adobe Acrobat|http://www.adobe.com/products/acrobat/].
{note:XFA Form Support}The plugin supports XFA forms since Servoy 5.2.5 release.{note}
In order for the PDF Forms plugin to work with a specific PDF Form, it is required that the PDF Form has:
- Uniquely named fields
- A submit button
- A hidden field called |
The PDF Forms plugin can be used to publish PDF Forms through the Application Server. User can open the PDF Form, fill in the fields and submit the PDF Form. The submitted PDF Form is sent to the plugin and the values of the fields are extracted from the PDF Form and stored in the database.
For the plugin to receive the filled out PDF Form and to extract the data, the following is required:
The PDF Forms plugin is a 100% server side operating plugin and interacts directly with the database for retrieving the form and storing the filled in field values.
The PDF Forms plugin supports PDF Forms (both FDF and XFA) created using Adobe Acrobat.
Note | ||||
---|---|---|---|---|
| ||||
The plugin supports XFA forms since Servoy 5.2.5 release. |
In order for the PDF Forms plugin to work with a specific PDF Form, it is required that the PDF Form has:
...
...
...
...
...
...
Uniquely
...
named
...
fields
...
When
...
the
...
user
...
has
...
filled
...
out
...
a
...
form
...
and
...
submits
...
it,
...
the
...
...
Forms
...
plugin
...
retrieves
...
all
...
the
...
fields
...
and
...
their
...
values
...
and
...
stores
...
them
...
in
...
the
...
database.
...
For
...
each
...
field
...
name,
...
it
...
stores
...
only
...
one
...
value.
...
This
...
means
...
that
...
unless
...
each
...
field
...
is
...
uniquely
...
named,
...
values
...
will
...
get
...
lost.
...
Submit button
The PDF form needs to contain a submit button to allow the user to post back the filled in form back to the PDF Forms plugin on the Application Server.
Using Adobe Acrobat or Adobe LiveCycle, create a submit button on the form. For FDF form add the following JavaScript code to the mouse-up action on the button:
Code Block |
---|
var ef = this.getField("servoy_pdf_submit_url");
this.submitForm(ef.value);{code}
|
For
...
XFA
...
form
...
add
...
the
...
following
...
JavaScript
...
code
...
to
...
the
...
preSubmit
...
action
...
on
...
the
...
button:
...
Code Block |
---|
this.resolveNode("#event").submit.target =
event.target.getField("Form[0].Page[0].servoy_pdf_submit_url[0]").value+"?action_id="+event.target.getField ("Form[0].Page[0].servoy_action_id[0]").value;{code}
|
For
...
XFA
...
form
...
the
...
form
...
must
...
be
...
submitted
...
as
...
XML
...
using
...
UTF-8
...
encoding.
...
Also
...
in
...
this
...
javascript
...
code
...
Form
...
and
...
Page
...
must
...
be
...
replaced
...
with
...
the
...
actual
...
names
...
present
...
in
...
the
...
...
document.
...
Automatic
...
submit
...
button
...
injection
...
The
...
...
Forms
...
plugin
...
contains
...
logic
...
to
...
automatically
...
insert
...
the
...
submit
...
button
...
into
...
the
...
...
Form.
...
The
...
automatic
...
insert
...
of
...
the
...
submit
...
button
...
is
...
only
...
supported
...
when
...
the
...
...
Form
...
is
...
opened
...
by
...
users
...
using
...
Adobe
...
Acrobat,
...
not
...
when
...
opened
...
through
...
Adobe
...
Reader.
...
Also,
...
it
...
is
...
not
...
supported
...
for
...
XFA
...
forms.
...
To
...
enable
...
automatic
...
insertion
...
of
...
the
...
submit
...
button,
...
the
...
'skip_placing_submit_button'
...
field
...
on
...
the
...
pdf_template
...
record
...
needs
...
to
...
be
...
set
...
to
...
one
...
('1').
...
When
...
set
...
to
...
zero
...
('0')
...
the
...
button
...
will
...
not
...
be
...
inserted
...
automatically.
...
Hidden
...
fields
...
The
...
...
Form
...
needs
...
to
...
contain
...
two
...
hidden
...
fields,
...
one
...
named
...
'servoy_pdf_submit_url'
...
and
...
one
...
named
...
'servoy_action_id'.
...
These
...
fields
...
will
...
be
...
automatically
...
populated
...
by
...
the
...
...
Forms
...
plugin
...
and
...
are
...
used
...
to
...
retrieve
...
the
...
filled
...
in
...
data
...
back.
...
For
...
XFA
...
forms,
...
these
...
hidden
...
fields
...
are
...
also
...
used
...
in
...
order
...
to
...
put
...
the
...
form
...
to
...
readonly.
...
This
...
is
...
needed
...
because
...
the
...
XFA
...
form
...
cannot
...
be
...
flattened
...
out-of-the-box,
...
just
...
as
...
the
...
FDF
...
form.
...
So,
...
this
...
javascript
...
must
...
be
...
added
...
in
...
initialize
...
event
...
of
...
the
...
form:
...
Code Block |
---|
if (xfa.resolveNode("Form.Page.servoy_pdf_submit_url").rawValue==null) {xfa.resolveNode ("Form.Page.submitButton").presence="invisible";Form.access = "nonInteractive";}
{code}
|
In
...
this
...
javascript
...
code
...
Form,
...
Page
...
and
...
submiButton
...
must
...
be
...
replaced
...
with
...
the
...
actual
...
names
...
present
...
in
...
the
...
...
document.
...
Also
...
this
...
code
...
only
...
works
...
for
...
...
version
...
9
...
and
...
later
...
when
...
access
...
property
...
was
...
introduced
...
for
...
form.
...
In
...
order
...
to
...
support
...
earlier
...
versions
...
all
...
fields
...
in
...
form
...
must
...
be
...
parsed
...
and
...
put
...
to
...
nonInteractive
...
(in
...
javascript
...
code).
...
...
...
...
...
The
...
...
Forms
...
plugin
...
exposes
...
two
...
dynamic
...
url's
...
for
...
accessing
...
the
...
...
Forms:
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Note | ||||||
---|---|---|---|---|---|---|
| =
| }|||||
The pdf_template record contains one column that affects if the Form can be submitted or not. If the action_type column is set to VIEW (value=0) the Form will open in read-only mode. The fields will be read-only and the submit button will be disabled. When the action_type column is set to EDIT (value=1) the Form will open in edit-mode, allowing the fields to be edited and the Form to be submitted. {note} {note:Adobe Acrobat Reader}To view PDF Forms in the browser, Adobe Acrobat Reader 7 (or higher) - including the default web browser plugin - must be installed. Acrobat Reader 7 can be downloaded (at no charge) from Adobe: [ |
Note | ||||
---|---|---|---|---|
| ||||
To view PDF Forms in the browser, Adobe Acrobat Reader 7 (or higher) - including the default web browser plugin - must be installed. Acrobat Reader 7 can be downloaded (at no charge) from Adobe: http://www.adobe.com ]{note} h4.Redirect url After submitting the PDF form, the browser will redirect to the |
After submitting the PDF form, the browser will redirect to the redirect_url,
...
if
...
specified.
...
If
...
no
...
redirect_url
...
is
...
specified
...
on
...
the
...
specific
...
action,
...
the
...
...
Forms
...
plugin
...
will
...
lookup
...
the
...
redirect_url
...
on
...
the
...
pdf_template
...
record
...
linked
...
to
...
the
...
pdf_action.
...
If
...
both
...
the
...
pdf_action
...
and
...
pdf_template
...
do
...
not
...
specify
...
a
...
redirect_url,
...
the
...
browser
...
will
...
be
...
redirected
...
to
...
a
...
default
...
page
...
that
...
displays
...
the
...
text
...
'Data
...
successfully
...
stored,close
...
this
...
window'
...
and
...
will
...
attempt
...
to
...
close
...
the
...
window.
...
...
...
...
When
...
the
...
user
...
submits
...
a
...
...
Form,
...
the
...
related
...
pdf_action
...
record
...
will
...
be
...
marked
...
as
...
closed.
...
When
...
the
...
user
...
would
...
try
...
to
...
re-open
...
a
...
...
Form
...
that
...
was
...
previously
...
submitted,
...
thus
...
the
...
pdf_action
...
record
...
is
...
marked
...
as
...
closed,
...
instead
...
a
...
page
...
will
...
be
...
shown
...
in
...
the
...
browser,
...
displaying
...
the
...
text
...
'Security
...
violation,
...
use
...
the
...
...
system
...
to
...
edit
...
pdfs'.
...
...
...
When
...
the
...
...
Forms
...
plugin
...
opens
...
a
...
...
Form
...
linked
...
to
...
an
...
pdf_action,
...
it
...
will
...
fill
...
any
...
field
...
in
...
the
...
...
Form
...
with
...
data
...
that
...
is
...
already
...
stored
...
in
...
the
...
pdf_form_values
...
table,
...
related
...
to
...
the
...
pdf_action
...
record.
...
As
...
can
...
be
...
seen
...
in
...
the
...
ERD
...
below,
...
the
...
link
...
between
...
the
...
data
...
stored
...
in
...
the
...
pdf_form_values
...
table
...
and
...
the
...
pdf_action
...
table
...
is
...
not
...
done
...
based
...
on
...
the
...
primary
...
key
...
of
...
the
...
pdf_actions
...
table,
...
but
...
on
...
a
...
separate
...
form_id
...
column.
...
This
...
allows
...
for
...
the
...
following:
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
The
...
ERD
...
below
...
is
...
the
...
minimum
...
required
...
by
...
the
...
plugin
...
to
...
operate.
...
The
...
data
...
model
...
needs
...
to
...
be
...
present
...
in
...
one
...
of
...
the
...
Database
...
Servers.
...
By
...
default,
...
the
...
DataBase
...
Server
...
named
...
'pdf_forms'
...
will
...
be
...
used,
...
but
...
this
...
can
...
be
...
overwritten
...
using
...
the
...
'pdf_forms_plugin_servername'
...
setting
...
of
...
the
...
plugin,
...
available
...
on
...
the
...
Admin
...
page
...
under
...
...
...
...
.
...
Gliffy Diagram | ||||||
---|---|---|---|---|---|---|
|
pdf_templates
The pdf_templates table stores the the actual PDF Form:
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
pdf_actions
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Note |
---|
...
|
...
|
...
|
...
|
...
Before |
...
Servoy |
...
5.1, |
...
the |
...
plugin |
...
also |
...
requires |
...
the |
...
presence |
...
of |
...
a |
...
'user_id' |
...
column, |
...
although |
...
not |
...
used |
pdf_form_values
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
When a PDF Form is shown to the user a related PDF Form template is automatically retrieved. This PDF Form Template is by default loaded from the "actual_pdf_form"
...
column
...
from
...
the
...
pdf_templates
...
table.
...
There
...
are
...
two
...
options
...
to
...
override
...
the
...
location
...
from
...
where
...
the
...
template
...
is
...
retrieved:
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
The
...
overrideTemplateLocation
...
can
...
be
...
any
...
location
...
that
...
is
...
accessible
...
from
...
the
...
machine
...
where
...
the
...
Servoy
...
Web
...
Client
...
is
...
running,
...
for
...
example
...
../application_server/server/webapps/ROOT/servoy-webclient/..
...
The
...
order
...
of
...
precedence
...
for
...
...
Form
...
Template
...
location
...
is:
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
HTML Table | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||
|
...
HTML Table | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|