yan2021
Goto Top

PDF-Dokument - Meldung für Pflichtfelder

Hallo,

ich habe ein ausfüllbares PDF-Dokument erstellt.
Dieses enthält 3 Pflichtfelder, die angehakt werden müssen, da ohne diese 3 Angaben eine Weiterbearbeitung nicht möglich ist.

Nun ist es leider so, dass es keinen Hinweis gibt, wenn jemand nun hingeht und das Dokument speichert und ausdruckt, ohne dass er diese 3 Pflichtfelder angehakt hat.

Gibt es eine Möglichkeit, dass die ausfüllende Person irgendeinen Hinweis bekommt, wenn diese 3 Pflichtfelder nicht ausgefüllt wurden?

Folgende Gedanken habe ich mir schon gemacht:

1) Ich könnte mir ggf. auch vorstellen, dass automatisch ein Hinweis erscheint, wenn die ausfüllende Person auf die nächste Seite runterscrollt... also dass dann ein Hinweis erscheint wie z.B. "bitte die 3 Pflichtfelder ausfüllen!".

2) Oder wenn die Person versucht, das Dokument zu speichern oder zu schließen; obwohl ich schon gelesen habe, dass sowas wohl nicht geht...

3) Ich habe auch schon über eine Lösung mit einem Button nachgedacht. Aber das wäre irgendwie nicht wirklich so gut anwendbar.

Vielleicht habt Ihr ja noch eine andere Idee. Vieles geht ja auch mit Scripten, die man im PDF-Dokument hinterlegen kann.

Danke und Grüße von
Yan face-wink

Content-ID: 669137

Url: https://administrator.de/contentid/669137

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

13402570474
13402570474 30.10.2024, aktualisiert am 31.10.2024 um 16:45:57 Uhr
Goto Top
Müll - bitte ignorieren
Müll - bitte ignorieren

Müll - bitte ignorieren
Müll - bitte ignorieren

Gruß

[Bitte geposteten KI Code zukünftig vor dem Posten auf grundsätzliche Funktionalität prüfen! Unsere neuen KI-Richtlinien sind hier eindeutig, Merci. (Moderation)]
Yan2021
Yan2021 30.10.2024 um 15:24:10 Uhr
Goto Top
Danke Dir für Deine Mühe.
Ich werde den Code gleich mal testen....

Grüße von
Yan face-wink
Yan2021
Yan2021 30.10.2024 aktualisiert um 15:49:30 Uhr
Goto Top
...ich habe es eben mal mit Deinem Code versucht. Und ja, ich nutze die Adobe Pro Version

Habe zunächst den Code in "JavaScript-Anweisungen für Dokumente" eingesetzt und im Code lediglich die Bezeichnungen der Felder (Feldnamen) angepaßt.

Anschließend habe ich mal nur eines von 3 Häkchen gesetzt und dann das Dokument gespeichert... und dabei erhielt ich keine Meldung... kein Fenster und das Dokument wurde problemlos gespeichert.

Hier mal zwei Screenshots, wo ich den Code eingetragen habe:
- die Anpassung sieht man rot umrandet -

javascript

javascript 2

Habe ich ggf. was falsch gemacht?

Grüße von
Yan face-wink
13402570474
13402570474 30.10.2024 aktualisiert um 15:54:15 Uhr
Goto Top
Das passt, aber heißen denn die Felder bzw Häkchen auch tatsächlich Zustimmung #1#2#3?

Klingt so, als würde es nicht die Felder selektieren bzw. prüfen. Die Felder sollten wissen, wie Du sie nennen möchtest (also nicht nur im Script definieren).

VG
Yan2021
Yan2021 30.10.2024 um 16:14:11 Uhr
Goto Top
Hallo und danke für die weitere Antwort.

Ich habe hier mal einen Screenshot gemacht, wo Du den Inhalt der Eigenschaften eines der 3 Felder sehen kannst. Dort steht als Feldname "Zustimmung 1".

javascript 3

