Acrobat 的 "This file is already open" 消息

Acrobat's "This file is already open" message

这真的很奇怪。我们公司有一个 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 得到已保存。

对这里发生的事情有什么想法吗?

是否有可能 Acrobat 脚本是 运行 而 InDesign 还没有完全结束编写 PDF 文件,如果这就是我们所说的?或者可能存在一些网络延迟,导致文件暂时无法访问。

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

delay 3

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

我终于发现了问题所在。我觉得它(几乎)是多么明显有点傻,但也许它可以帮助处于我这种情况的其他人。

我在主 InDesign 脚本中禁用了调用 Acrobat 的那一行,我想我会在处理了一些其他问题之后再回到那个问题。当我这样做并再次 运行 主脚本时,我发现 Acrobat 实际上已经在主脚本执行期间的某个时间打开了封面 sheet 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 行。 (抱歉,我不认为我可以用 markdown 突出显示它。)我确实觉得我忽略了这样一个半显而易见的原因很愚蠢,但我希望这可以帮助遇到类似问题的其他人。无论如何,感谢您提供帮助,@Loic。