OBS/Makros und Scripting/Anwendungsbereiche/interaktive PDF: Unterschied zwischen den Versionen
Thiel (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Thiel (Diskussion | Beiträge) |
||
Zeile 167: | Zeile 167: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
| | | | ||
Zeile 175: | Zeile 176: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|'tacenter' | |'tacenter' | ||
Zeile 186: | Zeile 188: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|True, False | |True, False | ||
Zeile 194: | Zeile 197: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|True, False | |True, False | ||
Zeile 202: | Zeile 206: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|True, False | |True, False | ||
Zeile 210: | Zeile 215: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|True, False | |True, False | ||
Zeile 218: | Zeile 224: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|True, False | |True, False | ||
Zeile 226: | Zeile 233: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
|True, False | |True, False | ||
Zeile 234: | Zeile 242: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
| | | | ||
Zeile 242: | Zeile 251: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
Schaltflächen | Schaltflächen | ||
| | | | ||
Zeile 254: | Zeile 265: | ||
|Textfeld | |Textfeld | ||
Numerisches Feld | Numerisches Feld | ||
Datumsfeld | Datumsfeld | ||
Schaltflächen | Schaltflächen | ||
| | | | ||
Zeile 333: | Zeile 346: | ||
|URL bei Typ 'pbasubmit'<syntaxhighlight lang="delphi"> | |URL bei Typ 'pbasubmit'<syntaxhighlight lang="delphi"> | ||
cSubmitURL := | cSubmitURL := | ||
'http://www.bergau.de | 'http://www.bergau.de/200804/forms_test.asp'; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|- | |- | ||
Zeile 350: | Zeile 363: | ||
|Mindestens ein Feld '''muss''' ausgefüllt sein | |Mindestens ein Feld '''muss''' ausgefüllt sein | ||
|- | |- | ||
|AddRadioItem(qr_printer: TQR_Printer; Rect:TRect) | |AddRadioItem | ||
(qr_printer: TQR_Printer; Rect:TRect) | |||
|Radiobox | |Radiobox | ||
| | | | ||
Zeile 390: | Zeile 404: | ||
|False | |False | ||
|Einträge werden Sortiert. | |Einträge werden Sortiert. | ||
nSelectedItemIndex wird dann aber unter Umständen nicht mehr korrekt funktionieren | nSelectedItemIndex wird dann aber unter | ||
Umständen nicht mehr korrekt funktionieren | |||
|- | |- | ||
|cBoxItems: String | |cBoxItems: String | ||
Zeile 433: | Zeile 449: | ||
|'tncomment' | |'tncomment' | ||
'tninsert' | 'tninsert' | ||
'tnparagraph' | 'tnparagraph' | ||
tnnewparagraph' | tnnewparagraph' | ||
'tnhelp' | 'tnhelp' | ||
'tnnote' | 'tnnote' | ||
'tnkey' | 'tnkey' | ||
|'tncomment' | |'tncomment' |
Version vom 14. Juni 2024, 09:02 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.
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
Verbundene Checkbox (Radiobox)
Mehrere Felder zum ankreuzen eines Feldes
Auswahlbox (Combobox)
Eine Liste vordefinierter auswählbarer Einträge
Anmerkungen
Kommentar- und Hinweisfelder
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, []);
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 | URL bei Typ 'pbasubmit'cSubmitURL :=
'http://www.bergau.de/200804/forms_test.asp';
| ||
cFormSubmitFormat: String | Schaltflächen | 'fsfhtml'
'fsffdf' 'fsfxml' |
'fsfhtml' | Format der Einreichung |
lAtleastOneSelectedItem: Boolean | Radiobox | True, False | False | Mindestens ein Feld muss ausgefüllt sein |
AddRadioItem
(qr_printer: TQR_Printer; Rect:TRect) |
Radiobox | Methode zum hinzufügen von Werten | ||
lChecked: Boolean | CheckBox
Radiobox |
True, False | False | Checkbox ist bei der Erstellung angehakt |
cSymbol: String | CheckBox
Radiobox |
'pfcsCross'
'pfcscheck' 'pfcscircle' 'pfcsdiamond' 'pfcssquare' 'pfcsstar' |
'pfcsCross' | Symbol für die Checkbox |
lIsEditable: Boolean | ComboBox | True, False | False | Einträge können hinzugefügt werden |
lIsSortList: Boolean | ComboBox | True, False | False | Einträge werden Sortiert.
nSelectedItemIndex wird dann aber unter Umständen nicht mehr korrekt funktionieren |
cBoxItems: String | ComboBox | Einträge der Combobox | ||
nSelectedItemIndex: Integer | ComboBox
Radiobox |
-1 | vorausgewählter Eintrag | |
cTitel: String | Anmerkungen | Titel der Anmerkung | ||
cSubject: String | Anmerkungen | Betreff der Anmerkung | ||
cContents: String | Anmerkungen | Inhalt der Anmerkung | ||
lOpen: Boolean | Anmerkungen | True, False | False | Anmerkung wird beim öffnen des PDF angezeigt |
cTyp: String | Anmerkungen | 'tncomment'
'tninsert' 'tnparagraph' tnnewparagraph' 'tnhelp' 'tnnote' 'tnkey' |
'tncomment' | Typ der Anmerkung |