hilfdirselbst.ch
Facebook Twitter gamper-media

PlugIns, XTensions und Knowhow: Publishing-Worker.com

Sanes
Beiträge: 6
15. Feb 2010, 08:20
Beitrag #1 von 15
Bewertung:
(19415 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Hallo Leute,

Nun ich habe hier ein PDF mit einem Simplen Formular (Name etc) und möchte dass wenn ich auf eine Schaltfläche "Ausdrucken" drücke dass kontrolliert wird ob alles ausgefüllt ist bevor es druckt.

In den Eigenschaften habe ich im Reiter "Aktionen" bei "Maus Loslassen" den Menübefehl "Datei>Drucken" aber es müsste erst kontrollieren ob alle Felder ausgefüllt sind, so wie beim Speichern. (Beim speichern klappts, da ich alle Felder als Pflichtfelder markiert habe) aber meinen Druck-Schalter interessiert das nicht.

Ist das irgendwie machbar? Per Java-script?

Ich arbeite mit Adobe Acrobat 9 Pro Extended.

Danke!
Top
 
X
Max Wyss
Beiträge: 532
25. Feb 2010, 18:35
Beitrag #2 von 15
Beitrag ID: #434749
Bewertung:
(19249 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Das geht via JavaScript.

Aber, es ist zu beachten, dass eine hundertprozentige Sicherheit gegen das Ausdrucken unvollständig ausgefüllter Formulare nicht gegeben ist (es sei denn, der Druckbefehl würde in Acrobat selbst abgefangen.

Was geht, ist das Erstellen eines grossen, schönen "Print me"-Buttons, bei welchem die hinterlegte Aktion erst kontrolliert, ob alles korrekt ausgefüllt ist, und erst dann den Druckbefehl auslöst.

Wenn die anderen Methoden des Druckens (Menubefehl, Toolbutton, Tastaturkürzel) auch abgefangen werden müssen, gibt es das WillPrint-Event. Hier kann eine Valididerung vorgenommen werden, ABER der Druckvorgang kann nicht mehr gestoppt werden. Was hier noch möglich ist, wäre das Einblenden eines Overlays "unvollständiges Formular" oder ähnlich, welches visuell anzeigt, dass das Formular unvollständig ist).

HTH.
als Antwort auf: [#433607] Top
 
taunus11
Beiträge: 526
25. Feb 2010, 22:37
Beitrag #3 von 15
Beitrag ID: #434770
Bewertung:
(19231 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Antwort auf [ Sanes ] Beim speichern klappts, da ich alle Felder als Pflichtfelder markiert habe

Formulare, die nicht vollständig ausgefüllt sind, lassen sich speichern.
als Antwort auf: [#433607] Top
 
Sanes
Beiträge: 6
26. Feb 2010, 10:19
Beitrag #4 von 15
Beitrag ID: #434798
Bewertung:
(19203 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Hi Max, vielen Dank für deine Antwort.

Das ist genau was ich erreichen will.
Ich habe einen "Drucken" Button und wenn man dort draufklickt soll ein JavaScript ausgeführt werden das:

1. Kontrollieren ob alle Felder ausgefüllt
2. Wenn ja -> Drucken
3. Wenn nein -> Meldung "Bitte alle Felder ausfüllen" oder so.

Das mit dem Button hab ich alles hingekriegt, aber wie ich die Abfrage erstelle dass er das kontrolliert schaff ich nicht.

Code
if Alle Felder sind ausgefüllt == "1") 
{
Drucken!
}
else
{
(app.alert("Bitte füllen Sie alle Felder aus!", 1, 0, ));
}


Und genau bei den Roten teilen liegt mein Problem. Ich weiss nicht wie ich das hinbekommen soll.

Code
doc.print() 

und

Code
document.all.pdfFile.print() 

wollen bei mir nicht funktionieren.

und wie ich kontrolliere ob alle Felder ausgefüllt sind (Es sind viele) .. k.A

Und die Will-Print Aktion ist nicht so wichtig, es geht hauptsächlich um den Button.

Hoffentlich kann mir einer helfen.

Vielen Dank, Sanes
als Antwort auf: [#434749] Top
 
Uwe Laubender S
Beiträge: 4039
26. Feb 2010, 14:03
Beitrag #5 von 15
Beitrag ID: #434833
Bewertung:
(19185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Hallo, Sanes!
Probiere mal das Drucken mit:

Code
app.doc.print(); 


Bei Deiner if-Anweisung kann ich Dir leider nicht weiterhelfen.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#434798] Top
 
MurphysLaw
Beiträge: 588
26. Feb 2010, 15:43
Beitrag #6 von 15
Beitrag ID: #434852
Bewertung:
(19167 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Hi Sanes,

das hier sollte klappen:
Code
allgood(); 
function allgood()
{
var mel;
mel=""
for (var i=0;i<this.numFields;i++)
{
var fName=this.getNthFieldName(i);
var f=this.getField(fName);
if ((f.type != "button") && (f.value.length<1))
{
mel=mel + fName + ", ";
}
}
if (mel==""){
app.doc.print();
}
else
{app.alert("Vor dem Drucken bitte noch folgende Felder ausfüllen: " + mel);
}
}


Hilft det?
:-)

Grüße,
Murphy

________________________________________

Die letzte Stimme, die man hört, bevor die Welt explodiert, wird die Stimme eines Experten sein, der sagt: Das ist technisch unmöglich! (Sir Peter Ustinov)
als Antwort auf: [#434798] Top
 
Sanes
Beiträge: 6
1. Mär 2010, 08:12
Beitrag #7 von 15
Beitrag ID: #434956
Bewertung:
(19114 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Uwe Laubender:
Danke du hast recht ich hab mich da wohl i-wo verlesen :)

MurphysLaw:
Vielen Dank du hast mir sehr geholfen! Der Code funktioniert so gut wie perfekt!
Nun gibt es noch ein Problem... :P
Es sind leider nicht alles Pflichtfelder zb. "2er Name (Optional)" und wenn jemand keinen hat dann soll er ja trotzdem drucken können.

Ich denke ich sehe ca. wie der Code aussehen müsste, bzw abgeändert, ich kann das auch alles machen aber ein kleiner Lösungsansatz wie ich es mit der Syntax hinbekomme wär nicht schlecht :D

Also wenn ich das richtig sehe muss die For-Schleife durch eine normale if / else Abfrage für jedes einzelne Pflichtfeld ersetzen?

Andere Idee:
Die Felder sind einer Zahl zugewiesen? du zählst ja hoch in deiner For-Schleife, kann ich sagen "Wenn i = 2 dann nicht beachten" oder ähnlich?

ich hab an diese Erweiterung gedacht:

Code
if ((f.type != "button") && (f.value.length<1) && (i != 2)) 


denke(hoffe) das würde klappen. ich versuch das mal. nun sind es aber gut .. 10-15 optionale felder, muss das dann so aussehen??


Code
if ((f.type != "button") && (f.value.length<1) && (i != 2) && (i != 4) && (i != 6) && (i != 8) && (i != 10) 


oder kann man das auch so aufbauen?

Code
if ((f.type != "button") && (f.value.length<1) && (i != 2, 4, 6, 8, 10)) 


(2, 4, 6, 8 und 10 sind optionale felder!)

Hoffe jemand kann mir helfen :) wäre sehr dankbar!

Edit:

Gäbe es vllt ein f.Pflichtfeld oder ähnlich? Dann könnte man das ja so machen:

Code
if ((f.type != "button") && (f.value.length<1) && (i = f.Pflichtfeld)) 


Das wär ja am einfachsten.
als Antwort auf: [#434852]
(Dieser Beitrag wurde von Sanes am 1. Mär 2010, 08:20 geändert)
Top
 
Uwe Laubender S
Beiträge: 4039
1. Mär 2010, 09:13
Beitrag #8 von 15
Beitrag ID: #434962
Bewertung:
(19102 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Hallo, Sanes!
Die Frage ist, in welcher Reihenfolge die Felder in der for-Schleife angesprochen werden: nach der Reihenfolge der Erstellung? Dann hast Du so eher keine Chance, die Optionsfelder auszunehmen, wenn Du die Datei für spätere Änderungen flexibel halten willst.
Was, wenn Du zwischendrin noch an einem Feld etwas änderst? Wird das Feld dann von der for-Schleife als Index 0 erkannt, es hatte aber vorher einen anderen Index?

Nach Tab-Reihenfolge? (Ich weiß es einfach nicht, hab' im Moment auch keine Zeit das zu testen…)

Du könntest natürlich versuchen die Namen der Felder über die for-Schleife in ein Array zu schreiben, und dann anschließend das Array auswerten, um nur mit den benötigten Feldnamen zu arbeiten. Nur so 'ne Idee…

Und zu Deinen Code-Vorschlägen: probier's doch einfach mal aus.
*****
Mit herzlichem Gruß,
Uwe Laubender
als Antwort auf: [#434956] Top
 
Sanes
Beiträge: 6
1. Mär 2010, 09:27
Beitrag #9 von 15
Beitrag ID: #434966
Bewertung:
(19098 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Vielen Dank für die schnelle Antwort!

Du hast Recht, wenn ich ein neues erstelle und das kriegt dann den Index 0 dann werden alle um 1 verschoben und es geht nix mehr :(

das mit dem if i f.Pflichtfeld sollte ja klappen. aber ist es wirklich "f.Pflichtfeld"? glaube nicht .. weiss einer wie die Variable ... konstante (was auch immer?) ^^ heisst die bestimmt ob Erforderlich True/False ist.

danke
als Antwort auf: [#434962] Top
 
Sanes
Beiträge: 6
1. Mär 2010, 10:42
Beitrag #10 von 15
Beitrag ID: #434975
Bewertung:
(19081 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Code
if ((f.type != "button") && (f.value.length<1) && (f.required = True)) 


klappt nicht
als Antwort auf: [#434966] Top
 
MurphysLaw
Beiträge: 588
1. Mär 2010, 11:56
Beitrag #11 von 15
Beitrag ID: #434984
Bewertung:
(19068 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Antwort auf [ Sanes ]
Code
if ((f.type != "button") && (f.value.length<1) && (f.required = True)) 


klappt nicht

Klappt nur deshalb nicht, weil einfaches "=" ein zuweisen ist. Der logische Vergleich funzt mit doppelt:
Code
if ((f.type != "button") && (f.value.length<1) && (f.required == True)) 

Du kannst das "=" aber auch ganz weglassen und den impliziten TRUE/False Wert von "required" verwenden:
Code
if ((f.type != "button") && f.required && (f.value.length<1)) 


;-)

Grüßle,
Murphy

________________________________________

Die letzte Stimme, die man hört, bevor die Welt explodiert, wird die Stimme eines Experten sein, der sagt: Das ist technisch unmöglich! (Sir Peter Ustinov)
als Antwort auf: [#434975] Top
 
Sanes
Beiträge: 6
1. Mär 2010, 14:56
Beitrag #12 von 15
Beitrag ID: #435024
Bewertung:
(19045 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Es hat jetzt geklappt!
Vielen Dank für die nette Unterstützung!
Hier mein Code

Code
kontrollieren(); 
function kontrollieren()
{
var feld;
feld=""
for (var i=0;i<this.numFields;i++)
{
var fName=this.getNthFieldName(i);
var f=this.getField(fName);
if ((f.type != "button") && (f.value.length<1) && (f.RequiredLevel != 1))
{
feld=feld + fName + "\n";
}
}
if (feld==""){
app.doc.print();
}
else
{app.alert("Bitte füllen sie vor dem Drucken alle Pflichtfelder aus.\nFehlende Felder:\n\n" + feld);
}
}

als Antwort auf: [#433607] Top
 
Max Wyss
Beiträge: 532
6. Mär 2010, 11:16
Beitrag #13 von 15
Beitrag ID: #435567
Bewertung:
(18953 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Ich möchte den Weg über ein Array, welches die Namen der Pflichtfelder enthält, wirklich hervorheben. Das ganze vereinfacht sich hierdurch sehr stark, da wir nicht mehr sämtliche Felder abarbeiten müssen, und die required Eigenschaft auch nicht bemühen müssen (diese Eigenschaft ist spezifisch für das Übermitteln von Daten gemacht worden, und könnte uns einen grossen Streich spielen (wenn wir übermitteln wollen).

Ein Array lässt sich auch zu Laufzeit dynamisch erweitern (und reduzieren). Damit ist auch der Fall abgefangen, wenn irgend ein "anderes" genauer angegeben werden soll.

Die Prüfschleife sieht dann in etwa so aus:

var fehlercounter = 0 ;
for (var i = 0 ; i < pflichtarr.length ; i++) {
if (this.getField(pflichtarr).value == this.getField(pflichtarr.defaultValue) {
fehlercounter++ ;
}
}

if (fehlercounter == 0) {
// Drucken
} else {
// Warnung
}


Dieser Weg bietet auch wesentlich mehr Flexibilität beim Erweitern und Wiederverwenden des Formulars.


HTH.
als Antwort auf: [#434962] Top
 
Glaha
Beiträge: 4
18. Mai 2017, 09:23
Beitrag #14 von 15
Beitrag ID: #557518
Bewertung:
(5845 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Hi,
ich hab hier euren sehr Hilfreichen Code gefunden.

Der läuft auch soweit.

Frage: Habt ihr das Problem gelöst, dass er alle Felder als Pflichtfelder erkennt?

Wenn ja, könntet ihr mir sagen wie?

Ich hab leider keine Ahnung für Javascript - Nicht genug um sowas zu erstellen. Möchte aber ein Formular entspreched bearbeiten.

Vielen herzlichen Dank :-)
als Antwort auf: [#435567] Top
 
taunus11
Beiträge: 526
18. Mai 2017, 10:19
Beitrag #15 von 15
Beitrag ID: #557525
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

PDF nur drucken wenn alle Felder ausgefüllt?


Pflichtfelder erkennt man an der Eigenschaft required.
als Antwort auf: [#557518] Top
 
X