Suche // Search:

Posts mit dem Label Directory werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Directory werden angezeigt. Alle Posts anzeigen

28.06.2015

Formulare mit neuem Namen in bestimmtes Verzeichnis speichern
//
Save forms with new name in specified directory

Vor langer Zeit hab ich mal ein Beispiel veröffentlicht, um zu zeigen, wie man Formulare mit neuem Dateinamen in gewünschte Verzeichnisse speichert.
Auch wenn das Beispiel schon gut funktionierte, war mir der Aufbau immer noch etwas zu kompliziert, daher habe ich eine neue Version entworfen.
Das Beispiel zeigt 4 Möglichkeiten ein Formular zu speichern.

Long ago I've posted a sample to demonstrate how you can save forms with new file names in desired directories.
Weell, even if the sample was working I always felt a bit unsatisfied with its structure so I I've designed a new version.
It show 4 methods to save a form.

Folder Level Script – JavaScript
var lcbSaveAs = app.trustedFunction( function (vDoc, vPath) {      
    app.beginPriv();
   vDoc.saveAs({cPath: vPath});
    app.endPriv();
});

Funktion zum Speichern mittels Folder Level Script
//
Function to save through folder level script
function lcbSave (vDoc, vPath, vCurrentName, vDefaultName) { 
 if (vCurrentName === vDefaultName) {
  try {
   event.target.lcbSaveAs(vDoc, vPath);
   xfa.host.messageBox("File was saved under:\r\r" + vPath.toUpperCase(), "File Saved", 3, 0);
         xfa.form.execInitialize();
  } catch (error) {
   xfa.host.messageBox(error.toString().replace("RaiseError: ", "") + "\r\rEnsure the destination folder exists and there isn't already a file with the same file name in that folder!\n\n" + error, "Failed to save file", 0, 0);
  }
 } else {
  app.execMenuItem("SaveAs");
 }
}

Skript zum Erstellen des Zielpfads in einem Unterordner (nur eine der Möglichkeiten)
//
Script to create save path in sub folder (just one of the methodes)
var vSlash = "/",
 vNewName = Topic1.Variables.FormName.rawValue,
 vNewPath = Topic1.Variables.CurrentPath.rawValue,
 vSubfolder = Topic1.Variables.Subfolder.rawValue,
 vCurrentName = event.target.documentFileName,
 vCurrentPath = event.target.path,
 vDefaultName = vDefaultFileName.value,
 vSeparator = Topic1.Variables.Separator.boundItem(Topic1.Variables.Separator.getDisplayItem(Topic1.Variables.Separator.selectedIndex)),
 vDate = util.printd("ddmmyyyy", new Date());
 
