使用JXA

时间:2015-07-29 20:29:31

标签: javascript osx-yosemite adobe-indesign javascript-automation adobe-javascript

我是JXA脚本的新手,但我正在尝试解决目前在工作中使用的一些旧脚本。它们遍历InDesign文档并基于它创建多个PDF。以前,它们将存储在名为“〜/ PDFExports”的文件夹中。但是,这不适用于10.10。

如果我将代码更改为只将PDF放在“〜/”中,它可以正常工作。从那里,我想将文件移动到“〜/ PDFExports”,但我似乎无法找到如何做到这一点的答案。我已经看到了调用ObjC或调用Application('Finder')的事情,但都没有工作 - 它们都返回undefined。

我是否只是遗漏了一些基本内容,或者仅仅使用JXA移动文件真的很难吗?

编辑:我正在创建有问题的文件夹以及我如何尝试使用Finder的一些语法。

//This is called in the Main function of the script, on first run.

var exportFolder = new Folder(exportPath);
if(!exportFolder.exists) {
    exportFolder.create();
}

//This is called right after the PDF is created. file is a reference to the 
actual PDF file, and destination is a file path string.

function MoveFile(file,destination){
   var Finder = Application("Finder");

   Application('Finder').move(sourceFile, { to: destinationFolder });

   alert("File moved");
}

3 个答案:

答案 0 :(得分:1)

Adob​​e应用程序长期以来都包含了自己的嵌入式JS解释器,JS API和.jsx文件扩展名。它与JXA无关,与它不兼容。

InDesign的JSX文档:

http://www.adobe.com/devnet/indesign/documentation.html#idscripting

(顺便说一句,我也强烈建议不要将JXA用于Adobe应用程序自动化,因为它有很多缺失/损坏的功能和应用程序兼容性问题,并且真的不适合生产工作。)< / p>

这里是Adobe的InDesign Scripting论坛的链接,这是获得JSX帮助的最佳位置:

https://forums.adobe.com/community/indesign/indesign_scripting

答案 1 :(得分:0)

可能是文件夹丢失了吗?可能是你对文件夹对象的引用无效?要显示的任何语法?

答案 2 :(得分:0)

您可以使用Cocoa创建文件夹

var exportFolder = $.NSHomeDirectory().stringByAppendingPathComponent("PDFExports")
var fileManager = $.NSFileManager.defaultManager
var folderExists = fileManager.fileExistsAtPath(exportFolder)
if (!folderExists) {
    fileManager.createDirectoryAtPathWithIntermediateDirectoriesAttributesError(exportFolder, false, $(), $())
}

并移动文件

var success = fileManager.moveItemAtPathToPathError(sourceFile, destinationLocation, $());
if (success) alert("File moved");

考虑destinationLocation必须是完整路径,包括文件名
sourceFiledestinationLocation都必须是exportFolder

等NSString对象