【问题标题】:How to write a text file in Acrobat Javascript如何在 Acrobat Javascript 中编写文本文件
【发布时间】:2013-07-02 09:52:51
【问题描述】:

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

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

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

有什么办法可以解决这个问题吗?谢谢

【问题讨论】:

    标签: javascript text acrobat


    【解决方案1】:

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

    如您所见here:

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

    将数据保存到用户系统的另一个限制是 路径规范必须是安全路径。一条安全的道路是 不指向用户硬盘驱动器上的受限位置或 这可能会带来安全风险。这些限制的例子 位置是系统文件夹和任何硬盘驱动器的根文件夹。 其他可能受到限制的文件夹取决于操作 系统和 Acrobat 开发人员的敏感性。既不是 有据可查,因此最好谨慎使用这些函数。

    关于“安全路径”,Acrobat JS API doc.saveAS method documentation 声明:

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

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

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

    更多参考资料:

    【讨论】:

    • 感谢您提供信息!我曾尝试使用 Doc.exportAsText 但它根本不起作用。准确地说:1)如何创建一个文本对象,如何将其写入文本文件?谢谢
    • 我已经尝试过创建报告,创建数据对象,但它们都不能保存到文本文件中.....
    【解决方案2】:

    这是一种使用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);
    

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

    测试头

    测试

    【讨论】:

      【解决方案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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-09
        • 2010-12-27
        • 1970-01-01
        • 2013-03-23
        • 2014-04-02
        • 1970-01-01
        • 2020-03-28
        相关资源
        最近更新 更多