Drucken von dynamischen Formularen bei Seitenerweiterung

Alles was sich mit dem Thema dynamische XML Formulare auf Basis des LiveCycleDesigners beschäftigt
Antworten
klazauber
Beiträge: 42
Registriert: 13.01.2014, 14:51

Drucken von dynamischen Formularen bei Seitenerweiterung

Beitrag von klazauber » 13.04.2023, 11:47

Hallo Acronauten,

Anbei habe ich ein Formular angefügt, welches zunächst einseitig daher kommt.
-DD auswahl einer Seite(n) weitere Seiten werden angezeigt.
-Druck anstoßen (dank der Hilfe von radzmar!!! an anderer Stelle)

Funktioniert perfekt.

Da es aber ein dynamisches Formular ist, bekommt der Anwender Probleme, wenn eine der Seiten sich erweitert und weitere Seiten hinzugefügt werden.
Da die einzelnen Druckbuttons (offensichtlich) nur für statische Formulare ausgelegt sind, werden die zusätzlich erstellten Seiten beim Druck natürlich nicht berücksichtigt und nicht gedruckt.

Kann man die Druckbuttons eventuell irgendwie dem anpassen und wenn, wie?
Danke für einen Tip
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

klazauber
Beiträge: 42
Registriert: 13.01.2014, 14:51

Re: Drucken von dynamischen Formularen bei Seitenerweiterung

Beitrag von klazauber » 15.04.2023, 16:33

Hallo an alle Acronauten,

ein zweites Problem hat sich ergeben(siehe 2.Datei):

wenn ich im DropdownFeld die Auswahl "S3" auswähle, erscheint ein zweiter Druckbutton. Dieser funktioniert auch
und Öffnet das Druckmenü des Acrobat Reader derart, das bereits der Druck auf dem "Microsoft Print to PDF"
eingestellt ist.

Das soll auch so sein!

Wenn ich in dann die Datei "gedruckt " habe, "merken" sich aber alle anderen Druckschaltflächen das und geben nicht mehr das ursprüngliche Script wieder, (drucken mit dem Standarddrucker) sondern wollen ebenfalls mit dem "Microsoft Print to PDF" weiterdrucken.

Wie kann ich das ändern???

Gruss klazauber
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
radzmar
Beiträge: 961
Registriert: 26.10.2011, 10:18

Re: Drucken von dynamischen Formularen bei Seitenerweiterung

Beitrag von radzmar » 24.04.2023, 20:27

Also um einfach nur immer alle Seiten zu drucken, kannst Du einfach das Skript einer Standard-Drucken-Schaltfläche benutzen …

Code: Alles auswählen

xfa.host.print(1, "0", (xfa.host.numPages -1).toString(), 0, 0, 0, 0, 0);
… oder du lässt einfach den Teil mit der printRange weg.

Code: Alles auswählen

var pp = event.target.getPrintParams(); 
pp.interactive = pp.constants.interactionLevel.full; 
event.target.print(pp);
Das Thema mit dem Druckernamen ist schwieriger. Der Reader merkt sich den zuletzt benutzen Druckernamen und eine Methode, den Standarddrucker zu identifizieren, gibt es nicht. Bleibt nur den Druckernamen vor dem Drucken auf „Microsoft Print to PDF“ zu ermitteln und irgendwo zwischen zu speichern, z.B. einem versteckten Feld.

Code: Alles auswählen

var pp = this.getPrintParams();
Feld.rawValue = pp.printerName !== "Microsoft Print to PDF" ? pp.printerName : "";
Beim nächsten Drucken über eine Schaltfläche prüft man dann, ob der derzeit ausgewählte Drucker noch „Microsoft Print to PDF“ heißt und ersetzt dieses dann ggf. mit dem zwischengespeicherten Druckernamen.

Code: Alles auswählen

