2013-07-02 9 views
9

I Akrobat XI verwende ich habe wie diese Ausgabe eine Textdatei versuchtWie eine Textdatei in Acrobat Javascript schreiben

var cMyC = "abc"; 
var doc = this.createDataObject({cName: "test.txt", cValue: cMyC}); 
this.exportDataObject({cName: "test.txt", nLaunch:0}); 

Dies funktioniert, aber ich möchte einen festen Pfad und keinen Dialog zur Verfügung gestellt ist Popup, um den Benutzer zu bitten, einen Speicherpfad zu wählen

Gibt es eine Möglichkeit, das Problem zu beheben? Danke

Antwort

6

Alle Acrobat JavaScript-Funktionen, die eine Datei auf den lokalen Datenträger des Benutzers schreiben, stellen ein Sicherheitsrisiko dar, daher gibt es einige Einschränkungen für ihre Verwendung. Diese Funktionen umfassen doc.saveAs() und alle Datenexportfunktionen, wie doc.exportAsFDF().

Wie Sie here lesen:

Acrobat bietet uns zwei Betriebsarten für diese Funktionen - mit einem Pfad und ohne Pfad. Wenn für die Funktion kein Pfadparameter bereitgestellt wird, zeigt Acrobat einen Dateibrowser-Dialog an. Der Dateibrowser-Dialog gibt Benutzern die Kontrolle darüber, wie Daten in ihren Systemen gespeichert werden. Wenn der Funktion ein Pfad zur Verfügung gestellt wird, wird kein Dialog angezeigt und die Operation wird unbeaufsichtigt gehandhabt, d. H. Dem Benutzer ist nicht unbedingt bewusst, dass Daten auf seiner Festplatte gespeichert wurden. Dies ist ein Sicherheitsproblem. Um eine dieser Funktionen im stillen Modus zu verwenden, muss die Funktion aus einem privilegierten Kontext ausgeführt werden. Diese bedeutet, dass der Code an einem vertrauenswürdigen Speicherort gespeichert sein muss. Beispielsweise ist der Code , der über das Konsolenfenster ausgeführt wird, ein Batch-Prozess oder eine zertifizierte PDF-Datei ist privilegiert. Wenn eine dieser Funktionen mit einem Pfad -Parameter verwendet und in einem nicht privilegierten Kontext ausgeführt wird, löst Acrobat eine Ausnahme aus. Der Grund für diese Einschränkung ist, dass, wenn der Code nicht vertrauenswürdig ist, der Benutzer die Datei Ort auswählen muss.

Eine weitere Einschränkung beim Speichern von Daten auf dem System des Benutzers besteht darin, dass die Pfadangabe ein sicherer Pfad sein muss. Ein sicherer Pfad ist einer, der nicht auf einen eingeschränkten Speicherort auf der Festplatte des Benutzers oder einen zeigt, der ein Sicherheitsrisiko darstellen könnte. Beispiele für diese eingeschränkten Speicherorte sind der Systemordner und der Stammordner einer beliebigen Festplatte. Andere Ordner, die eingeschränkt werden können, hängen vom Betriebssystem und den Sensibilitäten der Acrobat-Entwickler ab. Weder ist gut dokumentiert, so dass es am besten ist, diese Funktionen sorgfältig zu verwenden.

Über „Sichere Wege“, die Acrobat JS API doc.saveASmethod documentation Zustände:

Acrobat 6.0 das Konzept eines sicheren Weg für JavaScript Methoden eingeführt, die Daten auf der lokalen Festplatte zu schreiben, basierend auf Ein Pfad passierte durch einen seiner Parameter. Ein Pfad kann nicht auf einen kritischen Ordner des Systems verweisen, z. B. auf ein Root-, Windows- oder Systemverzeichnis. Ein Pfad unterliegt auch anderen nicht spezifizierten Tests. Für viele Methoden muss der Dateiname eine Erweiterung haben, die für den Datentyp geeignet ist, der gespeichert werden soll.Einige Methoden haben möglicherweise keine Überschreibeinschränkungen. Diese zusätzlichen Einschränkungen sind in der Dokumentation aufgeführt. Wenn ein Pfad als nicht sicher eingestuft wird, wird im Allgemeinen eine NotAllowedError-Ausnahme ausgelöst (siehe Fehlerobjekt), und die Methode schlägt fehl.

Für sicher, Sie können es nicht mit der exportDataObject Methode, da sie keine path Parameter haben, wie Sie auch here lesen:

Die „cName“ Parameter sind eine erforderliche Eingabe und Gibt den spezifischen Dateianhang an, der exportiert wird. Beachten Sie, dass es keinen Pfad Parameter gibt. Es gibt tatsächlich einen "cPath" -Eingang für diese Funktion, aber ist nicht mehr gültig. Wenn Sie versuchen, einen Pfad in dieser Funktion zu verwenden, wird fehlschlagen und eine Ausnahme auslösen. Es spielt keine Rolle, aus welchem ​​Kontext die -Funktion aufgerufen wird, da der Parameter "cPath" aus alle Verwendung entfernt wurde.

Weitere Referenzen:

+0

Dank für Bereitstellung von Informationen! Ich habe versucht, Doc.exportAsText zu verwenden, aber es funktioniert einfach nicht. Um genau zu sein: 1) Wie erstellt man ein Textobjekt, wie man es in die Textdatei schreibt? Danke – user782104

+0

Ich habe schon versucht, Bericht zu erstellen, Datenobjekt zu erstellen, aber keiner von ihnen kann in einer Textdatei gespeichert werden ..... – user782104

4

Hier ist ein Weg, um Ausgabe an einen festen Pfad Textdatei mit doc.exportAsText:

// set up output text 
var TEMP_FIELD_NAME = "testHeader" 
var textValue = "test"; 
// add a temporary text field 
var f = this.addField(TEMP_FIELD_NAME, "text", 0, [30,30,100,20]); 
f.value = textValue; 
// export field name and value to defined file 
this.exportAsText({aFields: TEMP_FIELD_NAME, cPath: "test-text.txt"}); 
// remove text field 
this.removeField(TEMP_FIELD_NAME); 

Die resultierende Textdatei werden zwei Linien:

testHeader

Test

2

unmöglich. Aus Sicherheitsgründen ist das automatische Speichern einer Datei nicht zulässig.

Wie im SDK angegeben:

Beginning with Acrobat 6.0, if the parameter cDIPath is non-null, a NotAllowedError exception is thrown and the method fails. 
If cDIPath is not passed to this method, a file selection dialog box opens to allow the user to select a save path for the embedded data object.