从pdf到ai文件中提取专色对象的脚本

时间:2019-06-10 20:42:33

标签: javascript pdf adobe adobe-illustrator extendscript

我正在使用Illustrator CS6脚本来提取具有给定专色的印刷拼版中按路径定义的切割轮廓,在本例中为“ wykrojnik”,并且我正在寻找有关如何解决问题的指导以最通用的方式。

该文件来自一个程序,该程序将原始强加的文件封装在多个剪切蒙版中,这并不是要删除的问题。我希望在这样的已经打开的文件上运行脚本:

  1. 选择所有剪贴蒙版,并将其删除

  2. 将颜色设置为切割轮廓的专色,选择所有具有该专色笔划的对象,进行复制,从文档中清除,使用与上一个相同的尺寸创建新文件,粘贴对象保存,关闭。

  3. 打开上一个文件,找到所有填充有专色的对象,将它们复制,从文档中清除,打开上一个,粘贴到位,保存,关闭。

另存为PDF的文件是打印生产文件,而AI文件是绘图仪的切割轮廓文件。描边元素是切割线,而填充元素是绘图仪的定位标记。 问题是,当我第二次打开pdf文件时,由于某种原因,脚本未选择以任何形式填充的专色。相反,第一个选择(笔触)可以,并将对象转移到新文档中。

下面是我正在使用的代码,对于未遵循先前称为变量的情况,我深表歉意,这可能会给理解代码带来困难。

var W = app.activeDocument.width;
var H = app.activeDocument.height;

var doc = app.activeDocument;
var pdf = new PDFSaveOptions();
var docPath = new File(app.activeDocument.path);
var docName = app.activeDocument.name;

//deletes the masks, sets the def. stroke colour the the spot colour I want to extract, does the job.

app.executeMenuCommand("Clipping Masks menu item");
app.executeMenuCommand("clear");
doc.defaultFillColor = doc.swatches.getByName("wykrojnik").color;
app.executeMenuCommand("Find Fill Color menu item");
app.executeMenuCommand("copy");
app.executeMenuCommand("clear");

//saves the pdf file and stores the name and location of the file
app.activeDocument.saveAs( File( docPath + "/" + docName ), pdf);
var docPathPDF = new File(app.activeDocument.path);
var docNamePDF = app.activeDocument.name;

app.activeDocument.close();

//creates the save options and new AI file
var ai = new IllustratorSaveOptions();
ai.compatibility = Compatibility.ILLUSTRATOR8;
ai.flattenOutput = OutputFlattening.PRESERVEAPPEARANCE;
app.documents.add(DocumentColorSpace.CMYK , W , H ,);

//pastes the clipboard contents in place, saves, closes
app.executeMenuCommand("pasteInPlace");
app.activeDocument.saveAs( File( docPath + "/" + docName ), ai);

var docPathAI = new File(app.activeDocument.path);
var docNameAI = app.activeDocument.name;

app.activeDocument.close();

//workaround to get app.(...) working, because it didn't
var theApp = app;

//open the previous pdf file for the second search, etc. (here is the problem with not finding the spot colour swatch
theApp.open(File(docPathPDF +"/" + docNamePDF) , DocumentColorSpace.CMYK);
doc.defaultStrokeColor = doc.swatches.getByName("wykrojnik").color;
app.executeMenuCommand("Find Stroke Color menu item");
app.executeMenuCommand("copy");
app.executeMenuCommand("clear");
app.activeDocument.saveAs( File( docPathPDF + "/" + docNamePDF ), pdf);
app.activeDocument.close();

//open the AI file again, paste the filled objects, save, close
theApp.open(File(docPathAI +"/" + docNameAI) , DocumentColorSpace.CMYK);
app.executeMenuCommand("pasteInPlace");
app.activeDocument.saveAs( File( docPathAI + "/" + docNameAI ), ai);
app.activeDocument.close();

我想知道应该怎么做,因为我知道穴居人的方法(例如“打开,粘贴,保存,关闭,再次打开(...)”)是无效的,应该是通过使用for循环初始化pathItems的搜索,将与专色交叉引用的项放入变量数组中,然后使用此数组填充app.selection值来完成,但是我很难构造适当的循环,这是逻辑。

如果有人指出为什么Illustrator不使用pdf文件第二个开口中的专色,我也将感到高兴。

总的来说,我可能不知道我在做什么,所以有人可以指出正确的方向来解决该问题,因为我对任务的可能解决方案感到不知所措。

谢谢。

0 个答案:

没有答案