OBS/Makros und Scripting/Anwendungsbereiche/interaktive PDF: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 11: Zeile 11:


Diese Eigenschaft von PDF/A steht im direkten Kontrast zu interaktiven PDF und hat zur Folge, dass PDF/A interaktive Elemente nur zum teil oder gar nicht unterstützt.
Diese Eigenschaft von PDF/A steht im direkten Kontrast zu interaktiven PDF und hat zur Folge, dass PDF/A interaktive Elemente nur zum teil oder gar nicht unterstützt.
==Erstellung über Druckdateien==
Die interaktiven Steuerelemente werden direkt über die Druckdatei von OBS hinzugefügt


=== Mögliche Steuerelemente ===
== Mögliche Steuerelemente ==


==== Eingabefled/Textfeld ====
=== Eingabefled/Textfeld ===
Einfache Eingabefelder die normalen Text beinhalten.  
Einfache Eingabefelder die normalen Text beinhalten.  


[[Datei:PDF Textfeld.png|rahmenlos|rand]]
[[Datei:PDF Textfeld.png|rahmenlos|rand]]


==== Numerische Felder ====
=== Numerische Felder ===
Eingabefelder, die nur die Eingabe von Zahlen zulassen
Eingabefelder, die nur die Eingabe von Zahlen zulassen


==== Datumsfelder ====
=== Datumsfelder ===
Felder zum eintragen eines Datums
Felder zum eintragen eines Datums


==== Schaltfläche ====
=== Schaltfläche ===
Drückbare Schaltflächen
Drückbare Schaltflächen


Zeile 34: Zeile 32:
oder das ausführen eines Javascripts für komplexe Aufgaben.
oder das ausführen eines Javascripts für komplexe Aufgaben.


==== Checkbox ====
=== Checkbox ===
Felder zum ankreuzen
Felder zum ankreuzen


[[Datei:PDF Checkbox.png|rand]]
[[Datei:PDF Checkbox.png|rand]]


==== Verbundene Checkbox (Radiobox) ====
=== Verbundene Checkbox (Radiobox) ===
Mehrere Felder zum ankreuzen eines Feldes
Mehrere Felder zum ankreuzen eines Feldes


[[Datei:PDF Radiobox.png|rand]]
[[Datei:PDF Radiobox.png|rand]]


==== Auswahlbox (Combobox) ====
=== Auswahlbox (Combobox) ===
Eine Liste vordefinierter auswählbarer Einträge
Eine Liste vordefinierter auswählbarer Einträge


[[Datei:PDF Combobox.png|rand]]
[[Datei:PDF Combobox.png|rand]]


==== Anmerkungen ====
=== Anmerkungen ===
Kommentar- und Hinweisfelder
Kommentar- und Hinweisfelder


[[Datei:PDF Annot.png|rand]]
[[Datei:PDF Annot.png|rand]]
== Erstellung über Druckdateien ==
Die interaktiven Steuerelemente werden direkt über die Druckdatei von OBS hinzugefügt
Dafür können je nach Komplexität kosten zum anpassen der jeweiligen Drucke anfallen.
Beim Export von Durcken als PDF werden diese interaktiv. Sollte ein solcher Druck "normal" ausgedruckt werden, werden die Steuerelemte nach Möglichkeit zu druckbaren Elementen konvertiert.
=== Implementierung im Druck ===
Bei der Implementierung stehen folgende Funktionen zur Verfügung:<syntaxhighlight lang="delphi">
//Eingabefeld
qRep_PDFFormFieldEdit(EZ, 'EditField1', oValues);
//Nummerisches Feld
qRep_PDFFormFieldNumEdit(EZ, 'EditField2', oValues);
//Datumsfeld
qRep_PDFFormFieldDateEdit(EZ, 'EditField3', oValues);
//Schaltfläche
qRep_PDFFormFieldButton(EZ, 'Schaltfläche', oValues);
//Checkbox
qRep_PDFFormFieldCheckBox(EZ, 'CheckBox', oValues);
//Radiobutton
qRep_PDFFormFieldRadioButton(EZ, 'RadioButton1', oValues); 
//Combobox
qRep_PDFFormFieldCombobox(EZ, 'Combobox', oValues);
//Kommentar
qRep_PDFFormFieldTextAnnot(EZ, 'TextAnot1', oValues);
</syntaxhighlight>Die spezifischen Eigenschaften der einzelnen Elemente werden über das oValues Objekt definiert und übergeben.
Dieses Objekt ist vom Typ "TFormFieldValue" und muss vor dem Hinzufügen der einzelnen Werte erstellt und am Ende wieder freigegeben werden.
Das Objekt bietet eine Reset Funktion, die alle Werte des Objekt auf Standard zurück setzt. Dadurch ist es möglich das Objekt mehrfach zu nutzen.<syntaxhighlight lang="delphi">
oValues := TFormFieldValue.Create(Rect(10, 10, 50, 20));
oValues.cValue := 'dies ist ein Textfeld';
oValues.lIsMultiline := False;
oValues.oFont.Size := 10;
qRep_PDFFormFieldEdit(EZ, 'EditField1', oValues);
oValues.Reset(Rect(10, 30, 26, 46));
oValues.lChecked := True;
qRep_PDFFormFieldCheckBox(EZ, 'CheckBox', oValues);
MyFreeAndNil(oValues);
</syntaxhighlight>Für das Create und Reset wird jeweils ein Rect übergeben, welches die Position im Dokument definiert<syntaxhighlight lang="delphi">
Rect(left, top, right, bottom)
oValues.Reset(Rect(qRep_SAnfang(EZ,'pk1'), qRep_Ypos(EZ,y), qRep_SAnfang(EZ,'pk2'), qRep_Ypos(EZ,y+1)));
</syntaxhighlight>


