hilfdirselbst.ch
Facebook Twitter gamper-media

PlugIns, XTensions und Knowhow: Publishing-Worker.com


Forenindex » Programme » Web/Internet » PDF Grundlagen/Web/eForms » PDF nur drucken wenn alle Felder ausgefüllt?

 



Sanes
Beiträge: 6

15. Feb 2010, 08:20

Beitrag #1 von 13
Bewertung:

(2825 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

Max Wyss
Beiträge: 466

25. Feb 2010, 18:35

Beitrag #2 von 13
Beitrag ID: #434749

Bewertung:

(2661 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: 316

25. Feb 2010, 22:37

Beitrag #3 von 13
Beitrag ID: #434770

Bewertung:

(2646 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 13
Beitrag ID: #434798

Bewertung:

(2618 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: 1848

26. Feb 2010, 14:03

Beitrag #5 von 13
Beitrag ID: #434833

Bewertung:

(2600 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: 443

26. Feb 2010, 15:43

Beitrag #6 von 13
Beitrag ID: #434852

Bewertung:

(2582 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 13
Beitrag ID: #434956

Bewertung:

(2529 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: 1848

1. Mär 2010, 09:13

Beitrag #8 von 13
Beitrag ID: #434962

Bewertung:

(2517 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 13
Beitrag ID: #434966

Bewertung:

(2513 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 13
Beitrag ID: #434975

Bewertung:

(2496 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: 443

1. Mär 2010, 11:56

Beitrag #11 von 13
Beitrag ID: #434984

Bewertung:

(2483 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 13
Beitrag ID: #435024

Bewertung:

(2460 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: 466

6. Mär 2010, 11:16

Beitrag #13 von 13
Beitrag ID: #435567

Bewertung:

(2368 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


Forenindex » Programme » Web/Internet » PDF Grundlagen/Web/eForms » PDF nur drucken wenn alle Felder ausgefüllt?


^