Oder ist doch etwas anderes damit gemeint?

Grüße von
Yan face-wink
catrell
catrell 30.10.2024 aktualisiert um 16:42:32 Uhr
Goto Top
Das ist mal wieder typischer ungetesteter KI Code der nicht funktionieren kann... Das Save-Event kann man in Acrobat nicht abbrechen, schon gar nicht mit event.preventDefault() das es in Acrobat überhaupt nicht gibt, das addEventListener gibbet auch ned, KI Kruscht halt ....

screenshot

screenshot

Am besten ist es einen Button anzubringen mit dem die Weiterverarbeitung gestartet werden muss, und hier den Check zu hinterlegen, bzw. in die Felder die Validierung zu hinterlegen und dann mit dem Button den Check aller Formfelder zu triggern.

Gruß catrell
Yan2021
Yan2021 31.10.2024 aktualisiert um 08:00:28 Uhr
Goto Top
Hallo und danke auch Dir @catrell für Deinen Kommentar.

Oh, ich wußte überhaupt nicht, dass KI mittlerweile sogar Script-Code schreiben kann...
Dazu wüßte ich gerne mehr (paßt zwar jetzt nicht in diesen Thread - bin aber für Hinweise dankbar).

An einen Button hatte ich ursprünglich auch schon mal gedacht. Aber das wäre hier nicht gewünscht.
Außerdem füllen eh maximal 30% der User dieses Formular am Computer aus. Die meisten Leute drucken das Teil aus, füllen es dann per Hand aus, scannen es dann wieder ein und senden es uns dann per Email... oder senden es gleich mit der Post.

Daher würde ein Button den Ausfüllvorgang nur verkomplizieren... vorallem, da es auch von Menschen ausgefüllt wird, die sowas einfach nicht so gut können und/oder sich mit Computern nicht so gut auskennen.

Gibt es - außer Button - also keine andere Lösung?
Ich habe ja schon versucht, es nun optisch besser darzustellen, indem ich über diese 3 Punkte noch in großer Schrift in rot und fett und mit hellrotem Hintergrund "Pflichtefelder..." geschrieben habe. Aber auch das sieht man natürlich nicht so gut, wenn man das Formular dann in s/w ausdruckt face-smile

Aber vielleicht habt Ihr ja noch eine gute Idee - ggf. auch über Code hinaus face-wink

Grüße von
Yan face-wink
catrell
catrell 31.10.2024 aktualisiert um 08:03:24 Uhr
Goto Top
Aber vielleicht habt Ihr ja noch eine gute Idee - ggf. auch über Code hinaus face-wink
Web-Formular bauen, das ist Cross-Device funktional. PDFs mit JavaScript werden doch heute überall gefiltert und als größtenteils als potentiell Malware befallen angesehen, außerdem funktioniert es nicht überall.

PDF JavaScript wurde nicht geschaffen um damit ganze Workflows abzubilden, es ist ehrlich gesagt eine Technik von Anno Dazumal.
Yan2021
Yan2021 31.10.2024 um 08:03:41 Uhr
Goto Top
Hallo nochmal und danke für die schnelle Antwort.

Dieses Formular wird nur auf Anforderung versendet. Daher wird es auch nicht als SPAM/Malware angesehen. Wir weisen eh darauf hin, auch den SPAM-Ordner zu kontrollieren, wenn wir es versendet haben.

Webseite war auch schon eine Idee, die wir hatten. Das soll aber erst ab Mitte 2025 umgesetzt werden, da wir eine neue Webseite bekommen, die dann auch sowas kann...

Was meinst Du mit "funktioniert es nicht überall"?
Meinst Du nicht auf jedem Computer? Oder nicht mit jedem PDF-Reader?

