[ID CC-CC2021] Изменить размер qr-кодов

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
Сверстал документик, с очень большим кол-вом (около 300-400) qr-кодов
QR-коды вставлял разного размера, в соответствии с вложенной в него информации (26, 30, 40 мм)
Заказчик теперь просит все их уменьшить и сделать одного размера (24 мм)
Подскажите это можно как-то на автомате сделать?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Скриптом легко реализуется.
Каждый qr-код есть объект EPS с именем типа: "QR Code122606636161058171". По этим признакам можно найти коды и применить к ним нужную трансформацию.
 
  • Спасибо
Реакции: ~RA~

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Если размеры стандартных типов то искать именно по размерам.
 

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
Размеры я менял... Вставлялись они 31,75мм, я поджимал до 30мм, но не все... размеры кодов абсолютно разные, по ним не объединить. Кроме того могут попасться картинки тех же размеров...
 

Vadim_PDF

15 лет на форуме
Сообщения
1 648
Реакции
237
Если стоят в одних и тех-же неизменяемых местах на странице - можно искать скриптом и по области. Если нет... я вас поздравляю. Теоретически можно приспособить скрипт который написал Eugenius для отслеживания selection - не помню названия, и им прокликать нужные объекты не трогая ни в коем случае остальных.
JavaScript:
#targetengine "quickformatting"
var myEventHandler = function(ev){
    try{
        //Здесь выполняется нужное действие, у меня, например, назначается символьный стиль множеству последовательно выделяемых символов:
        var matRef = app.transformationMatrices.add({horizontalScaleFactor: 0.5, verticalScaleFactor:0.5});

        app.activeDocument.selection[0].transform(CoordinateSpaces.PARENT_COORDINATES, AnchorPoint.centerAnchor, matRef);
        
        w.text = "___";
        }
    catch(e){w.text = "It doesn't work!";}1

    }//function

var w = new Window("palette");
          w.text = "___\"!";
var butStart = w.add("button",undefined,"Start"); //Этой кнопкой будем включать/выключать отслеживание события
var started = false; //С помощью этой переменной мы определяем, включено отслеживание события, или нет
butStart.onClick = function(){
    if (!started){
        //Если отслеживание события не включено - включаем
        app.activeDocument.addEventListener('afterSelectionChanged', myEventHandler);
        butStart.text = "Stop"; //Меняем текст на кнопке
        }
    else{
        //Если отслеживание события включено - выключаем
        app.activeDocument.removeEventListener('afterSelectionChanged', myEventHandler);
        butStart.text = "Start"; //Меняем текст на кнопке
        }
    started = !started; //При нажатии на кнопку переключаем переменную
    }
w.onClose = function(){
    if (started){
        app.activeDocument.removeEventListener('afterSelectionChanged', myEventHandler);
        }
    }
w.show();

в 5й строчке вписать scale
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
JavaScript:
function scale (object, percent) {
    var matrix = app.transformationMatrices.add({
        horizontalScaleFactor: percent,
        verticalScaleFactor: percent,
    });
    object.transform(CoordinateSpaces.pasteboardCoordinates, AnchorPoint.centerAnchor, matrix, undefined, false);
}

function main (size) {
    if (!app.documents.length) {
        return false;
    }
    var doc = app.activeDocument;
    var epss = doc.pageItems.everyItem().epss.everyItem().getElements();
    for (var i = 0; i < epss.length; i++) {
        if (epss[i].itemLink && decodeURI(File(epss[i].itemLink.filePath).name.toString()).indexOf('QR Code') == 0) {
            var rect = epss[i].parent;
            var bounds = rect.visibleBounds;
            var rsize = Math.max(bounds[2] - bounds[0], bounds[3] - bounds[1]);
            scale(rect, size / rsize);
        }
    }
}

main(24);
 
  • Спасибо
Реакции: izrukvruki и LeonidB

izrukvruki

Топикстартер
15 лет на форуме
Сообщения
1 833
Реакции
302
если на странице есть текстовые фреймы
1574863534365.png
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Тогда вот так:

JavaScript:
function scale (object, percent) {
    var matrix = app.transformationMatrices.add({
        horizontalScaleFactor: percent,
        verticalScaleFactor: percent,
    });
    object.transform(CoordinateSpaces.pasteboardCoordinates, AnchorPoint.centerAnchor, matrix, undefined, false);
}

function main (size) {
    if (!app.documents.length) {
        return false;
    }
    var doc = app.activeDocument;
    var gfxs = doc.allGraphics;
    for (var i = 0; i < gfxs.length; i++) {
        var item = gfxs[i].getElements()[0];
        if (item.constructor.name == 'EPS' && item.itemLink && decodeURI(File(item.itemLink.filePath).name.toString()).indexOf('QR Code') == 0) {
            var rect = item.parent;
            var bounds = rect.visibleBounds;
            var rsize = Math.max(bounds[2] - bounds[0], bounds[3] - bounds[1]);
            scale(rect, size / rsize);
        }
    }
}

main(24);
 

dimetradim

Участник
Сообщения
83
Реакции
7
Можно создать стиль объекта и задать в нем размер.