var pp = this.getPrintParams(); 
if (pp.printerName ===  "Microsoft Print to PDF") {
    pp.printerName = Feld.rawValue;
}
pp.interactive = pp.constants.interactionLevel.full; 
event.target.print(pp);
}

klazauber
Beiträge: 42
Registriert: 13.01.2014, 14:51

Re: Drucken von dynamischen Formularen bei Seitenerweiterung

Beitrag von klazauber » 12.05.2023, 14:43

Hallo Marcus,
danke das Du Dich meiner Problematik gewidmet hast und sorry, dass ich mich erst jetzt melde, war einige Zeit nicht online.
Zum Druckthema: Die Variante mit dem Standard print Befehl ist mir bekannt, leider geht es ja eben darum, so wie in den (zahlreichen unterschiedlichen) Druckbutton hinterlegt, dem Drucker die Parameter zur Anzahl der zu druckenden Kopien mitzuteilen. Mit dem Standard Skript druckt er ja das ganze sichtbare Dokument einmal. Zudem die erste Seite bei mir quasi der „Datenträger“ für alle anderen Formularseiten ist, von wo aus diese befüllt werden!
Mit dem Skript
var pp = event.target.getPrintParams();
pp.interactive = pp.constants.interactionLevel.full;
pp.printRange=[[1, 1],[1, 1],[2, 2],[3, 3],[2, 2],[3, 3],[4, 4]]; (nur beispielsweise)
event.target.print(pp);

im click event des Druckbutton lässt er die 1 Seite aus und die anderen werden in der erforderlichen Anzahl gedruckt. Das soll auch so bleiben.
Wenn dann aber die „Dynamik sich entfaltet“ und sich eine Seite auf Grund des Inhalts auch erweitert, stimmt die printRange nicht mehr und es fehlen Seiten am Ende des Dokuments…
Kann das irgendwie behoben werden?

Zum Thema „zurück zum Standarddrucker“habe ich nicht ganz verstanden wie ich den
Druckernamen „vor dem Drucken auf „Microsoft Print to PDF““ ermitteln soll (im preprint?),
dass In einem versteckten Feld (Textfeld? das unsichtbar ist) speichern soll, und dann beim nächsten Drucken (Druckschaltfläche mit dem Skript)

vermutlich dann im click event?

var pp = this.getPrintParams();
if (pp.printerName === "Microsoft Print to PDF") {
pp.printerName = Feld.rawValue;
}
pp.interactive = pp.constants.interactionLevel.full;
event.target.print(pp);
} (muss die letzte Klammer weg?)

prüft, ob der eingetragene Drucker noch der von Windows sich gemerkte Drucker ist (prüft er das in dem Feld.rawValue? dass das unsichtbare Textfeld ist?) und diesen dann mit dem zwischengespeicherten ersetzt?
Bedeutet das, das in dem unsichtbaren Feld (Textfeld?) der Standarddrucker Namen hinterlegt ist?
Sorry das ich das so kompliziert formuliere… Gibt es trotzdem eine Chance es zu lösen? Schlimmstenfalls muss der Nutzer eben im Druckmenü umstellen; aber schöner wäre es schon, wenn der Ausgangszustand irgendwie erreicht werden kann.
Vielen Dank für Deine Unterstützung Marcus!

Benutzeravatar
radzmar
Beiträge: 961
Registriert: 26.10.2011, 10:18

Re: Drucken von dynamischen Formularen bei Seitenerweiterung

Beitrag von radzmar » 16.05.2023, 20:33

Also um das zu bewerkstelligen, musst Du ermitteln, auf welcher Seite ein Objekt beginnt und wieviele Seiten es überspannt. Dafür gibt es passende Methoden. Hier ein Beispiel.

Code: Alles auswählen

// Anfangs- und Endsseite von Teilformular S2 ermitteln
var nRangeStart = xfa.layout.absPage(xfa.form.Formular1.S2),
    nRangeEnd = nRangeStart + xfa.layout.absPageSpan(xfa.form.Formular1.S2) - 1;

Antworten