Breadcrumbs

STImgCtl – Formularfelder

Überblick und Hinweise

Ist der Formularfeldmodus aktiviert, kann der Benutzer Formularfelder im Dokument bearbeiten. Das Ausfüllen von Formularfeldern funktioniert nur für PDF-Dokumente.

Unterstützte Elemente sind:

  • Textbox

  • Checkbox

  • Radiobutton

  • Listbox

  • Combobox

Mit dieser Komponente können keine Unterschriftenfelder bearbeitet werden. Für digitale Signaturen können Sie die signotec-Komponente SignPDF3 verwenden.

Die im Formularfeldmodus vorgenommenen Änderungen können mit der Methode SaveDocument übernommen werden.

Beim Speichern der Änderungen wird das ganze Dokument neu geschrieben und eventuell bereits eingebrachte Unterschriften werden ungültig. Daher wird empfohlen, grundsätzlich nur unsignierte Dokumente zu bearbeiten. Auf einen eventuellen Verlust der Gültigkeit von Unterschriften wird von der Komponente nicht hingewiesen.

Der Formularfeldmodus kann über den entsprechenden Button in der Werkzeugleiste oder die Funktion EnablePDFFormularMode aktiviert und deaktiviert werden.

Eine Deaktivierung des Formularfeldmodus sorgt gleichzeitig für eine Speicherung des Dokumentes durch Überschreiben, sofern es durch die Methode LoadDocument geladen wurde.

Soll eine Änderung des Formularfeldmodus durch den Benutzer verhindert werden, kann die Werkzeugleiste ausgeblendet werden.

Während der Formularmodus aktiv ist, können andere Methoden gegebenenfalls gar nicht oder nur eingeschränkt verwendet werden. Ebenso sind einige Funktionen in der Werkzeugleiste der Komponente deaktiviert (z.B. das Drucken). Bereichshervorhebungen durch SetSelection oder über AllowMouseSelection sind nicht möglich, dafür können Sie SetHighlightFields zur Hervorhebung von Formularfeldern nutzen.

Formularfelder in PDF-Dokumenten können auf die Eingabe bestimmter Datentypen begrenzt werden. So kann z.B. festgelegt werden, dass in einem Formularfeld nur ein Datum mit einer bestimmten Syntax eingetragen werden darf, oder dass in einem Feld nur Zahlenwerte aber keine Buchstaben zulässig sind. Diese Syntaxprüfung der Formularfelddaten erfolgt durch JavaScript.
Folgende JavaScript-Kommandos zur Syntaxprüfung der Formularfelddaten werden von dieser Komponente unterstützt:

  • AFDate_FormatEx (Formatierung als Datum)

  • AFNumber_Format (Formatierung als Zahl)

Beispiele für Formatierungen im PDF:

JavaScript
AFDate_FormatEx("ddmmyyyy");
AFDate_FormatEx("mm");
AFDate_FormatEx("d mmmm, yyyy");
AFNumber_Format(0, 3, 0, 0, "", false);
AFNumber_Format(2, 2, 0, 0, "", false);

Methode EnablePDFFormularMode

Mit dieser Methode kann der Formularmodus zum aktiven Ausfüllen von PDF-Dokumenten aktiviert und deaktiviert werden. Standardmäßig ist dieser Modus ausgeschaltet.

Der Rückgabewert dieser Methode entspricht der Eigenschaft PDFFormularMode zum Zeitpunkt des Aufrufs.

Je nach Eingabeparameter wird das Dokument eventuell automatisch gespeichert, wenn es mit LoadDocument geladen wurde.

Bitte beachten Sie dazu auch die allgemeinen Hinweise zum Formularfeldmodus!

C#
int EnablePDFFormularMode(int nOptions);
C++
long EnablePDFFormularMode(long nOptions);

Parameter


In

Out

Mögliche

Werte

Beschreibung

nOptions

✔️


0

Formularfeldmodus deaktivieren

War der Modus aktiviert und wurde das Dokument über LoadDocument geladen, wird es gespeichert

Der Button zum Ändern des Modus in der Werkzeugleiste wird deaktiviert

1

Formularfeldmodus aktivieren

Der Button zum Ändern des Modus in der Werkzeugleiste wird aktiviert

