Antworten auf deine Fragen:
Neues Thema erstellen

Interaktives PDF / Dateiname aus Formular-Textfeld übernehmen

V

Vianon

Guest

Hallo liebe Community,
nach erfolgloser Recherche, wollte ich mal mein Glück hier versuchen.

Für unseren Innendienst habe ich ein interaktives PDF mit div. Feldern angelegt. Soweit so gut, alles funktioniert wie gewollt.

Nun kam die Frage auf, ob man beim Speichern automatisch einen Namen aus einem der Textfelder übernehmen kann. Zum einen sollen Tippfehler und damit falsche Dateinamen vermieden werden und zum anderen durch eine Übernehme des Inhaltes aus einem Textfeld der Arbeitsprozess verkürzt werden.

Ich konnte die Frage in der Firma leider nicht gleich beantworten und hoffe, ihr könnt mir helfen.

Danke

Gruß
Vianon
 

Design & Layout

Bruhsman

self made grafiker

An dem Problem habe ich mich auch schon abgearbeitet. Die einzige Lösung (nach meiner Sicht der Dinge) wäre wohl ein Script zu schreiben. Ansonsten gehts wohl nur mit einzeln abspeichern....
 

helge07

Aktives Mitglied

Die Aufgabe ist mit Acrobat JavaScript lösbar. Die Funktion saveAs lässt sich aber nur als "trustedFunction" ausführen, daher ist etwas mehr als nur ein "saveAs" nötig.

Ich habe ein Testbeispiel dazu gebastelt: Mit dem Button "Save with new Name" wird die Datei im aktuellen Verzeichnis unter einem anderen Namen abgelegt. (Funktioniert nicht im Browser, sie muss daher erst auf die Platte geladen werden)


D
 

Eldebes

Noch nicht viel geschrieben

Mit Freude habe ich den Beitrag gelesen denn ich habe sozusagen fast das gleiche Problem.

Nun habe ich das PDF von Helge07 heruntergeladen (danke dafür) aber leider funktioniert es bei mir nicht. Habe es nicht im Browser geöffnet und es mit dem Acrobat Reader und Acrobat Pro getestet. Wenn ich auf den Button klicke, passiert gar nichts. Keine Fehlermeldung, keine neue Datei....einfach nichts.

Habe ich was falsch gemacht?

Ferner hätte ich noch eine Zusatzfrage, die recht ähnlich zur 1. Problematik ist. Und zwar kann man ja beim Emailversand den Betreff in der Email ändern, in dem man an den Link: mailto:email@email.de noch ?subject=TEXT ranhängt. Ist es auch möglich, diesen Text anhand eines Textfeldes im Formular anzupassen?
 

helge07

Aktives Mitglied

1. Sorry, das hätte ich dazu sagen sollen:
Man muss im Reader bzw. in Acrobat in den Voreinstellungen unter "Sicherheit(erweitert)" das Ausführen einer "trustedFunction" zulassen. Einen Screenshot habe ich nun auf Seite 2 des Testbeispiels eingefügt.


2. ....kann man ja beim Emailversand den Betreff in der Email ändern....
Mit "MailDoc" kann man das vorgeben. Dokumentiert ist das hier auf Seite 322:
http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/js_api_reference.pdf
 

Eldebes

Noch nicht viel geschrieben

Hallo Helge07,

danke für die schnelle Antwort. Habs verstanden und es klappt prima mit dem Speichern.

An der Emailgeschichte setze ich mich morgen mal ran und wenn ich eine schöne Lösung gefunden habe, werde ich es hier mal weitergeben.

Danke auf jeden Fall für deine Mühe
 

helge07

Aktives Mitglied

@Eldebes: zum eMail-Versand mit Acrobat-Javascipt:

Unten habe ich zwei Acrobat-JavaScript-Aufrufe angegeben, die (unter W7) allerdings nur funktionieren, wenn man unter Windows explizit das Standard-Mailprogramm eingestellt hat mit:
--> Systemsteuerung
--> Standardprogramme
--> Programmzugriff und Computerstandards festlegen
--> Benutzerdeniert --> ....
Was man auf einem Mac dafür tun müsste, weiß ich nicht.

Ein Dokument mit diesenFunktionen sollte daher nur in kontrollierbarer Umgebung verwendet werden.
Ein funktionsfähiges Beispiel-PDF-Dokument habe ich hier bereitgestellt:


--------------------------------------------

var f = this.getField("Zieladresse");
var cMyMsg = "........ Message Text ......";

