2

我有一个在 acrobat pro 中创建的可写 pdf 表单。现在,我添加了一个按钮,该按钮必须更改字段值,保存 pdf 并关闭它。

我决定这样做:

var fieldX = this.getField("xxxxField");
fieldX.value = 1;
app.execMenuItem("Save");
this.closeDoc(true);

但这不会保存pdf。

我不想有一个确认对话框。我saveAs在 API 中看到了该函数,但是如何获取真实路径,包括。当前编辑文档的文件名?或者你有其他方法吗?

谢谢你。

4

2 回答 2

4

但这不会保存pdf。

那是因为存在阻止app.execMenuItem("Save");工作的安全限制。不允许通过 JS 调用 Save。

API 中的函数,但如何获取真实路径,包括。当前编辑文档的文件名?或者你有其他方法吗?

您可以使用Doc.path获取当前文档的路径,包括其文件名(并Doc.documentFilename仅提供文件名)。

但是,saveAs它也受到安全限制,并且只能在“特权”上下文(批处理或控制台)中调用。所以这也行不通。

简而言之,安全限制将阻止您在不询问用户的情况下保存文档。如果你仔细想想,这只是合乎逻辑的。

请参阅:Acrobat JS API 参考

于 2013-01-09T18:29:08.523 回答
2

用于保存链接或代码下方使用的 PDF 数据的客户端代码。这是您需要放入的客户端受信任功能C:\Program Files\Adobe\...\JavaScript\Config.js.

如何使用 Acrobat JavaScript 保存 PDF

1) 在文件夹级别保存数据的代码。

var mySaveAs = app.trustedFunction ( function(oDoc,cPath,cFlName)
{

app.beginPriv();
    var flag=false; 

    cPath = cPath.replace(/([^\/])$/, "$1/");

    if(cPath.indexOf("http://") !== -1 || cPath.indexOf("https://") !== -1)
    {
        cPath = cPath.replace('http://', "\\\\");
        cPath = cPath.replace('https://', "\\\\");

        while(cPath.indexOf("/") !== -1)
        {
            cPath = cPath.replace('/', "\\\\");          
        }
    }

    if(cPath.indexOf(":") !== -1)
    {       
        cPath = cPath.replace(":","@"); 
    }


    try{

        oDoc.saveAs(cPath + cFlName);        

        flag = true;

    }catch(e){
        app.alert("Error During Save");
    }
    app.endPriv();

    return flag;
});

2) 在 SharePoint 中保存数据的代码。

var mySaveAs = app.trustedFunction ( function(oDoc,cPath,cFlName)
{

    app.beginPriv();
    var flag=false;
    try{                         
        app.execMenuItem("Save");        
        flag = true;         
    }catch(e){
        app.alert("Error During Save");
    }
    app.endPriv();  
    return flag;
});
于 2013-09-19T09:55:14.457 回答