2

Der Button zum Ändern des Modus in der Werkzeugleiste wird aktiviert

Rückgabewert

Bedeutung

0

Der Formularfeldmodus ist aktuell ausgeschaltet

1

Der Formularfeldmodus ist aktuell eingeschaltet

Methode SetHighlightFields

Diese Methode ändert die optische Darstellung von Formularfeldern im Formularfeldmodus. Zur Änderung muss kein PDF-Dokument geladen worden sein.

C#
int SetHighlightFields(short nMode);
C++
long SetHighlightFields(short nMode);


Parameter


In

Out

Mögliche

Werte

Beschreibung

nMode

✔️


0

keine Farbunterlegung (Standard)

1

Farbunterlegung für Formularfelder

Rückgabewert

Bedeutung

0

Ein Fehler ist aufgetreten

1

Methode erfolgreich ausgeführt

Methode SetRenderInternal

Mit dieser Methode kann eingestellt werden, ob per Tab-Taste zwischen den Formularfeldern navigiert werden kann, solange der Formularfeldmodus aktiv ist.

C#
sbyte SetRenderInternal(int nOptions);
C++
char SetRenderInternal(long nOptions);

Parameter


In

Out

Mögliche

Werte

Beschreibung

nOptions

✔️


1

Tabstops werden nicht interpretiert (Standard)

1000

Tabstops werden interpretiert

Rückgabewert

Bedeutung

0

Ein Fehler ist aufgetreten

1

Methode erfolgreich ausgeführt

Methode IsModified

Diese Methode gibt zurück, ob ein PDF-Dokument im Formularfeldmodus geändert wurde.

C#
int IsModified();
C++
long IsModified();

Rückgabewert

Bedeutung

0

Das Dokument wurde nicht verändert

1

Das Dokument wurde verändert

Methode GetEmptyMandatoryField

Diese Methode sucht nach leeren veränderbaren Pflicht-Formularfeldern in einem PDF-Dokument. So kann geprüft werden, ob noch unausgefüllte Pflichtfelder vorhanden sind. Es kann die Anzahl an unausgefüllten Pflichtfeldern zurückgegeben werden, oder der Index eines solchen Felds in der internen Auflistung der Formularfelder. (Wird stattdessen der PDF-Formularfeldindex benötigt, kann er danach mit MapFieldIndex2PDFIndex abgefragt werden.)

Um ein noch nicht ausgefülltes Feld in der Anzeige direkt anzuspringen, steht die Methode SelectFormfield zur Verfügung.

Bitte beachten Sie die allgemeinen Hinweise zum Formularfeldmodus, insbesondere bezüglich des Speicherns von Änderungen.

C#
int GetEmptyMandatoryField(int nOption);
C++
long GetEmptyMandatoryField(long nOption);

Parameter


In

Out

Mögliche Werte

Beschreibung

nOption

✔️


>=0

Index in der Liste der unausgefüllten Pflichtfelder; der Gesamtindex des entsprechenden Feldes wird zurückgegeben

-1

die Anzahl an unausgefüllten Pflichtfeldern wird zurückgegeben

Rückgabewert

Bedeutung

>= 0

entweder Index des angefragten Pflicht-Formularfeldes oder Gesamtanzahl der gefundenen unausgefüllten Pflichtformularfelder (siehe nOption)

-1

Es ist kein PDF-Dokument geladen, der Formularfeldmodus ist aktiviert, oder das angefragte unausgefüllte Pflichtfeld existiert nicht

Codebeispiel für das Finden aller unausgefüllten Pflichtfelder:

C#
int requiredCount = axSTImgCtl1.GetEmptyMandatoryField(-1);
if (requiredCount > 0)
{
  List<int> requiredIndices = new List<int>();
  for (int i = 0; i < requiredCount; i++)
  {
    requiredIndices.Add(axSTImgCtl1.GetEmptyMandatoryField(i));
  }
}

Codebeispiel zum Testen, ob noch unausgefüllte Pflichtfelder vorliegen:

C#
if (axSTImgCtl1.GetEmptyMandatoryField(0) >=0)
{
  MessageBox.Show("Es liegen unausgefüllte Pflichtfelder vor!");
}

Methode GetEmptyOptionalField

