0

这是一个非常奇怪的问题。我们公司有一个 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 中打开,而应该保存的文档却没有保存。

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

4

2 回答 2

1

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

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

delay 3

另一方面,为什么需要替换文件。我的意思是这不能只在 InDesign 脚本范围内考虑吗?只是好奇。

于 2015-02-17T12:23:19.737 回答
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。

于 2015-02-19T17:05:45.703 回答