// mailMsg-Funktion
app.mailMsg({
bUI: true,
cTo: "vvv.nnn@dddddd.de",
cSubject: ".......Subject text ...........",
cMsg: cMyMsg
} );

// mailDoc-Funktion
this.mailDoc(true, f.value, "", "", "<Text der als Subject erscheint>",
"<Text, der im eMail-Body versandt wird>");
var cMyMsg = "........ Message Text ......";
app.mailMsg({
bUI: true,
cTo: "vvv.nnn@dddddd.de",
cSubject: ".......Subject text ...........",
cMsg: cMyMsg
} );
 

Eldebes

Noch nicht viel geschrieben

Hiho,

abermals danke für deine Mühe aber hatte mich da gestern abend selbst noch etwas mit beschäftigt und es im Prinzip wie du gelöst:

var v = this.getField("form1");
var g = this.getField("form2");
var bt = "VNr.: " + v.value + " / " + g.value;

this.mailDoc(true, "mail@me.de", "", "", bt);

Wie einfach man viele Probleme lösen kann, wenn man Javascript versteht. Sollte mich damit wohl etwas intensiver beschäftigen :)
 
V

Vianon

Guest

An dieser Stelle auch von mir ein herzliches Dankeschön :)

Die Beiträge haben mir weitergeholfen.
 
L

LeeSin

Guest

Hallo @helge07
wäre es möglich, dass du die Datei "saveWithNewName.pdf" noch einmal zur Verfügung stellst? Ich sitze gerade an exakt diesem Problem und komme leider nicht mehr weiter...

Vielen Dank

LeeSin


Name nachträglich getaggt
pepexx
Mod
 
Zuletzt bearbeitet von einem Moderator:

helge07

Aktives Mitglied

Hier ist die Original-Datei noch einmal zum Download:


Die Funktionen in der Acrobat-Oberfläche und bei den Sicherheitseinstellungen sehen inzwischen aber anders aus.

Ich habe das Ganze daher noch einmal (mit Acrobat Pro 2017) durchexerziert:

1. Die Datei habe ich unter Acrobat Pro 2017 gespeichert mit:
--> Datei --> Speichern als --> PDF mit erweiterten Reader-Funktionen
--> Weitere Werkzeuge aktivieren (mit Ausfüllen und Speichern von Formularen)

2. In der Anwendung, die das Formular öffnet (Acrobat oder Reader DC) müssen die Sicherheits-Einstellungen dafür eingestellt werden:
--> Bearbeiten --> Sicherheit(erweitert) --> Datei hinzufügen --> ....

nun die Datei SaveWithNewName.pdf auswählen und in die Liste aufnehmen.
Sie wird dann mit ihrem vollständigen Pfad aufgenommen und funktioniert nur an dieser Stelle.
 
Zuletzt bearbeitet:
L

LeeSin

Guest

Hallo @helge07,
erst einmal vielen Dank für deine schnelle Antwort. Leider funktioniert die Lösung nicht so wie ich mir das vorstelle was aber wahrscheinlich daran liegt, dass ich "Nitro pro" und nicht den Acrobat verwende.

Vielleicht kannst du mir ja aber trotzdem weiterhelfen, du scheinst dich ja sehr gut mit JavaScript auszukennen! ;)

Ich möchte folgende Funktion haben:

Das PDF-Dokument hat ausfüllbare Textfelder. Die Eingabe des Benutzers in eines dieser Felder möchte ich per Druck auf einen Button als Dateiname haben, Dateityp soll logischerweise ".pdf" sein.

Folgender Code besteht bisher:

var berichtsname = this.getField("Berichts Nr").valueAsString;
app.browseForDoc({
bSave: true,
cFilenameInit: berichtsname + ".pdf"
});

Interessanter Weise kann der Benutzer hier keinen Dateityp auswählen. Es sind schlichtweg keine Optionen im Dropdown-Meü gegeben.

Ich möchte also, dass der bestehende Dateiname nach Druck auf den Button durch die Eingabe des Benutzers im Textfeld "Berichts Nr" ersetzt wird, ohne dabei den Speicherort ändern zu müssen (kann auch unsichtbar für den Benutzer sein). Es soll als kein neues Dokument erstellt werden, sondern lediglich das geöffnete umbenannt werden.

Die .pdf-Datei soll anschließend per E-Mail unter ihrem neuen Namen versendet werden.

Für das Versenden der E-Mail besteht folgender Code:

var cToAddr = "meineE-Mail"
var cSubLine = this.getField("Berichts Nr").valueAsString;
var cBody = "Sehr geehrte Damen und Herren,\n" + "Test123"
// Send the entire PDF as a file attachment on an email
this.mailDoc({bUI: true, cTo: cToAddr, cCc: cCCAddr, cSubject: cSubLine, cMsg: cBody});

