• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] PDF Formular mit 4 verschachtelten Funktionen

stormforce

New member
Hallo zusammen

Nach Monaten bin ich nun um ein Programm reicher und habe die Möglichkeit PDF Formulare selber zu erstellen.
Dabei habe ich am Ende des Dokumentes einen Button, der einen JS Programm Code enthält, welcher aber leider nicht richtig funktioniert.
bei der Angehängten PDF Datei ist es der grosse Button auf der erste Seite.

Folgende Ausgangslage:

Ich habe ein PDF File erzeugt, welches Ihr im Anhang findet.
Anhang anzeigen Service report 4 single function.pdf
dies dient nur zum Test, birgt aber alle nötige Voraussetzungen für einen erfolgreichen Test.

1. Ziel:
alle 3 Seiten als Formular unter irgendeinem Pfad abspeichert. (funktioniert einwandfrei)
Code:
this.saveAs("/f/Firma/Allgemeines/Service Rapport/TestReport/" + this.getField("AuftragsNr").value + ".pdf");
2. Ziel:
Erste Seite vom Dokument extrahieren und weiterverarbeiten. (funktioniert einzel)
Code:
this.extractPages({
nStart: 0,
nEnd: 0, 
cPath: "/f/Firma/Allgemeines/Service Rapport/PDFKunde/" + this.getField("MaschineNr").value + ".pdf"
});

3. Ziel:
die Felder auf der extrahierte Seite auf readonly schalten. (funktioniert einzel)
Code:
for (var i=0; i<this.numFields; i++) {
    var f = this.getField(this.getNthFieldName(i));
    if (f==null) continue; 
    f.readonly = true;
}

4. Ziel:
Mail an CustomerMail mit vorgefertigtem Text im Betreff und dem Text.
zusätzlich das 1 seitige extrahierte,, schreibgeschützte Dokument als Anhang. (Mail funktioniert einwandfrei, allerdings ist der Anhang nie schreibgeschützt und 1-seitig.
Code:
try
{
   var myDoc = event.target;
   var cToAddr = this.getField("CustomerMail").value;
   var cSubLine = "Service Report of Intervention at " + this.getField("MaschineType").value + "-" + this.getField("MaschineNr").value ;
   var cBody = "Guten Tag" + "\n";
     cBody += "Im Anhang erhalten Sie den Raport vom folgenden Einsatz.\n\n";
     cBody += "Auftragsnummer: " + this.getField("AuftragsNr").value + "\n";
     cBody += "Maschine: " + this.getField("MaschineType").value + "\n";
     cBody += "Seriennummer: " + this.getField("MaschineNr").value + "\n";
     cBody += "Techniker: " + this.getField("Techniker").value + "\n\n";
     cBody += "Bei Fragen sind wir gerne für Sie da.\n";
   this.mailDoc({bUI:false, cTo:cToAddr, cCc:"", cSubject:cSubLine, cMsg:cBody});
} catch(e){app.alert(e)}

Ich habe knapp 8h damit verbracht Möglichkeiten zu suchen, wie es funktionieren könnte, und vermutlich irgendwie mit variablen, die abgespeichert werden und dann wieder abgerufen.
leider konnte ich aber nicht mal 2 der 4 Ziele miteinander verbinden. Ich vermute es liegt an dem this.xxx nur bin ich kein geborender Programmieren und dies sind meine ersten Gehversuche in JS.

Möglichkeiten sind alle offen, sofern alles über einen Button läuft.
Das einseitige, nicht editierbare Dokument kann auch irgendwo gespeichert werden.

folgend seht Ihr noch denn Quellcode, denn ich bereits geschrieben habe.
Code:
1//this.saveAs("/f/Firma/Allgemeines/Service Rapport/TestReport/" + this.getField("AuftragsNr").value + ".pdf");


2//this.extractPages({
//nStart: 0,
//nEnd: 0, 
//cPath: "/f/Hapa/Allgemeines/Service Rapport/PDFKunde/" + this.getField("MaschineNr").value + ".pdf"
//});


3//for (var i=0; i<this.numFields; i++) {
//    var f = this.getField(this.getNthFieldName(i));
//    if (f==null) continue; 
//    f.readonly = true;
//}


4//try
//{
//    var myDoc = event.target;
//   var cToAddr = this.getField("CustomerMail").value;
//  var cSubLine = "Service Report of Intervention at " + this.getField("MaschineType").value + "-" + this.getField("MaschineNr").value ;
//  var cBody = "Guten Tag" + "\n";
//  cBody += "Im Anhang erhalten Sie den Raport vom folgenden Einsatz.\n\n";
//    cBody += "Auftragsnummer: " + this.getField("AuftragsNr").value + "\n";
//    cBody += "Maschine: " + this.getField("MaschineType").value + "\n";
//    cBody += "Seriennummer: " + this.getField("MaschineNr").value + "\n";
//    cBody += "Techniker: " + this.getField("Techniker").value + "\n\n";
//    cBody += "Bei Fragen sind wir gerne für Sie da.\n";
//   this.mailDoc({bUI:false, cTo:cToAddr, cCc:"", cSubject:cSubLine, cMsg:cBody});
//} catch(e){app.alert(e)}

natürlich habe ich alles ohne die Bemerkungszeichen verwendet. :)