=== Verfügbare Werte ===
=== Verfügbare Werte ===
{| class="wikitable"
|+
!Wert
!Für Typ
!Werte
!Standard Wert
!Beschreibung
|-
|aRect: TRect
|alle
|
|
|Rect für die Positionierung im Dokument
|-
|cPreferences: String
|alle
|'afpreadonly'
'afprequired'
|[]
|Definition des Feldes (nur Lesen oder ausfüllen erforderlich)
|-
|oBackgroundColor: TColor
|alle
|
|$FFD7CC
|Farbe des Hintergrunds
|-
|oBorderColor: TColor
|alle
|
|clBlack
|Farbe dess Rahmens
|-
|oFont: TFont
|alle
|
|<syntaxhighlight lang="delphi">
oFont.Name := 'Arial';
oFont.Size := 10;
oFont.Color := clBlack;
</syntaxhighlight>
|Definition der Schriftart
(Schriftstile wie "Fett" oder Kursiv" werden wie folgt definiert:<syntaxhighlight lang="delphi">
qSetRepStyle(EZ, [fsBold]);
oValues.Reset(Rect(10, 10, 30, 20));
qRep_PDFFormFieldEdit(EZ, 'Textfeld', oValues);
qSetRepStyle(EZ, []);
</syntaxhighlight>Ausnahmen:
Die schriftart von Checkboxen und Radioboxen ist nicht änderbar
|-
|lPrintable: Boolean
|alle
|True, False
|True
|True: Das Feld wird bei normalen Drucken angezeigt
|-
|cValue: String
|Textfeld
Numerisches Feld
Datumsfeld
|
|
|Der initialwert eines Feldes
|-
|cHAlignment: String
|Textfeld
Numerisches Feld
Datumsfeld
|'tacenter'
'taright'
'taleft'
|'taleft'
|die Textausrichtung eines Feldes
mitte, rechts-, linksbündig
|-
|lIsMultiline: Boolean
|Textfeld
Numerisches Feld
Datumsfeld
|True, False
|False
|Einzeilig oder mehrzeilige Felder
|-
|lIsPassword: Boolean
|Textfeld
Numerisches Feld
Datumsfeld
|True, False
|False
|Anzeige von Punkten statt der Eingabe
|-
|lIsFileSelect: Boolean
|Textfeld
Numerisches Feld
Datumsfeld
|True, False
|False
|Auswahl einer Datei zum speichern des Pfades
|-
|lIsDoNotSpellCheck: Boolean
|Textfeld
Numerisches Feld
Datumsfeld
|True, False
|False
|Rechtschreibung für das Feld ignorieren
|-
|lIsDoNotScroll: Boolean
|Textfeld
Numerisches Feld
Datumsfeld
|True, False
|False
|Keine Scrollbar anzeigen
|-
|lIsBorder: Boolean
|Textfeld
Numerisches Feld
Datumsfeld
|True, False
|False
|Rahmen anzeigen
|-
|nMaxLength: Integer
|Textfeld
Numerisches Feld
Datumsfeld
|
| -1
|Maximale länge der Eingabe
|-
|nXTextOffsetPtn: Double
|Textfeld
Numerisches Feld
Datumsfeld
Schaltflächen
|
|0
|Korrektur des anzuzeigenden Textes auf der X-Achse in Punkte
Für bestimmte Fonts kann es nötig sein diese anzupassen,
da der Text nicht korrekt Positioniert wird
|-
|nYTextOffsetPtn: Double
|Textfeld
Numerisches Feld
Datumsfeld
Schaltflächen
|
|0
|Korrektur des anzuzeigenden Textes auf der Y-Achse in Punkte
Für bestimmte Fonts kann es nötig sein diese anzupassen,
da der Text nicht korrekt Positioniert wird
|-
|nBorderWidth: Integer
|Schaltflächen
|
|1
|Rahmenbreite
|-
|lVisible: Boolean
|Schaltflächen
|True, False
|True
|Sichbarkeit der Schaltfläche
|-
|cNormalCaption: String
|Schaltflächen
|
|
|Text bei normaler Anzeige der Schaltfläche
|-
|cRolloverCaption: String
|Schaltflächen
|
|cNormalCaption
|Text beim berühren der Schaltfläche mit der Maus
|-
|cDownCaption: String
|Schaltflächen
|
|cNormalCaption
|Text beim betätigen der Schaltfläche
|-
|cAction: String
|Schaltflächen
|'pbaNone'
'pbasubmit'
'pbareset'
'pbajavascript'
|'pbaNone'
|Typ der Schaltfläche
|-
|cJavaScript: String
|Schaltflächen
|
|
|Hinterlegtes Javascript bei Typ 'pbajavascript'<syntaxhighlight lang="delphi">
cJavaScript := 'app.alert("Hello World")';
cJavaScript :=
' var tf1 = this.getField("tfName");            ' +
' var btn1 = this.getField("pbValidate");        ' +
' var btn2 = this.getField("pbSubmit");          ' +
' if (tf1.valueAsString.length > 3) {            ' +
'  tf1.value = tf1.valueAsString.toUpperCase(); ' +
'  btn2.buttonSetCaption("Submit");            ' +
'  btn1.display = display.hidden;              ' +
'  btn1.setFocus();                            ' +
' } else {                                      ' +
'  app.alert("Please enter a valid name.");    ' +
'  tf1.setFocus();                              ' +
' }';
</syntaxhighlight>
|-
|cSubmitURL: String
|Schaltflächen
|
|
|<syntaxhighlight lang="delphi">
cSubmitURL := 'http://www.bergau.de/newsletters/demos/200804/forms_test.asp';
</syntaxhighlight>
|}
cSubmitURL         : String;
cFormSubmitFormat  : String;
//RadioButton
lAtleastOneSelectedItem : Boolean;
{np}oRadioItems         : array of TgtPDFFormRadioItem;
//CheckBox
lChecked           : Boolean;
//CheckBox/RadioButton
cSymbol            : String;
//ComboBox
lIsEditable        : Boolean;
lIsSortList        : Boolean;
cBoxItems          : String;
//ComboBox/RadioButton
nSelectedItemIndex : Integer;
//TextNote
cTitel             : String;
cSubject           : String;
cContents          : String;
lOpen              : Boolean;
cTyp               : String;


=== Beispiele ===
== Beispiele ==


==== Dokument (Antrag) ====
=== Dokument (Antrag) ===


==== Reparaturauftrag ====
=== Reparaturauftrag ===

Version vom 14. Juni 2024, 08:31 Uhr

Interaktive PDF

Interaktive PDF sind PDF Dokumente, die es erlauben bestimmte Werte direkt einzutragen oder zu ändern.

OBS bieten ebenfalls die Möglichkeiten diese PDF nach der Ausfüllung wieder einzulesen und die eingetragenen Daten zu verarbeiten.

Mithilfe von interaktiven/ausfüllbaren PDF ist es möglich Dokumente außerhalb von OBS zu bearbeiten um zum Beispiel bei einem Kundenbesuch diese über ein Tablet oder Laptop direkt auszufüllen.

Die ausgefüllten Daten können dann direkt in OBS importiert werden

Besonderheiten PDF/A

PDF/A ist ein spezielles PDF Format zum langfristigen archivieren von Dokumenten. Dabei ist unter anderem die Unveränderbarkeit des Dokumentes sehr wichtig.

Diese Eigenschaft von PDF/A steht im direkten Kontrast zu interaktiven PDF und hat zur Folge, dass PDF/A interaktive Elemente nur zum teil oder gar nicht unterstützt.

Mögliche Steuerelemente

Eingabefled/Textfeld

Einfache Eingabefelder die normalen Text beinhalten.

PDF Textfeld.png

Numerische Felder

Eingabefelder, die nur die Eingabe von Zahlen zulassen

Datumsfelder

Felder zum eintragen eines Datums

Schaltfläche

Drückbare Schaltflächen

Neben den einfachen zurücksetzen des Dokumentes (Reset), bieten diese Schaltflächen auch die Einreichung des Dokumentes an eine externe Website (Submit)

oder das ausführen eines Javascripts für komplexe Aufgaben.

Checkbox

Felder zum ankreuzen

PDF Checkbox.png

Verbundene Checkbox (Radiobox)

Mehrere Felder zum ankreuzen eines Feldes

PDF Radiobox.png

Auswahlbox (Combobox)

Eine Liste vordefinierter auswählbarer Einträge

PDF Combobox.png

Anmerkungen

Kommentar- und Hinweisfelder

PDF Annot.png

Erstellung über Druckdateien

Die interaktiven Steuerelemente werden direkt über die Druckdatei von OBS hinzugefügt

Dafür können je nach Komplexität kosten zum anpassen der jeweiligen Drucke anfallen.

Beim Export von Durcken als PDF werden diese interaktiv. Sollte ein solcher Druck "normal" ausgedruckt werden, werden die Steuerelemte nach Möglichkeit zu druckbaren Elementen konvertiert.

Implementierung im Druck

Bei der Implementierung stehen folgende Funktionen zur Verfügung:

//Eingabefeld
qRep_PDFFormFieldEdit(EZ, 'EditField1', oValues);

//Nummerisches Feld
qRep_PDFFormFieldNumEdit(EZ, 'EditField2', oValues);

//Datumsfeld
qRep_PDFFormFieldDateEdit(EZ, 'EditField3', oValues);

//Schaltfläche
qRep_PDFFormFieldButton(EZ, 'Schaltfläche', oValues);

//Checkbox
qRep_PDFFormFieldCheckBox(EZ, 'CheckBox', oValues);

//Radiobutton
qRep_PDFFormFieldRadioButton(EZ, 'RadioButton1', oValues);   

//Combobox
qRep_PDFFormFieldCombobox(EZ, 'Combobox', oValues);

//Kommentar
qRep_PDFFormFieldTextAnnot(EZ, 'TextAnot1', oValues);

Die spezifischen Eigenschaften der einzelnen Elemente werden über das oValues Objekt definiert und übergeben.

Dieses Objekt ist vom Typ "TFormFieldValue" und muss vor dem Hinzufügen der einzelnen Werte erstellt und am Ende wieder freigegeben werden.

Das Objekt bietet eine Reset Funktion, die alle Werte des Objekt auf Standard zurück setzt. Dadurch ist es möglich das Objekt mehrfach zu nutzen.

oValues := TFormFieldValue.Create(Rect(10, 10, 50, 20));
oValues.cValue := 'dies ist ein Textfeld';
oValues.lIsMultiline := False;
oValues.oFont.Size := 10;
qRep_PDFFormFieldEdit(EZ, 'EditField1', oValues);

oValues.Reset(Rect(10, 30, 26, 46));
oValues.lChecked := True;
qRep_PDFFormFieldCheckBox(EZ, 'CheckBox', oValues);

MyFreeAndNil(oValues);

Für das Create und Reset wird jeweils ein Rect übergeben, welches die Position im Dokument definiert

Rect(left, top, right, bottom)

oValues.Reset(Rect(qRep_SAnfang(EZ,'pk1'), qRep_Ypos(EZ,y), qRep_SAnfang(EZ,'pk2'), qRep_Ypos(EZ,y+1)));

Verfügbare Werte

Wert Für Typ Werte Standard Wert Beschreibung
aRect: TRect alle Rect für die Positionierung im Dokument
cPreferences: String alle 'afpreadonly'

'afprequired'

[] Definition des Feldes (nur Lesen oder ausfüllen erforderlich)
oBackgroundColor: TColor alle $FFD7CC Farbe des Hintergrunds
oBorderColor: TColor alle clBlack Farbe dess Rahmens
oFont: TFont alle
oFont.Name := 'Arial';
oFont.Size := 10;
oFont.Color := clBlack;
Definition der Schriftart (Schriftstile wie "Fett" oder Kursiv" werden wie folgt definiert:
qSetRepStyle(EZ, [fsBold]);
oValues.Reset(Rect(10, 10, 30, 20));
qRep_PDFFormFieldEdit(EZ, 'Textfeld', oValues);
qSetRepStyle(EZ, []);
Ausnahmen:

Die schriftart von Checkboxen und Radioboxen ist nicht änderbar

lPrintable: Boolean alle True, False True True: Das Feld wird bei normalen Drucken angezeigt
cValue: String Textfeld

Numerisches Feld Datumsfeld

Der initialwert eines Feldes
cHAlignment: String Textfeld

Numerisches Feld Datumsfeld

'tacenter'

'taright' 'taleft'

'taleft' die Textausrichtung eines Feldes

mitte, rechts-, linksbündig

lIsMultiline: Boolean Textfeld

Numerisches Feld Datumsfeld

True, False False Einzeilig oder mehrzeilige Felder
lIsPassword: Boolean Textfeld

Numerisches Feld Datumsfeld

True, False False Anzeige von Punkten statt der Eingabe
lIsFileSelect: Boolean Textfeld

Numerisches Feld Datumsfeld

True, False False Auswahl einer Datei zum speichern des Pfades
lIsDoNotSpellCheck: Boolean Textfeld

Numerisches Feld Datumsfeld

True, False False Rechtschreibung für das Feld ignorieren
lIsDoNotScroll: Boolean Textfeld

Numerisches Feld Datumsfeld

True, False False Keine Scrollbar anzeigen
lIsBorder: Boolean Textfeld

Numerisches Feld Datumsfeld

True, False False Rahmen anzeigen
nMaxLength: Integer Textfeld

Numerisches Feld Datumsfeld

-1 Maximale länge der Eingabe
nXTextOffsetPtn: Double Textfeld

Numerisches Feld Datumsfeld Schaltflächen

0 Korrektur des anzuzeigenden Textes auf der X-Achse in Punkte

Für bestimmte Fonts kann es nötig sein diese anzupassen, da der Text nicht korrekt Positioniert wird

nYTextOffsetPtn: Double Textfeld

Numerisches Feld Datumsfeld Schaltflächen

0 Korrektur des anzuzeigenden Textes auf der Y-Achse in Punkte

Für bestimmte Fonts kann es nötig sein diese anzupassen, da der Text nicht korrekt Positioniert wird

nBorderWidth: Integer Schaltflächen 1 Rahmenbreite
lVisible: Boolean Schaltflächen True, False True Sichbarkeit der Schaltfläche
cNormalCaption: String Schaltflächen Text bei normaler Anzeige der Schaltfläche
cRolloverCaption: String Schaltflächen cNormalCaption Text beim berühren der Schaltfläche mit der Maus
cDownCaption: String Schaltflächen cNormalCaption Text beim betätigen der Schaltfläche
cAction: String Schaltflächen 'pbaNone'

'pbasubmit' 'pbareset' 'pbajavascript'

'pbaNone' Typ der Schaltfläche
cJavaScript: String Schaltflächen Hinterlegtes Javascript bei Typ 'pbajavascript'
cJavaScript := 'app.alert("Hello World")';

cJavaScript :=
' var tf1 = this.getField("tfName");             ' +
' var btn1 = this.getField("pbValidate");        ' +
' var btn2 = this.getField("pbSubmit");          ' +
' if (tf1.valueAsString.length > 3) {            ' +
'   tf1.value = tf1.valueAsString.toUpperCase(); ' +
'   btn2.buttonSetCaption("Submit");             ' +
'   btn1.display = display.hidden;               ' +
'   btn1.setFocus();                             ' +
' } else {                                       ' +
'   app.alert("Please enter a valid name.");     ' +
'   tf1.setFocus();                              ' +
' }';
cSubmitURL: String Schaltflächen
cSubmitURL := 'http://www.bergau.de/newsletters/demos/200804/forms_test.asp';

cSubmitURL         : String;

cFormSubmitFormat  : String;

//RadioButton

lAtleastOneSelectedItem : Boolean;

{np}oRadioItems         : array of TgtPDFFormRadioItem;

//CheckBox

lChecked           : Boolean;

//CheckBox/RadioButton

cSymbol            : String;

//ComboBox

lIsEditable        : Boolean;

lIsSortList        : Boolean;

cBoxItems          : String;

//ComboBox/RadioButton

nSelectedItemIndex : Integer;

//TextNote

cTitel             : String;

cSubject           : String;

cContents          : String;

lOpen              : Boolean;

cTyp               : String;

Beispiele

Dokument (Antrag)

Reparaturauftrag