10

我正在使用 acrobat XI 我尝试过输出这样的文本文件

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

这是可行的,但我想提供一个固定路径,并且没有弹出对话框要求用户选择保存路径

有没有办法解决这个问题?谢谢

4

3 回答 3

7

所有将文件写入用户本地磁盘的 Acrobat JavaScript 函数都存在安全风险,因此对其使用有一些限制。这些功能包括doc.saveAs()所有的数据导出功能,例如doc.exportAsFDF().

你可以在这里阅读:

Acrobat 为这些功能提供了两种操作模式——带路径和不带路径。如果没有为函数提供路径参数,Acrobat 将显示一个文件浏览器对话框。文件浏览器对话框让用户可以控制如何将数据保存到他们的系统中。如果为函数提供了路径,则不会显示对话框,并且操作会被静默处理,即用户不一定知道数据已保存到他们的硬盘驱动器中。这是一个安全问题,因此要在静默模式下使用其中一个函数,该函数必须从特权上下文中执行。这意味着代码必须位于受信任的位置。例如,从控制台窗口、批处理或经过认证的 PDF 执行的代码具有特权。当这些函数中的任何一个与路径参数一起使用并在非特权上下文中执行时,Acrobat 将引发异常。此限制背后的原因是,如果代码不可信,则用户必须专门选择文件位置。

将数据保存到用户系统的另一个限制是路径规范必须是安全路径。安全路径是指不指向用户硬盘驱动器上的受限位置或可能构成安全风险的路径。这些受限位置的示例是系统文件夹和任何硬盘驱动器的根文件夹。其他可能受到限制的文件夹取决于操作系统和 Acrobat 开发人员的敏感性。两者都没有很好的文档记录,因此最好谨慎使用这些功能。

关于“安全路径”,Acrobat JS APIdoc.saveAS 方法文档指出:

Acrobat 6.0 为 JavaScript 方法引入了安全路径的概念,这些方法基于通过其参数之一传递给本地硬盘驱动器的路径将数据写入本地硬盘驱动器。路径不能指向系统关键文件夹,例如根目录、windows 或系统目录。路径还需要接受其他未指定的测试。对于许多方法,文件名必须具有适合要保存的数据类型的扩展名。某些方法可能具有不可覆盖限制。这些附加限制在文档中注明。通常,当判断路径不安全时,会抛出 NotAllowedError 异常(参见 Error 对象)并且方法失败。

当然你不能用这个exportDataObject方法来做,因为它没有path参数,你也可以在这里阅读:

“cName”参数是必需的输入,并指定要导出的特定文件附件。注意没有路径参数。这个函数实际上有一个“cPath”输入,但它不再有效。如果您尝试在此函数中使用路径,它将失败并引发异常。调用函数的上下文无关紧要,因为“cPath”参数已从所有用法中删除。

更多参考资料:

于 2013-07-04T20:30:23.157 回答
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);

生成的文本文件将有两行:

测试头

测试

于 2013-07-09T20:22:43.637 回答
3

不可能的。出于安全原因,不允许自动保存文件。

如 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.
于 2013-07-11T08:52:29.010 回答