Ich wäre froh, wenn mir jemand weiterhelfen könnte, da ich mit meinem Latein ziemlich am Ende bin, und auch niemanden gefunden habe der mit weiterhelfen kann.


Besten Dank und freundliche Grüsse

Stefan Lüdi
 
Zuletzt bearbeitet:
2. Funktioniert nicht, da du das einseite PDF ja erst öffnen müsstest und dann dieses mit this.mailDoc versenden müsstest. Ev. kann man das neue PDF öffnen und dann auch darauf zugreifen, aber dazu müsstest du nochmal in die Doku schauen.
3. Funktioniert nicht, da du ja nur temporär die Eigenschaften der Felder änderst. Ich weiß nicht, ob das gespeichert wird, wenn du das PDF speicherst, aber das wäre der einzige Weg. Woher soll denn sonst das Mailprogramm die geänderte Datei lesen?
 
Hallo kkapsner

Danke für die Information.

2. Das Formular darf beliebig oft gespeichert werden, solange am Ende die erste Seite readonly als Anhang im E-Mail liegt.
Zu der Problemstellung habe ich folgendes gefunden:
Code:
this.saveAs("/d/in/copy.pdf"); 
var otherDoc = app.openDoc("/d/in/copy.pdf");  
otherDoc.deletePages(0,19); 
otherDoc.deletePages(13,131); 
otherDoc.saveAs("/d/in/myNewDoc2.pdf"); 
otherDoc.closeDoc(true);

wenn ich statt das deletepages einfach extractpages nehmen könnte, hätte ich ja das Dokument mit nur einer Seite.
Und irgendwie so, mit abspeichern und neu aufmachen stelle ich mir das auch vor für das readonly.
Habe es aber nie richtig hingekriegt.

Ob ich nun eine Seite extrahiere oder alles über der ersten Seite lösche ist auch egal. Hat bei mir aber nicht richtig funktioniert mit deletepages.

Meine Idee:
1. ganzes Dokument speichern
2. Dokument mit einem anderen namen nur erste Seite speichern
3. Dokument von 2. laden und readonly abspeichern
4. Dokument aus 3. laden und mit maildoc verschicken.

Meinst du sowas ist möglich?

LG
 
Meinst du sowas ist möglich?
Denke schon, aber um ehrlich zu sein, habe ich noch nie JS in einem PDF selber verwendet.

Meine Idee wäre jetzt, dass du einfach mit extracePages eine neue PDF-Datei erstellst, diese öffnest und dann verschickst. Ev so:
Code:
var path = "/f/Hapa/Allgemeines/Service Rapport/PDFKunde/" + this.getField("MaschineNr").value + ".pdf";
this.extractPages({
	nStart: 0,
	nEnd: 0, 
	cPath: path
});

var otherDoc = app.openDoc("/d/in/copy.pdf"); 
try {
	var cToAddr = this.getField("CustomerMail").value;
	var cSubLine = "Service Report of Intervention at " + this.getField("MaschineType").value + "-" + this.getField("MaschineNr").value ;
	var cBody = "Guten Tag" + "\n" +
		"Im Anhang erhalten Sie den Raport vom folgenden Einsatz.\n\n" +
		"Auftragsnummer: " + this.getField("AuftragsNr").value + "\n" +
		"Maschine: " + this.getField("MaschineType").value + "\n" +
		"Seriennummer: " + this.getField("MaschineNr").value + "\n" +
		"Techniker: " + this.getField("Techniker").value + "\n\n" +
		"Bei Fragen sind wir gerne für Sie da.\n";
	otherDoc.mailDoc({bUI:false, cTo:cToAddr, cCc:"", cSubject:cSubLine, cMsg:cBody});
} catch(e){
	app.alert(e)
}
- komplett ungetestet und geraten ;).

Das Setzen auf readonly würde ich ev. vorher machen, damit das beim extract schon mitgespeichert wird. Aber, wie gesagt, keinerlei Garantie...
 
Danke für die Hilfestellung, ich werde das Programm in den nächsten 3 Tagen testen, arbeite aktuell ein wenig zu lange, da mag ich am Abend nicht mehr programmieren ;)
Aber wenn du auch denkst, dass es möglich ist, dann wird es schon ein Wege geben.
 
Funktioniert beinahe, nur hat das Dokument irgendwie das Problem, dass eine Datei die gerade erste gespeichert wurde nicht geöffnet werden kann.
Ich habe die Frage nun noch im Adobe Forum gestellt, da ich heute auch wieder zig Stunden mit dem Problem verbracht habe.

Das Readonly gehört vor das extrahieren der ersten Seite, dann funktioniert es wunderbar.

2 files werden in 2 Ordner gespeichert, eins davon nur 1 Seite und Readonly.

Hoffentlich wissen die anderen Leute rat.

Besten Dnak trotz allem, sobla dich die fertige Lösung habe werde ich sie posten, damit das Theme geschlossen werden kann.

LG
 
Zurück
Oben