Acrobat的“此文件已打开”消息

时间:2015-02-16 22:04:48

标签: javascript acrobat extendscript raiseerror

这是一个非常奇怪的。我们公司有一个InDesign脚本,接近最后,调用Acrobat(通过Applescript)打开PDF文件,替换其中的页面,然后保存文件并关闭它。我们已经使用这个脚本超过一年半,现在我们拥有的9台计算机中的8台都没有问题。然而,最后一个在尝试打开并保存文件时给我一个奇怪的信息。

要明确的是,所有9台计算机都是Mac,都运行OS X 10.9.5 Mavericks。该脚本位于中央服务器上,因此他们都使用相同的文件:

var unlockCover2014 = app.trustedFunction(function (fName, fPrefix)
{
    app.beginPriv();
    var folderPrefix = fName.match(/^.*?(?=JOBS)/);
    console.println("fName is " + fName);
    console.println("folderPrefix is " + folderPrefix);
    var myDoc = app.openDoc(folderPrefix + "Product Templates/ProofCoverNew/proof_cover_2014.pdf");
    myDoc.replacePages(0, fName, 0, 0);
    myDoc.saveAs(fName);
    myDoc.closeDoc(true);
    app.endPriv();
});

此文件存储在正确的文件夹中,作为文件夹级脚本。其中8台计算机可以毫无困难地完成这项任务。然而,第9个将它放入Acrobat的Javascript控制台:

fName is /ArtDept/ArtDept/JOBS/425000-425999/425000 Folder/425000_cover.pdf
folderPrefix is /ArtDept/ArtDept/

RaiseError: This file is already open.
Doc.saveAs:9:
 ===> This file is already open.

我不明白为什么这台计算机单独认为PDF文件已经打开。由此产生的问题是,当主要的InDesign脚本运行完毕时,Acrobat中仍然会打开两个文档,而它应该保存的文档 not 将被保存。< / p>

关于这里发生了什么的任何想法?

2 个答案:

答案 0 :(得分:1)

如果这是我们正在谈论的内容,那么在InDesign尚未完全结束编写PDF文件时,是否可能运行Acrobat脚本?或者可能存在一些网络延迟,导致文件暂时无法访问。

我建议使用延迟来验证该理论。

&#13;
&#13;
delay 3
&#13;
&#13;
&#13;

另一方面,为什么需要替换文件。我的意思是只能在InDesign Scripting Scope中考虑这个问题吗?好奇。

答案 1 :(得分:0)

我终于发现了问题所在。我觉得它几乎是显而易见的有点傻,但也许在我的情况下可能对其他人有帮助。

我在调用Acrobat的主要InDesign脚本中禁用了该行,在我处理其他一些问题之后,我又回到了这个问题。当我这样做并再次运行主脚本时,我发现Acrobat确实已经在执行主脚本的过程中打开了封面PDF的副本!起初我很震惊,但是当我很快意识到原因时,我做了一个headdesk:

默认情况下,此计算机上的InDesign设置为在导出后自动打开PDF。

所以,我刚刚在代码中添加了一条短线,用于设置PDF导出首选项以关闭该功能:

with (app.pdfExportPreferences)
{
    pageRange = proofRange;
    if (multiColor) pageRange = colorTable.toString();
    useSecurity = true;
    disallowChanging = true;
    disallowCopying = false;
    disallowDocumentAssembly = true;
    disallowExtractionForAccessibility = false;
    disallowFormFillIn = true;
    disallowHiResPrinting = false;
    disallowNotes = true;
    disallowPlaintextMetadata = true;
    disallowPrinting = false;
    changeSecurityPassword = "(NOPE)";
    viewPDF = false;
}

最后是viewPDF行。 (对不起,我不认为我可以通过降价突出显示它。)我确实感到愚蠢,我忽略了这个半明显的原因,但我希望这可能会帮助遇到类似问题的其他人。无论如何,谢谢你试图提供帮助,@ Loic。