Grüße von
Yan face-wink
catrell
catrell 31.10.2024 um 08:05:01 Uhr
Goto Top
Was meinst Du mit "funktioniert es nicht überall"?
Meinst Du nicht auf jedem Computer? Oder nicht mit jedem PDF-Reader?
Ja, Tablet, Smartphone, oder andere Reader machen da größtenteils nicht mit.
Yan2021
Yan2021 31.10.2024 um 08:10:26 Uhr
Goto Top
...ok, verstehe. Aber ich denke eh, dass es so gut wie keiner unserer Clienten per Tablet od. Smartphone ausfüllen wird.
Wie gesagt, machen es (leider!) sehr viele über ausdrucken und per Hand ausfüllen.

Daher ist es vielleicht auch nicht ganz so wichtig.
Ich hatte einfach gedacht, es gäbe eine einfache Lösung für dieses Problem.
Dann müssen wir halt weiterhin damit leben, dass es immer wieder Leute gibt, die diese 3 Felder nicht oder nicht komplett ausfüllen. Dann müssen wir eben nochmal schreiben... nochmal die entspr. Seite des Formulars an die Leute senden und nochmals um Komplettierung bitten. Ist halt unnötig aufwendig face-smile

Danke und Grüße von
Yan face-wink
catrell
catrell 31.10.2024 aktualisiert um 11:10:43 Uhr
Goto Top
Meldung beim Speichern oder Drucken anzeigen geht schon mit obiger Function (ohne die "this.addEventListener" Abschnitte ), aber Abbrechen kannst du diese Vorgänge halt nicht, auch wenn die Felder nicht ausgefüllt sind wird gespeichert oder gedruckt. Du musst nur den Funktionsaufruf (checkRequiredFields();)in den jeweiligen Document Events für Speichern und Drucken aufrufen.
Yan2021
Yan2021 31.10.2024 um 12:20:16 Uhr
Goto Top
Hallo nochmal...

Hmmm... hat nicht funktioniert.
Mein Code sieht jetzt so aus:

function Pflichtfelder()

// pflichtfelder definieren
function checkRequiredFields() {

    var requiredFields = ["Zustimmung 1", "Zustimmung 2", "Zustimmung 3"];    
    var missingFields = [];
    
    // Pflichtfeld pruefen
    for (var i = 0; i < requiredFields.length; i++) {
        var fieldName = requiredFields[i];
        var field = this.getField(fieldName);
        
        // wenn leer -> missingFields 
        if (field.value === "") {    
            missingFields.push(fieldName);
        }
    }
    
    // wenn missingFields gefuellt, breche Vorgang ab (save/print) und gebe MsgBox aus
    if (missingFields.length > 0) {
        app.alert({
            cMsg: "Bitte füllen Sie alle Pflichtfelder aus:\n" + missingFields.join(", "),    
            cTitle: "Unvollständiges Formular",    
            nIcon: 0
        });
        return false; // Wird abgebrochen
    }
    
    return true; //alles gut, weiter gehts
    }

Oder habe ich darin was vergessen oder sonst etwas falsch gemacht?
Die "this.addEventListener" habe ich entfernt.

Grüße von
Yan face-wink
catrell
catrell 31.10.2024 aktualisiert um 12:25:17 Uhr
Goto Top
Jepp ist falsch Function in Function geschachtelt und ohne führende und abschließende Klammer kann so niemals laufen.
Zudem fehlen die Aufrufe der Funktion selbst in den Document Events.
catrell
catrell 31.10.2024 aktualisiert um 12:33:55 Uhr
Goto Top
screenshot

screenshot

screenshot

Hmmm... hat nicht funktioniert.
Funktioniert eben doch :-P.
Yan2021
Yan2021 31.10.2024 um 12:55:54 Uhr
Goto Top
oh, das sieht doch mal gut aus face-smile

Könntest Du den Code hier mal als kopierbaren Code einstellen?
Dann muss ich das nicht alles abtippen...

Grüße von
Yan face-wink
catrell
catrell 31.10.2024 aktualisiert um 13:03:26 Uhr
Goto Top
Musst doch nur Zeile 1-29 von oben kopieren. Ins Dokument einfügen und in die separaten Events nur jeweils checkRequiredFields(); eintragen, das bekommst du auch noch selbst getippt ;-P.
Die XML Tags erstellt Acrobat ja von selbst die brauchst du nicht abtippen.

