- Сообщения
- 578
- Реакции
- 200
Здравствуйте.
Для решения задачи многопоточного экспорта PDF остался последний штрих.
Исходные сведения:
Почему-то InDesign налагает своеобразную блокировку на профиль pdf во время выполнения
Это легко обнаружить, посмотрев на Background Tasks во время экспорта через два разных скрипта:
Фрагмент кода:
По-прежнему не работает, все таски кроме активного висят как queued, экспорт выполняется по одному.
Ок, меняем код, чтобы имя профиля было уникально:
Ничего не меняется, таски выполняются по одному.
Есть подозрение, что блокируется какой-то набор properties, но причину понять не могу. Есть подозрение, что я неправильно клонирую профиль.
Что еще можно предпринять в такой ситуации?
Скрипты:
Для решения задачи многопоточного экспорта 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);
}
}
Стабильная однопоточная версия здесь, приводится только фрагмент, который менялся
[ID] Page Exporter: PDF
Версия InDesign: CC2019, на более ранних версиях работа не гарантируется, но по идее должно работать. Скрипт для экспорта отдельных страниц документа InDesign в формат PDF (Print) с возможностью именования страниц, с поддержкой профилей и...
forum.rudtp.ru
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);
}
}