Adobe Formular mit vorgegebenem Dateinamen speichern
In diesem Beitrag zeige ich Ihnen, wie Sie Ihr Adobe Formular mit vorgegebenen Dateinamen speichern, denn es wird häufig von Außendienst-Mitarbeitern oder Kunden ausgefüllt, und das auf vielen verschiedenen PCs und an vielen Orten außerhalb Ihres Unternehmens.
Der Adobe Reader bietet keine Möglichkeit, den Dateinamen des abzuspeichernden Formulars vorzuschlagen oder vorzugeben. Richtlinien für die Namensgebung werden nur durch Aufwand und Sorgsamkeit des Ausfüllenden eingehalten. So kann immer wieder ein erhöhter Wartungsaufwand beim Archivieren oder Einordnen der Dokumente entstehen.
Vorteil der Lösung
Mit dieser Lösung können Sie den Namen von Ihrem Adobe Formular vorgeben und dynamisch zusammensetzen. Durch das Coding können dynamische Bestandteile für den Namen festgelegt werden und das Dokument wird an einem vorbestimmten Ort gespeichert. So ist die Hürde zum Einhalten der Richtlinien geringer, Ihr Wartungsaufwand sinkt und das automatische Verarbeiten von den Dokumenten wird ermöglicht.
Bitte beachten Sie, dass dieses Tutorial für Adobe Reader 9.0 geschrieben ist. Bei anderen Adobe Reader Versionen können die Schritte von diesem HowTo abweichen.
Speicherung mit vorgegebenem Dateinamen
Schritt 1 – Die JavaScript Datei
Um das Speichern mit vorgegebenem Namen zu ermöglichen, legen wir die Datei myJSFile.js an, wobei der Name frei wählbar ist. Unter Windows muss die Datei unter folgendem Pfad (kann je nach Installation abweichen) abgespeichert werden:
C:\Program Files (x86)\Adobe\Reader9.0\Reader\Javascripts\myJSFile.js
In diesem Ordner werden JavaScript Dateien gespeichert, welche der Adobe Reader ausführen darf.
Die Datei myJSFile.js füllen wir mit folgendem Inhalt:
var myTrustedSaveAs = app.trustedFunction( function(doc, path)
{
app.beginPriv();
doc.saveAs(path);
app.endPriv();
});
Was passiert hier?
Mit dem Befehl myTrustedSaveAs = app.trustedFunction(…) geben wir einer Funktion die Privilegien, die es benötigt, um auf das Windows-Dateisystem zuzugreifen. Diese privilegierte Funktion speichern wir durch die Zuweisung als myTrustedSaveAs ab.
Als Parameter der Funktion trustedFunction(…) erzeugen wir mit dem Befehl function(doc, path){…} eine eigene Funktion, welche als Parameter doc und path erhalten wird.
Im Funktionsrumpf starten wir per app.beginPriv(); den privilegierten Modus von Adobe. Mit dem Befehl doc.saveAs(path); führen wir die Funktion saveAs(…) des Objektes doc aus. In unserem Fall wird das dazu führen, dass das in doc hinterlegte Dokument unter dem angegebenen Pfad path abgespeichert wird.
Nun wird per app.endPriv(); der privilegierte Modus wieder beendet.
Weitere Informationen zu dem privilegierten Modus finden Sie hier.
Schritt 2 – Einbinden im Adobe Formular
Öffnen Sie nun ihr Adobe Formular im LiveCycle Designer. Hier kann die gerade erzeugte Funktion myTrustedSaveAs jetzt als Funktionsaufruf genutzt werden. Dies kann zum Beispiel mit dem Klick eines Buttons geschehen.
Nehmen wir an, es existiert an Button, der die gewünschte Funktion auslösen soll. Markieren Sie den Button und lassen Sie sich den Skript-Editor anzeigen (Strg+Umschalt+F5, oder per Fenster->Skript-Editor). Hier wählen Sie in der Box neben Anzeigen das Event click aus. Im Skripting-Bereich können Sie nun folgenden Funktionsaufruf hinzufügen:
myTrustedSaveAs(event.target,"/c/dokument_export/wartungsdokument.pdf");
Als Dokument übergeben Sie der Funktion durch das Angeben von event.target das aktuelle PDF Dokument. Der im Pfad angegebene Ordner muss bereits existieren und als Trennzeichen muss ein Slash (Schrägstrich) verwendet werden. Sind alle Voraussetzungen erfüllt, wird das Formular jetzt per Klick unter dem angegebenen Namen abgespeichert.
Optional können Sie nach dem Ausführen der Funktion noch den User über eine Message Box benachrichtigen, dass der Vorgang abgeschlossen wurde. Fügen Sie dazu z. B. folgende Zeile ein:
xfa.host.messageBox("Ihr Dokument wurde erfolgreich gespeichert.");
Fazit
Auf Basis dieser Anleitung können Sie nun das Speichern einer Datei aus einem Adobe Formular auslösen. Um die Funktionalität ihren Wünschen entsprechend anzupassen, können Sie bspw. den Speicherort dynamisch festlegen, eine Abfrage auf Existenz des Ordners einbauen, den Namen der gespeicherten PDF Datei mit der aktuellen Uhrzeit, dem Benutzernamen oder einer Belegnummer aus Ihrem SAP System versehen usw.
Haben Sie fragen oder ist etwas unklar? Dann hinterlassen Sie gerne ein Kommentar und wir werden Ihnen zeitnah antworten.
Soll ihr Adobe Formular gar nicht mehr gespeichert, sondern direkt per E-Mail versendet werden? Dann schauen Sie sich doch unseren Artikel Adobe Formular per Email versenden an.
14 Kommentare zu "Adobe Formular mit vorgegebenem Dateinamen speichern"
Vielen Dank für die Anleitung. Könnte man auch ein Meldung ausgeben falls das Speichern nicht erfolgreich war – z.Bsp. weil das Formular bereits geöffnet ist?
Hallo Frau Schütz. Möglich ist dies sicherlich, allerdings auch eine Frage des Aufwandes.
Was ich nicht weiß ist, ob die Funktion saveAs einen Rückgabewert erzeugt, der ein erfolgreiches Abspeichern bestätigt.
Falls dem nicht so ist, könnten Sie in dem JavaScript File einen JavaScript Befehl ausführen, der prüft, ob die angegebene Datei gerade Schreibgeschützt ist oder nicht.
Hilft Ihnen das weiter?
Hallo, ich möchte eine PDF mit einem Button versehen, wenn ich diesen drücke, wird die PDF in einen vorher festgelegten Ordner gespeichert, der Datei Name soll aus dem Feld ( Name des Monteurs) erzeugt werden. ist dies möglich?
MfG Sven
Hi Sven. Das lässt sich realisieren. In Schritt 2 kannst du anstelle des statischen Pfads selbe reinen Pfad zusammenbauen, wo du den Namen des Monteurs in den Pfad konkatenierst. Damit steuerst du dann auch den Dateinamen.
Wichtige Information dazu: Das Script muss auf jedem PC verfügbar sein, der deine interaktive PDF-Datei nutzen will. Jeder Monteur müsste also die Javascript-Datei bei sich in den korrekten Ordner kopieren. Sowas ist häufig schwer und sehr Fehler-anfällig. Falls es nur sehr wenige Monteure sind, die diese PDF-Datei nutzen, kann es natürlich trotzdem lohnenswert sein.
Viele Grüße
Joschka
Hallo Joschka,
vielen Dank für die Anleitung. Ich habe genau wie die Anleitung gemacht und leider hat es nicht geklappt. Bei mir wenn man auf den Button geklickt hat, dann wurde das Formular nicht gespeichert. Ich habe Adobe Reader DC. Kann es sein, dass es daran liegt?
Vielen Dank für deine Rückmeldung im Voraus.
Viele Grüße
Jennifer Hoang
Hallo Jennifer,
das lässt sich aus der Ferne schwer beurteilen. Wichtig ist, dass das Script myJSfile für den Adobe Reader DC auffindbar ist. Der von mir angegebene Pfad stimmt nur für den normalen Adobe Reader 9.0.
Vielleicht findest du unter “C:\Program Files (x86)\Adobe\” noch einen passenden Ordner für den Adobe Reader DC, wo das Script rein kann?
Viele Grüße
Joschka Rick
Hallo Joschka,
vielen Dank für die guten Tipps!
Ich hätte dabei ein umgekehrte Problematik: ich möchte für eine Firma ein interaktives Formular mit einem Speichern-Button (nur Speichern, also Ctrl+S oder eben Strg+S) versehen, so dass die wenig erfahrenen Mitarbeiter am Ende des Formulares darauf klicken können und nicht lange nach dem Diskettensymbol etc. suchen oder unter “Datei_speichern” klicken müssen. Es soll nicht das “Speichern unter-Fenster” aufploppen und die Nutzer jedesmal verwirren bzw. dann irgendwo abgespeichert werden.
Im Acrobat habe ich nur den Menübefehl ausführen → Datei > Speichern unter > PDF… zur Auswahl. Geht das und wenn ja wie?
Vielen Dank für eine kurze Nachricht! Gruß Alexander
Hallo Alexander,
mir ist nicht bekannt, dass sich der “Speichern unter”-Dialog überspringen lässt. Ich denke mal, da es sich um eine Windows API handelt, gibt es hier nicht viel Auswahl.
Viele Grüße
Joschka
Viele Grüße
Joschka
Hallo Joschka,
vielen Dank für die schnelle Antwort! Gibt es auch keine Möglichkeit, einen neuen Menübefehl oder eine neue Aktion anzulegen, die einfach nur überspeichert anstatt “Speichern unter” aufruft?
Das Problem ist, dass viele Mitarbeiter am Ende des Ausfüllens einfach vergessen zu speichern. Wenn es aber ganz unten einen großen Button gibt, wo sie einfach daraufklicken können, fertig, dann wäre schon – userfreundlich einfachst – geholfen.
Gruß Alexander
Hallo Alexander,
mir ist keine Möglichkeit dazu bekannt. Vielleicht kannst du mal im Acrobat-Forum fragen, bezüglich non-SAP Adobe Reader und Scripting ist das Know-How da noch breiter vertreten.
Gruß
Joschka
Hallo Joschka,
ich habe deinen Code benutzt um einen Button zu erstellen, der das PDF mit dem Inhalt eines bestimmten Formularfeldes benennt.
Gibt es eine Möglichkeit zu prüfen, ob bereits eine Datei mit diesem Namen existiert? Dann soll eine Fehlermeldung ausgegeben werden.
Hallo Daniel,
das ist mit der limitierten Javascript API leider nicht möglich. Es kann sein, dass es Workarounds gibt (z. B. die Datei vorher versuchen zu öffnen und wenn erfolgreich, existiert die bereits), die mir nicht bekannt sind.
Viele Grüße
Joschka
Hallo Daniel,
kannst du mir bitte sagen, wie genau du das gemacht hast, dass die Datei entsprechend der Textfelder benannt wird?
Danke und LG, Michael
Hallo Michael,
kurze Antwort meinerseits: Du kannst als Aufruf auch eine Variable mitgeben, die du vorher im Script zusammengebaut hast.
Ohne das Script jetzt geprüft zu haben, müsste das grob so aussehen:
var myPathWithFilename = Concat(“/c/dokument_export/”,myTextbox.rawValue,”.pdf”);
…
myTrustedSaveAs(event.target,myPathWithFilename);
Schöne Weihnachten und beste Grüße
Joschka