Diese Methode sucht nach leeren veränderbaren optionalen Formularfeldern in einem PDF-Dokument. So kann geprüft werden, ob noch unausgefüllte optionale Felder vorhanden sind. Es kann die Anzahl an unausgefüllten optionalen Feldern zurückgegeben werden, oder der Index eines solchen Felds in der internen Auflistung der Formularfelder. (Wird stattdessen der PDF-Formularfeldindex benötigt, kann er danach mit MapFieldIndex2PDFIndex abgefragt werden.)

Um ein noch nicht ausgefülltes Feld in der Anzeige direkt anzuspringen, steht die Methode SelectFormfield zur Verfügung.

Bitte beachten Sie die allgemeinen Hinweise zum Formularfeldmodus, insbesondere bezüglich des Speicherns von Änderungen.

C#
int GetEmptyOptionaField(int nReserved);
C++
long GetEmptyOptionaField(long nReserved);

Parameter


In

Out

Mögliche Werte

Beschreibung

nOption

✔️


>=0

Index in der Liste der unausgefüllten optionalen Felder; der Gesamtindex des entsprechenden Feldes wird zurückgegeben

-1

die Anzahl an unausgefüllten optionalen Feldern wird zurückgegeben

Rückgabewert

Bedeutung

>= 0

entweder Index des angefragten optionalen Formularfeldes oder Gesamtanzahl der gefundenen unausgefüllten optionalen Formularfelder (siehe nOption)

-1

Es ist kein PDF-Dokument geladen, der Formularfeldmodus ist aktiviert, oder das angefragte unausgefüllte optionale Feld existiert nicht

Für ein Codebeispiel siehe die Methode GetEmptyMandatoryField, die äquivalent angewendet wird.

Methode SelectFormfield

Diese Methode setzt den Fokus der Anzeige auf das gewünschte Formularfeldelement. Dafür muss der Stellenindex des Feldes in der internen Auflistung der Formularfelder übergeben werden, den man von den Methoden GetEmptyMandatoryField und GetEmptyOptionalField erhält.

C#
int SelectFormfield(int nIndex, int nReserved);
C++
long SelectFormfield(long nIndex, long nReserved);

Parameter


In

Out

Mögliche

Werte

Beschreibung

nIndex

✔️


>=0

Index des gewünschten Formularfeldelements; muss kleiner als die Gesamtanzahl an Formularfeldern sein

nReserved

✔️


0

Reserviert

Rückgabewert

Bedeutung

1

Methode erfolgreich ausgeführt

<= 0

Ein Fehler ist aufgetreten


-1

Das Dokument ist kein PDF


-2

Einer der Parameter enthält einen ungültigen Wert, oder es wird kein Dokument angezeigt

Methode MapFieldIndex2PDFIndex

Diese Methode dient dazu, den Index eines Feldes des aktuell geöffneten PDF-Dokumentes als PDF-konformen Feldindex zu erhalten. Hierfür wird der interne Feldindex benötigt, welchen die Methoden GetEmptyMandatoryField und GetEmptyOptionalField liefern.

C#
int MapFieldIndex2PDFIndex(int nIndex);
C++
long MapFieldIndex2PDFIndex(long nIndex);

Parameter


In

Out

Mögliche

Werte

Beschreibung

nIndex

✔️


0

interner Feldindex; muss kleiner als die Gesamtanzahl an Formularfeldern sein

Rückgabewert

Bedeutung

>=0

Methode erfolgreich ausgeführt, der Rückgabewert entspricht dem PDF-Feldindex

< 0

Ein Fehler ist aufgetreten


-1

Das geladene Dokument ist kein PDF


-2

Einer der Parameter enthält einen ungültigen Wert, oder es wird kein Dokument angezeigt


-4

Der gewählte Index existiert nicht

Eigenschaft PDFFormularMode

Über diese Eigenschaft kann der Status des Formularfeldmodus abgefragt werden.

C#
int PDFFormularMode;
C++
long PDFFormularMode;

In

Out

Mögliche

Werte

Beschreibung


✔️

0

Der Formularfeldmodus ist deaktiviert

1

Der Formularfeldmodus ist aktiviert

Eigenschaft PDFTotalFormularFields

