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}
|
The
...
...
Forms
...
plugin
...
can
...
be
...
used
...
to
...
publish
...
...
Forms
...
through
...
the
...
Application
...
Server.
...
User
...
can
...
open
...
the
...
...
Form,
...
fill
...
in
...
the
...
fields
...
and
...
submit
...
the
...
...
Form.
...
The
...
submitted
...
...
Form
...
is
...
sent
...
to
...
the
...
plugin
...
and
...
the
...
values
...
of
...
the
...
fields
...
are
...
extracted
...
from
...
the
...
...
Form
...
and
...
stored
...
in
...
the
...
database.
...
For
...
the
...
plugin
...
to
...
receive
...
the
...
filled
...
out
...
...
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
...
...
form
...
needs
...
to
...
contain
...
a
...
submit
...
button
...
to
...
allow
...
the
...
user
...
to
...
post
...
back
...
the
...
filled
...
in
...
form
...
back
...
to
...
the
...
...
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
...
...
Form
...
is
...
shown
...
to
...
the
...
user
...
a
...
related
...
...
Form
...
template
...
is
...
automatically
...
retrieved.
...
This
...
...
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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|