2013-07-02 61 views
9

我使用Acrobat XI 我試圖輸出這樣如何寫一個文本文件在Acrobat中的JavaScript

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

這是工作的文本文件,但我想提供一個固定的路徑,並沒有對話彈出窗口要求用戶選擇保存路徑

有什麼辦法可以解決這個問題嗎?謝謝

回答

6

將文件寫入用戶本地磁盤的所有Acrobat JavaScript函數都存在安全風險,因此對其使用有一些限制。這些功能包括doc.saveAs()和所有數據導出功能,如doc.exportAsFDF()

正如你可以閱讀here

Acrobat中爲我們提供了這些功能 兩種操作模式 - 與路徑和不帶路徑。如果未向路徑參數提供 ,Acrobat將顯示文件瀏覽器對話框。文件瀏覽器對話框 可以讓用戶控制數據如何保存到他們的系統中 。如果爲該功能提供路徑,則不顯示對話框 ,並且靜默地處理該操作,即,用戶不需要知道數據已經被保存到他們的硬盤驅動器。 這是一個安全問題,因此要在無聲 模式下使用這些功能之一,必須從特權上下文中執行此功能。此 表示代碼必須位於可信位置。例如,從控制檯窗口執行代碼 ,批處理或認證PDF 有特權。當任何這些函數與路徑 參數一起使用並在非特權上下文中執行時,Acrobat將拋出 例外。這個限制背後的原因是,如果代碼 不能被信任,則用戶必須專門選擇文件 位置。

將數據保存到用戶系統的另一個限制是 路徑規範必須是安全路徑。安全路徑是指 未指向用戶硬盤驅動器上的受限位置或可能構成安全風險的一個安全路徑。這些受限制的 位置的示例是系統文件夾和任何硬盤驅動器的根文件夾。 可能受限制的其他文件夾取決於系統的操作 以及Acrobat開發人員的敏感程度。 也沒有很好的記錄,所以最好仔細使用這些功能。

關於「安全路徑」,Acrobat的JS API doc.saveASmethod documentation狀態:

的Acrobat 6.0中引入的一個安全通道的概念,將數據寫入基於本地硬盤驅動器的JavaScript 方法通過其參數之一通過 的路徑。路徑無法指向系統 關鍵文件夾,例如root,windows或系統目錄。 A 路徑也受到其他未指定的測試。對於許多方法, 文件名必須具有適合於 要保存的數據類型的擴展名。有些方法可能有不覆蓋的限制。 這些額外的限制在文檔中有記錄。 通常,當判斷路徑不安全時,會引發NotAllowedError異常(請參閱錯誤對象),並且該方法失敗。

可以肯定你不能用exportDataObject方法做到這一點,因爲它沒有path參數,你也可以閱讀here

的「CNAME」參數是必需的輸入和指定將被導出的特定 文件附件。注意沒有路徑 參數。事實上這個函數有一個「cPath」輸入,但它不再有效。如果您嘗試在此函數中使用路徑,它將會失敗並引發異常。調用 函數的上下文並不重要,因爲「cPath」參數已從 中全部刪除。

更多參考:

+0

感謝您提供的信息!我曾嘗試使用Doc.exportAsText,但它根本無法正常工作。 確切地說:1)如何創建文本對象,如何將其寫入文本文件?謝謝 – user782104

+0

我已經嘗試創建報告,創建數據對象,但他們都不能保存到文本文件..... – user782104

4

下面是使用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); 

所得到的文本文件將有兩條線路:

testHeader

測試

2

不可能。出於安全原因,不允許自動保存文件。

正如SDK指出:

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. 
相關問題