Vom selbst tippen lernt man, von Copy n Paste nicht face-smile.
Yan2021
Yan2021 31.10.2024 um 14:12:45 Uhr
Goto Top
Hmmm... hat noch immer nicht geklappt face-sad
Habe den Code "checkRequiredFields();" jetzt bei den "Dokumentationen" eingesetzt bei speichern und drucken, so wie Du es auch gemacht hast. Aber es tut sich überhaupt nichts, wenn ich speichere oder drucke.

Aber vielleicht lasse ich es jetzt auch...

Du scheinst auch irgend eine andere Version zu haben, denn bei mir sehen manche Fenster anders aus und die Bezeichnungen sind auch anders.

Grüße von
Yan face-wink
catrell
catrell 31.10.2024 um 14:13:44 Uhr
Goto Top
CTRL + J drücken und Fehlermeldungen in der Konsole lesen hilft ....
Yan2021
Yan2021 31.10.2024 um 15:30:14 Uhr
Goto Top
OK, habe ich gemacht.

Dort steht:

ReferenceError: checkRequiredFields is not defined
1:Doc:Will Save
ReferenceError: checkRequiredFields is not defined
1:Doc:Will Print
ReferenceError: checkRequiredFields is not defined
1:Doc:Will Save
ReferenceError: checkRequiredFields is not defined
1:Doc:Will Save

Und hier mal ein Screenshot von den "Dokument-Aktionen":

dokument-aktionen

Grüße von
Yan face-wink
catrell
catrell 31.10.2024 aktualisiert um 16:18:33 Uhr
Goto Top
Oh man wie kann man nur so GUI verblendet sein ... Buttons sind halt minimal an anderer Stelle wie in jeder Acrobat Ausgabe, weil sie es mal wieder wo anders haben wollen. Aber am Ende ist da immer noch die selbe GUI und Funktionsweise dahinter!

Du hast die eigentliche Funktion vergessen anzulegen oder die Funktion falsch benannt oder einen Tippfehler (Javascript ist case sensitive!) ...

screenshot

Gesamtübersicht aller Anweisungen:

screenshot

Einzelansicht der Aufrufe in den Events

screenshot

Works as designed!!!

screenshot

Wenn du nur in der Lage für Copy n Paste bist, das hier in "Alle JavaScript-Anweisungen" einfügen und fertig ...

//-------------------------------------------------------------
//-----------------Bearbeiten Sie nicht die XML-Tags--------------------
//-------------------------------------------------------------

//<Document-Level>
//<ACRO_source>checkRequiredFields</ACRO_source>
//<ACRO_script>
/*********** gehört zu: Document-Level:checkRequiredFields ***********/
function checkRequiredFields() {
    var requiredFields = ["Zustimmung 1", "Zustimmung 2","Zustimmung 3"];    
    var missingFields = [];
    
    // Pflichtfeld pruefen
    for (var i = 0; i < requiredFields.length; i++) {
        var fieldName = requiredFields[i];
        var field = this.getField(fieldName);
        
        // wenn leer -> missingFields 
        if (field.value === "") {    
            missingFields.push(fieldName);
        }
    }
    if (missingFields.length > 0) {
        app.alert({
            cMsg: "Bitte füllen Sie alle Pflichtfelder aus:\n" + missingFields.join(", "),    
            cTitle: "Unvollständiges Formular",    
            nIcon: 0
        });
        return false;
    }
    return true;
}
//</ACRO_script>
//</Document-Level>

//<Document-Actions>
//<ACRO_source>Speichert Dokument </ACRO_source>
//<ACRO_script>
/*********** gehört zu: Document-Actions:Speichert Dokument  ***********/
checkRequiredFields();
//</ACRO_script>
//</Document-Actions>