Über diese Eigenschaft kann die Anzahl der Formularfelder in dem geladenen Dokument abgefragt werden, die über den Formularfeldmodus bearbeitet werden können.

C#
int PDFTotalFormularFields;
C++
long PDFTotalFormularFields;

In

Out

Mögliche

Werte

Beschreibung


✔️

>=0

Anzahl der Formularfelder.

Event FormFieldClicked

Dieses Event signalisiert das Anklicken eines Formularfeldbutton mit der Maus bzw. die Änderung des Textes in einem Textfeld. Hierfür muss der Formularfeldmodus aktiv sein. Es werden der Typ des Formularfelds, seine Indexposition und sein Subindex im PDF-konformen Format zurückgegeben. Signaturfelder werden von diesem Event ignoriert.

Im folgenden wird eine Beispiel-Implementierung gezeigt, in der benutzerdefinierte Namen durch Platzhalter (%…%) ersetzt wurden.

C#
public class _DSTImgCtlEvents_FormFieldClickedEvent
{
    public int nType;
    public int nIndex;
    public int nSubIndex;

    public _DSTImgCtlEvents_FormFieldClickedEvent(int nType, int nIndex, int nSubIndex)
    {
        this.nType = nType;
        this.nIndex = nIndex;
        this.nSubIndex = nSubIndex;
    }
}

this.%COMPONENT_NAME%.FormFieldClicked += new AxSTIMGCTLLib._DSTImgCtlEvents_FormFieldClickedEventHandler(this.%CALLBACK_FUNCTION%);

private void %CALLBACK_FUNCTION%(object sender, AxSTIMGCTLLib._DSTImgCtlEvents_FormFieldClickedEvent e);
C++
BEGIN_EVENTSINK_MAP(%CLASS_NAME%, CDialogEx)
    ON_EVENT(%CLASS_NAME%, %COMPONENT_ID%, 4, %CALLBACK_FUNCTION%, VTS_I4 VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

void %CALLBACK_FUNCTION%(long nType, long nIndex, long nSubIndex);

Parameter

Mögliche Werte

Beschreibung

nType

0

Unbekannt

1

Textbox

3

Checkbox

4

Radiobutton

5

Listbox / Combobox

nIndex

>=0

Position

nSubIndex

>=0

SubIndex (sofern vorhanden)

Event FormFieldTouched

Dieses Event signalisiert das Anklicken eines Formularfeldes mit der Maus. Hierfür darf weder der Formularfeldmodus noch die Markierung mit der Maus (siehe AllowMouseSelection) aktiv sein. Es werden der Typ des Formularfelds, seine Indexposition und sein Subindex im PDF-konformen Format zurückgegeben. Signaturfelder werden von diesem Event ignoriert.

Im folgenden wird eine Beispiel-Implementierung gezeigt, in der benutzerdefinierte Namen durch Platzhalter (%…%) ersetzt wurden.

C#
public class _DSTImgCtlEvents_FormFieldTouchedEvent
{
    public int nType;
    public int nIndex;
    public int nSubIndex;

    public _DSTImgCtlEvents_FormFieldTouchedEvent(int nType, int nIndex, int nSubIndex)
    {
        this.nType = nType;
        this.nIndex = nIndex;
        this.nSubIndex = nSubIndex;
    }
}

this.%COMPONENT_NAME%.FormFieldTouched += new AxSTIMGCTLLib._DSTImgCtlEvents_FormFieldTouchedEventHandler(this.%CALLBACK_FUNCTION%);

private void %CALLBACK_FUNCTION%(object sender, AxSTIMGCTLLib._DSTImgCtlEvents_MarkEndEvent e);
C++
BEGIN_EVENTSINK_MAP(%CLASS_NAME%, CDialogEx)
    ON_EVENT(%CLASS_NAME%, %COMPONENT_ID%, 5, %CALLBACK_FUNCTION%, VTS_I4 VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

void %CALLBACK_FUNCTION%(long nType, long nIndex, long nSubIndex);


Parameter

Mögliche Werte

Beschreibung

nType

0

Unbekannt

1

Textbox

3

Checkbox

4

Radiobutton

5

Listbox / Combobox

nIndex

>=0

Position

nSubIndex

>=0

SubIndex (sofern vorhanden)