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