if (vCurrentName === vDefaultName) {
 if (vNewName !== null && vNewPath !== null) {
  vNewPath += vSubfolder;
  vNewPath += vSlash;
  vNewPath += vNewName.replace(/[\s\!\?\<\>\'\"\*\/\\\=\?\^\`\{\}\|\~]+/g, vSeparator);
  vNewPath += vSeparator;
  vNewPath += vDate;
  vNewPath += ".pdf";
  console.println(vNewPath);
 } else {
  vNewPath = vCurrentPath;
 }
}
this.rawValue = vNewPath;


Beispiel – Zip-Datei mit Formular, Folder Level Script und Unterordner
//
Example – Zip file containing form, folder level script and sub folders
https://documentcloud.adobe.com/link/track?uri=urn%3Aaaid%3Ascds%3AUS%3Ab00d4d56-9bd9-4500-99d4-b233387bfe92

30.11.2009

Formulare in bestimmte Verzeichnisse speichern und nach Inhalt aus Formularfeld benennen
//
Save forms to specific directories and named after form field data

Dies Thema hat mich selbst eine lange Zeit beschäftigt.
Wie speichert man ein Formular in ein bestimmtes Vereichnis und wie benennt man es dann auch gleich noch nach einem Feldinhalt aus dem Formular selbst?

Programme wie MS Word können Letzteres ja, nicht so der Adobe Acrobat oder Reader.

Also muss JavaScript wieder her.
Damit klappt's, aber auch nur unter Verwendung von Folder Level Skripten, da die Sicherheitseinstellungen von Acrobat und Reader es ansonsten verbieten.
Eine einfache Variante des Ganzen könnte etwa so aussehen.
Ein Folder Level Script sowie ein Button und Formularfeld im Formular interagieren miteinander.

This issue took a long time for me to clear up.
How can I control the save directory of a form and how do I also rename the form after some data of the form itself?

Applications such as MS Word are able to do the latter, but Adobe Acrobat or Reader don't.

So you need JavaScript to realize this task.
But, because of Acrobat's and Reader's security restrictions this is only possible with folder level scripts.
A simple version can look like this.
The folder level script and also a button and field in the form interact with each other.


Beispiel-Formular – Speicherung in durch Skript angegebene Verzeichnisse
//
Sample form – Saving into directories specified through scripting


Beispiel-Ordner – Speicherung in einer der 4 Unterodner mittels JavaScript möglich
//
Sample folders – Saving directly into one of the 4 subfolder via JavaScript



Folder Level Script – JavaScript

var LCB_SaveAs = app.trustedFunction(function(doc) 
{         
    app.beginPriv();
  var LCB_SaveAsTarget = SaveAsTarget;
  doc.saveAs({cPath: LCB_SaveAsTarget});
    app.endPriv();
});


JavaScript zur Erstellung des Zielpfads
//
JavaScript to create save path 
// Variables we use in the filename taken from fields somewhere in the form
var Var1 = xfa.resolveNode("form1.#subform.cDepartment").rawValue;
var Var2 = xfa.resolveNode("form1.#subform.cName").rawValue;

// Create a time stamp for the new file
var TimeStamp = util.printd("ddmmyyyy", new Date());

// This functions checks the current file name. If it is not the correct file name we don't save the file under a new file name
if (event.target.documentFileName === "LCB_SaveAs_V2.pdf") 
 {
 // Name of a sub directory
 // To save in the same directory enter ""
 // To save in a named subfolder enter "Foldername/" (don't forget the trailing slash!)
 var Directory = Var1 + "/";
 // Concatenate the variables to a file name
 var NewFileName = "LCB_SaveAs_V2" + "_";
 NewFileName += Var2 + "_";
 NewFileName += TimeStamp;
 NewFileName += ".pdf";
 // Replace all characters that are not allowed to be used in a save path – this it to avoid an raise error
 NewFileName = NewFileName.replace(/[\s\!\?\<\>\'\"\*\/\\\=\?\^\`\{\}\|\~]+/g, "_");
 // Concatenate save path with new file name for this form and show it into this field
 this.rawValue = event.target.path.replace(event.target.documentFileName, "") + Directory + NewFileName;
 }
else
 {
 this.rawValue = event.target.path;
 }

JavaScript für Speichern-Button
//
JavaScript for Save Button


if (event.target.documentFileName === "LCB_SaveAs_V2.pdf")
  {
  //A variable for the Folder Level Script
  SaveAsTarget = xfa.resolveNode("form1.#pageSet.Page1.FileParameters.TargetSubDirectory").rawValue; 
  try
   {
   event.target.LCB_SaveAs(event.target);
  
   // Show message to inform the user, where the new file was saved.
   xfa.host.messageBox("File has beed saved under:\r\r" + SaveAsTarget, "File Saved", 3, 0);
   xfa.form.execInitialize();
   }
  catch(e)
   {
   xfa.host.messageBox(e.toString().replace("RaiseError: ","") + "\r\rEnsure the destination folder exists and there isn't already a file with the same file name in that folder!", "Failed to save file", 0, 0);   }
  }
else
  {
  // Open the 'Save As' dialog to let the user choose the target and filename.
  app.execMenuItem("SaveAs");
  }

Das Beispielformular geht noch weiter rein in die Materie und wird sie sicher interessieren.
Sie können z.B. in verschiedene Unterverzeichnisse speicher, je nach dem, welchen Wert Sie aus einer Dropdown-Liste ausgewählt haben.


The example form is much more detailed and will surely find your interest.
For example, you can save the form into one of several sub directories, depending on the selections you made in a drop down list.
Aktualisierung - Eine neuere Version ist hier verfügbar
//
Update - A newer version is available here
http://thelivecycle.blogspot.de/2015/06/save-with-new-name-in-specified.html