//<Document-Actions>
//<ACRO_source>Druckt Dokument</ACRO_source>
//<ACRO_script>
/*********** gehört zu: Document-Actions:Druckt Dokument ***********/
checkRequiredFields();
//</ACRO_script>
//</Document-Actions>

Also jetzt bekommt das selbst ein Affe hin.

So etwas habe ich in einem Admin-Forum jetzt echt noch nicht erlebt ...🤔

Ich bin raus.
Yan2021
Yan2021 04.11.2024 aktualisiert um 09:16:31 Uhr
Goto Top
@catrell

Danke Dir für die Mühe.
Das Problem war am Ende relativ einfacher Natur.
Ich hatte grds. alles richtig gemacht... nur einen dummen Fehler.

Ich hatte nämlich im PDF-Dokument bei "JavaScript-Anweisungen für Dokumente" den Namen "Pflichtfelder" vergeben, statt "checkRequiredFields"... habe aber dann im Code diesen Namen nicht entsprechend getauscht.

Daher konnte natürlich "checkRequiredFields" auch nicht gefunden werden face-wink
Danke also für Deine Geduld und ich habe nun auch ne Menge gelernt!


Ich will aber am Ende dennoch auch mal was zu Deinem vorletzten Satz sagen:

Das hier ist zwar ein Admin-Forum, aber hier schreiben ja nicht nur Admins.
Ich bin kein Admin!!! Und das habe ich hier schon oft erklärt und beschrieben, da ich immer wieder hier runtergemacht werde, weil ich vielleicht Fragen stelle, die für andere von Euch "Peanuts" sind.

Eigentlich möchte ich mich nicht ständig rechtfertigen müssen. Aber ich bin hier einer von 12!!! Mitarbeitern (w/m) und wir sind eine kleine Organisation, die auf Spenden angewiesen ist. Daher können wir uns auch keinen "echten" Admin leisten. Wir hatten mal Jemanden, der die EDV offiziell betreut hat. Der ist aber seit 2021 nicht mehr hier (wurde gekündigt).

Da ich noch jemand bin, der sich wenigstens ein bisschen mit EDV auskennt, bekam ich den "schwarzen Peter" zugeschoben nach dem Motto "übernimm Du mal die EDV". Tja... und dann gings los und am Anfang hatte ich so gut wie Null Ahnung, was ich hier überhaupt machen muss. Genau deshalb habe ich dann dieses Profil hier bei "Administrator.de" erstellt, um eben Fragen zu stellen, die ich unmöglich selbst lösen kann.

OK... vielleicht habe ich jetzt mal ein bisschen aufklären können, warum ich manchmal vielleicht Fragen stelle, die für andere blöde sind oder was weiß ich...

Danke jedenfalls und Grüße von
Yan face-wink
Yan2021
Yan2021 04.11.2024 aktualisiert um 13:21:44 Uhr
Goto Top
...und ob Du es glaubst oder nicht...
Es funktioniert bei mir noch immer nicht face-sad

Nach dem ersten erfolglosen Versuch, habe ich den kompletten Code "Alle JavaScript-Anweisungen" bei mir einkopiert, den Du ja hier nochmal eingestellt hattest. Aber auch damit geht es nicht.

Egal ob ich das PDF normal speichere oder über "speichern unter" speichere... es wird gespeichert, ohne dass ein Fenster erscheint. Und beim Drucken ist es genauso... kein Fenster erscheint.

Habe mir eben mal die Eigenschaften der 3 Pflichtfelder angeschaut. Hier ist bei den Allg. Eigenschaften "Erforderlich" angehakt. Das dürfte ja auch richtig sein, denke ich.

Keine Ahnung, wo da noch der Unterschied zu Deinem Dokument sein soll, was ja offenbar funktioniert.

Vielleicht kannst Du mir Dein Test-Formular ja mal irgendwo hochladen, damit ich es mir mal anschauen kann. Ich kann das orig. Dokument nicht hochladen, da ich nicht möchte, dass meine Arbeitsstelle bekannt wird.

Grüße von
Yan face-wink