Dieser funktioniert auch wie gewünscht.

Schonmal vielen Dank für die Hilfe
 

helge07

Aktives Mitglied

Acrobat JavaScript besitzt (wohl aus Sicherheitserwägungen) keine Methoden zur Umbenennung einer Datei. Soweit ich sehe ist "doc.saveAs(path)" die einzige (wenig schöne) Möglichkeit, das mit Datei-internem JavaScriptCode zu umgehen. Das könnte grob so aussehen:

1. Mit "doc.saveAs(path)" eine Kopie mit dem gewünschten Namen erstellen.
Dabei wird die Datei mit dem neuen Namen im Reader angezeigt.
Ggf. kann man als Ziel-Pfad ein Temp-Verzeichnis angeben, so dass die
Kopie bei einer Bereinigung verschwindet.

2. Mit einem zweiten Button, der ggf. zunächst unsichtbar ist und erst bei Schritt 1.
sichtbar wird.

Ich habe das hier einmal ausprobiert:


Allerdings weigert sich mein Reader bisher, den Standard-Mail-Client dafür zu verwenden, was Du aber schon gelöst hast.
 

helge07

Aktives Mitglied

Nachtrag:
Hier noch einmal die oben skizzierte "Lösung", in der ich noch ein paar Flüchtigkeitsfehler korrigiert habe:



Aber:
Die Aufgabenstellung ist so eigentlich nicht lösbar:
- Der Acrobat JavaScript-Sprachumfang lässt das nicht zu, wie die Sprach-Referenz zeigt
https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/Acro6JS.pdf
- Der Reader müsste in den erweiterten Sicherheitseinstellungen auch die Namen der umbenannten Dateien enthalten.
- Lösbar wäre das Problem Server-basiert: Das Dokument mit "submitForm" an einen Server übergeben, der dann aufgrund des Dokmenten-Inhalts die Umbenennung vornimmt und es versendet. Das wäre aber ein ganz anderer Ansatz. Google einmal nach "Acrobat JavaScript send with new name"
 
Zuletzt bearbeitet:
L

LeeSin

Guest

Hallo @helge07 ,
erst einmal vielen Dank für deine ganze Arbeit und die ausführlichen Erklärungen!

Schade, dass diese Aufgabenstellung so leider nicht lösbar ist.
Ich habe gestern bei der Recherche noch folgenden Befehl gefunden, der einfach das Speichern-Menü aufruft:

app.execMenuItem("SaveAs");

Ist es möglich hier eine Art Namensvorschlag aus dem Feld "Berichts Nr" zu generieren?

Als Alternative hatte ich ja gestern bereits den Code:

var berichtsname = this.getField("Berichts Nr").valueAsString;
app.browseForDoc({
bSave: true,
cFilenameInit: berichtsname + ".pdf"
});

In diesem Fall war aber das Dropdown-Menü zum Auswählen des Datei-Typs einfach leer. Die Generierung des Namens hat hingegen gut funktioniert. Ich habe leider nicht rausgefunden, woran dies liegt.

Es ist kein Problem, wenn der Benutzer den Speicherort festlegen kann und, falls er das dringende Bedürfnis dazu verspürt, auch den Dateinamen ändern kann! ;)
 

helge07

Aktives Mitglied

app.execMenuItem("SaveAs");
Ist es möglich hier eine Art Namensvorschlag aus dem Feld "Berichts Nr" zu generieren?

Leider nicht. Die Acrobat JavaScript-Referenz (s.o.) sagt dazu:
"NOTE: (Security): app.execMenuItem("SaveAs") can only be executed during batch, console or menu events."
Die Methode ist also in einem Button-Skript nicht verwendbar.

Als Alternative hatte ich ja gestern bereits den Code:
var berichtsname = this.getField("Berichts Nr").valueAsString;
app.browseForDoc({
bSave: true,
cFilenameInit: berichtsname + ".pdf"
});
In diesem Fall war aber das Dropdown-Menü zum Auswählen des Datei-Typs einfach leer

Das ist möglicherweise ein Problem von Nitro pro. Ich habe einen Button mit exakt diesem Skript-Code unter Acrobat gebaut: Der Dateiname wird korrekt in das Browser-Fenster eingetragen und im Auswahlfenster für den Datei-Typ wird angeboten "Adobe PDF-Dateien(*.pdf)
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.633
Beiträge
1.538.446
Mitglieder
67.555
Neuestes Mitglied
scheflo
Oben