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.

SAP Adobe Forms

E-Book: SAP Adobe Forms

Adobe Forms ist der Standard für Druckformulare, denn es ermöglicht effizientes und gewinnbringendes Arbeiten.

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.

Adobe Formular

HowTo Speichern per JavaScript

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.

Joschka Rick

Joschka Rick

"Geht nicht" gibt es bei mir nicht! Mit meiner Wissbegierde und meinem breiten technischen Verständnis habe ich bisher immer eine Lösung gefunden. Mein Name ist Joschka Rick und ich bin Senior Consultant im Kernteam mindforms. Um Ihre Projekte zum Erfolg zu führen, lege ich besonderen Wert auf Zuverlässigkeit, gute Integration und Kommunikation. Mein fachlicher Fokus liegt auf Etiketten-Druck, Software Architektur, ABAP OO und Archivierung.

Sie haben Fragen? Kontaktieren Sie mich!



Das könnte Sie auch interessieren

SAP Interactive Forms by Adobe bietet die Möglichkeit, xHTML-Texte auf Formularen darzustellen. Dabei werden die Texteigenschaften wie Schriftgröße und Schriftart oder anderes über die Attribute angegeben. Dies hat den Vorteil, […]

weiterlesen

Sie haben sich die Frage gestellt, wie Sie einen Drucker/Etikettendrucker für SAP Interactive Forms by Adobe(SIFbA) einrichten? Dann sind Sie hier genau richtig.

weiterlesen

Wenige Applikationen wie bspw. der PDF Expert 5 beherrschen den Umgang mit interaktiven Formularen, kosten aber im Schnitt 10€ pro Lizenz - ein Preis, den die wenigsten Unternehmen bezahlen wollen, […]

weiterlesen

Arbeiten Sie in der Entwicklungsumgebung mit ausreichend Testdaten, können Sie die Entwicklungszeit für Formulare erheblich verkürzen. Nutzen Sie Adobe Forms Technologie, müssen Sie dazu lediglich eine XML-Datei mit Daten in […]

weiterlesen

Innerhalb des FormDesigners besteht die Möglichkeit, globale Variablen zu definieren. Diese erlauben es, Werte zu speichern und an anderer Stelle im Formular darauf zurückzugreifen. Mögliche Anwendungsbeispiele sind zum Beispiel das […]

weiterlesen

Der Adobe Livecycle Designer enthält in seiner Objektbibliothek neben diversen Schaltflächen, Barcodes und anderen Elemente, die für die direkte Anzeige von Informationen konzipiert sind, auch sog. Teilformulare (engl. subforms), die […]

weiterlesen

In Formularprojekten wie auch in anderen Softwareprojekten unterliegen Entwickler einer sogenannten Entwicklungsrichtlinie. Dieses Rahmenwerk gibt beispielsweise vor, wie mit globalen Variablen umgegangen, in welcher Form dokumentiert und wie Entwicklungsobjekte benannt […]

weiterlesen

In diesem Blogbeitrag möchte ich auf ein besonderes Problem mit dem E-Mail-Versand von Adobe Forms eingehen, das mir zuletzt in einem Kundenprojekt begegnet ist. Der Kunde klagte über sporadisch auftretende, […]

weiterlesen

14 Kommentare zu "Adobe Formular mit vorgegebenem Dateinamen speichern"

Claudia Schütz - 16. März 2017 | 09:40

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?

Antworten

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?

Antworten
Sven Kunzendorf - 22. Dezember 2019 | 10:45

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

Antworten

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

Antworten

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

Antworten
Joschka Rick - 5. Juli 2020 | 20:38

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

Antworten

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

Antworten

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

Antworten

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

Antworten

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

Antworten

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.

Antworten

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

Antworten

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

Antworten

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

Antworten

Schreiben Sie einen Kommentar

Bitte füllen Sie alle mit * gekennzeichneten Felder aus. Ihre E-Mail Adresse wird nicht veröffentlicht.





Kontaktieren Sie uns!
Julia Buecker
Julia Bücker Kundenservice