[ID CC-CC2022] Работа с временными профилями PDF для многопоточного экспорта

  • Автор темы Автор темы veretragna
  • Дата начала Дата начала

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Здравствуйте.
Для решения задачи многопоточного экспорта PDF остался последний штрих.

Исходные сведения:
Почему-то InDesign налагает своеобразную блокировку на профиль pdf во время выполнения asynchronousExportFile() с этим профилем.
Это легко обнаружить, посмотрев на Background Tasks во время экспорта через два разных скрипта:
  • один скрипт в лоб экспортирует один и тот же документ в 3 разных профиля pdf и в IDML, все таски выполняются параллельно;
  • второй скрипт экспортирует разные страницы одного документа в один профиль, все таски выполняются по очереди; выполняется только один за раз, остальные висят как queued.
Первое решение - создавать временный профиль конкретно для этого таска, а после того, как он отправлен на выполнение, сразу профиль удалять.
Фрагмент кода:
JavaScript:
var tpp = mainPDFExportPreset.properties;
tpp.name = "temp";
var tps = app.pdfExportPresets.add(tpp);
myDoc.asynchronousExportFile(ExportFormat.pdfType, File(fullName), false, tps);
tps.remove();

По-прежнему не работает, все таски кроме активного висят как queued, экспорт выполняется по одному.

Ок, меняем код, чтобы имя профиля было уникально:
JavaScript:
var i = 0;
var tpp = mainPDFExportPreset.properties;
tpp.name = "temp"+i;
var tps = app.pdfExportPresets.add(tpp);
myDoc.asynchronousExportFile(ExportFormat.pdfType, File(fullName), false, tps);
i++;
tps.remove();

Ничего не меняется, таски выполняются по одному.

Есть подозрение, что блокируется какой-то набор properties, но причину понять не могу. Есть подозрение, что я неправильно клонирую профиль.
Что еще можно предпринять в такой ситуации?

Скрипты:
JavaScript:
if (v_LQP == 1) {balancer(); doc.asynchronousExportFile(ExportFormat.pdfType, File (outPath + "//" + outName + "_LQP.pdf"), false, app.pdfExportPresets.itemByName("LQ SinglePage (LQP)"));};
if (v_LQS == 1) {balancer(); doc.asynchronousExportFile(ExportFormat.pdfType, File (outPath + "//" + outName + "_LQS.pdf"), false, app.pdfExportPresets.itemByName("LQ Spreads (LQS)"));};
if (v_HQPC == 1) {balancer(); doc.asynchronousExportFile(ExportFormat.pdfType, File (outPath + "//" + outName + "_HQPC.pdf"), false, app.pdfExportPresets.itemByName("HQ SinglePage + CropMarks (HQPC)"));};
if (v_HQP == 1) {balancer(); doc.asynchronousExportFile(ExportFormat.pdfType, File (outPath + "//" + outName + "_HQP.pdf"), false, app.pdfExportPresets.itemByName("HQ SinglePage (HQP)"));};
if (v_HQSC == 1) {balancer(); doc.asynchronousExportFile(ExportFormat.pdfType, File (outPath + "//" + outName + "_HQSC.pdf"), false, app.pdfExportPresets.itemByName("HQ Spreads + CropMarks (HQSC)")); };
if (v_IDML == 1) {balancer(); doc.asynchronousExportFile(ExportFormat.INDESIGN_MARKUP, File (outPath + "//" + outName + ".idml"), false);}

function balancer() {
    while (1) {
        if (app.backgroundTasks.count() < maxThreads) break;
        $.sleep(200);
    }
}
Стабильная однопоточная версия здесь, приводится только фрагмент, который менялся
JavaScript:
var i = 0;
if (!fullFile.exists || v_Overwrite) {
    balancer()
    var tpp = mainPDFExportPreset.properties;
    tpp.name = "temp" + i;
    var tps = app.pdfExportPresets.add(tpp);
    myDoc.asynchronousExportFile(ExportFormat.pdfType, File(fullName), false, tps);
    tps.remove();
    i++;
}

function balancer() {
    while (1) {
        if (app.backgroundTasks.count() < maxThreads) break;
        $.sleep(200);
    }
}
 
121590
 
С duplicate:
2019-09-06_133548.png
 
Может файл профиля экспорта ( *.joboptions) скопировать?
 
Может файл профиля экспорта ( *.joboptions) скопировать?
Не факт, что поможет, и это достаточно грубый метод. Но попробовать можно, если больше вариантов не останется