Скрипт для извлечения точечных объектов из pdf в ai файл - PullRequest
0 голосов
/ 10 июня 2019

Я работаю над сценарием 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();

Я хотел бы знать, как это сделать правильно, потому что я знаю, что подход пещерного человека, такой как «открыть, вставить, сохранить, закрыть, снова открыть (...)», неэффективен и должен быть это делается путем инициализации поиска через pathItems с помощью цикла for, помещения элементов, перекрестно связанных с плашечным цветом, в массив переменных, а затем использования этого массива для заполнения значения app.selection, но у меня возникают трудности с созданием правильного цикл и это логика.

Я также был бы рад, если бы кто-то указал, почему Illustrator не использует плашечный цвет во втором открытии файла PDF.

В общих чертах, я, возможно, понятия не имею, что я делаю, поэтому кто-то может указать мне правильное направление для решения проблемы, пожалуйста, потому что я совершенно ошеломлен возможными решениями задачи.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...