не срабатывает InkPrintStatus.DISABLEINK (сепарации в CS6)

Статус
Закрыто для дальнейших ответов.

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
Всем добрый день!
Конфигурация: Win7 Pro x64, Иллюстратор CS6x64, принтер по-умолчанию PDF. Тестовый скрипт печати сепараций:
PHP:
var adoc = activeDocument;

var o = new PrintOptions();
o.colorSeparationOptions = new PrintColorSeparationOptions();
o.colorSeparationOptions.colorSeparationMode = PrintColorSeparationMode.HOSTBASEDSEPARATION;
o.colorSeparationOptions.inkList = adoc.inkList;

for (var i = 0; i < o.colorSeparationOptions.inkList.length; i++) {
 if (o.colorSeparationOptions.inkList[i].name == 'Process Cyan') {
  o.colorSeparationOptions.inkList[i].inkInfo.printingStatus = InkPrintStatus.DISABLEINK;
 }
}
adoc.print(o);
Почему Cyan все равно вылезает? (Значение при этом меняется на "InkPrintStatus.DISABLEINK")
Проверил в CS4 - печатает как задумано, без циана.
Как в этом случае можно отключить Cyan, кто знает или догадывается?
Спасибо )
 

_MBK_

Пикирующий бомбардировщик
12 лет на форуме
Сообщения
25 168
Оценка реакций
8 534
Точно меняется? Вы точно проверяли, перед print оно стоит в DISABLEINK? Я к тому, что, может, в CS6 сепарация как то по другому называется? Попробуйте тупо inkList[0].inkInfo.printingStatus = InkPrintStatus.DISABLEINK поставить - что будет?
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
Точно меняется, проверяю алертом и в extend script toolkit; как будто значение упорно берется из Document.inkList.inkInfo.
Тупое inkList[0].inkInfo.printingStatus = InkPrintStatus.DISABLEINK меняет значение, но циан вылезает.
+ еще глюк - при удалении пантонов из макета с последующим перезапуском Иллюстратора пантоны вылезают при печати сепараций скриптом (пустые страницы); продолжая присутствовать в Document.inkList.inkInfo со значением printingStatus = InkPrintStatus.ENABLEINK
Ерунда какая-то %)
 

GoodvinVV

Участник
Сообщения
85
Оценка реакций
2
да, все верно. CS6
PHP:
For Each myInk In AiApp.ActiveDocument.InkList
                If myInk.Name = "inkName" Then
                     myInk.InkInfo.PrintingStatus = AiInkPrintStatus.aiEnableInk
                Else
                     myInk.InkInfo.PrintingStatus = AiInkPrintStatus.aiDisableInk
                 End If
                      MsgBox(myInk.Name & vbNewLine & myInk.InkInfo.PrintingStatus)
             Next
значения PrintingStatus изменяются а в печать всё подряд летит....
мозг вскипел уже...
 

GoodvinVV

Участник
Сообщения
85
Оценка реакций
2
казалось бы....
однако если проверять не там же в цикле где значения меняешь , то видно что ничего не меняется...
PHP:
                        For Each myInk In AiApp.ActiveDocument.InkList
                            If myInk.Name <> GridPrint2.Rows(i - 1).Cells(4).Value Then
                                myInk.InkInfo.PrintingStatus = AiInkPrintStatus.aiDisableInk
                            Else
                                myInk.InkInfo.PrintingStatus = AiInkPrintStatus.aiEnableInk
                            End If
                         Next

                        For Each myInk In AiApp.ActiveDocument.InkList
                             MsgBox(myInk.Name & vbNewLine & myInk.InkInfo.PrintingStatus)
                        Next
вопрос: так как же выключить\включить краску ,
media size выбрать costom size ??
 
Последнее редактирование:

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
А Вы проверяете значения в документе или в своём объекте, где меняли значения?
Да, в документе цвет всегда остается как-бы "включенным" по-умолчанию. Так и в CS4,если проверить.
Но печатаем мы со своими настройками, а не с теми, которые в документе по-умолчанию. По-моему так.
Вот та же шняга код с комментами, который правильно работает в CS4 но глючит в SC6 и СС:
PHP:
var adoc = activeDocument;

var o = new PrintOptions();
o.colorSeparationOptions = new PrintColorSeparationOptions();
o.colorSeparationOptions.colorSeparationMode = PrintColorSeparationMode.HOSTBASEDSEPARATION;
o.colorSeparationOptions.inkList = adoc.inkList;

// отключение Process Cyan
for (var i = 0; i < o.colorSeparationOptions.inkList.length; i++) {
  if (o.colorSeparationOptions.inkList[i].name == 'Process Cyan') {
    o.colorSeparationOptions.inkList[i].inkInfo.printingStatus = InkPrintStatus.DISABLEINK;
  }
}
// проверка
var inkStatusList = '';
for (var i = 0; i < o.colorSeparationOptions.inkList.length; i++) {
  inkStatusList += o.colorSeparationOptions.inkList[i].name + ': ' +
    o.colorSeparationOptions.inkList[i].inkInfo.printingStatus + '\n';
}
alert(inkStatusList); // Process Cyan InkPrintStatus.DISABLEINK

adoc.print(o); // Process Cyan НЕ печатается

// снова берем и присваиваем значения inkList из документа
o.colorSeparationOptions.inkList = adoc.inkList;

// проверка
var inkStatusList = '';
for (var i = 0; i < o.colorSeparationOptions.inkList.length; i++) {
  inkStatusList += o.colorSeparationOptions.inkList[i].name + ': ' +
    o.colorSeparationOptions.inkList[i].inkInfo.printingStatus + '\n';
}
alert(inkStatusList); // Process Cyan InkPrintStatus.ENEBLEINK
media size при чем?
 
Последнее редактирование:

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
по моему это просто ошибка. хотя почему и через vb и js один и тот же глюк? пора звонить в адоб ;)
 

GoodvinVV

Участник
Сообщения
85
Оценка реакций
2
странно конечно...
PHP:
myPrintOpTions.myColorSeparationOptions.InkList = AiApp.ActiveDocument.InkList

                    For Each myInk In myPrintOpTions.myColorSeparationOptions.InkList
                        If myInk.Name <>"inkName" Then
                            myInk.InkInfo.PrintingStatus = AiInkPrintStatus.aiDisableInk
                        Else
                            myInk.InkInfo.PrintingStatus = AiInkPrintStatus.aiEnableInk
                        End If
                    Next
'проверка
PHP:
                    For Each myInk In myPrintOpTions.myColorSeparationOptions.InkList
                        MsgBox(myInk.Name & vbNewLine & myInk.InkInfo.PrintingStatus)
                    Next
PHP:
myPrintOpTions.ColorSeparationOptions = myColorSeparationOptions
все меняется как надо,
однако при печати встает на ошибке

PHP:
AiApp.ActiveDocument.PrintOut(myPrintOpTions)
upload_2014-1-14_14-8-4.png


возможно как то иначе создавать нужно эту (.ColorSeparationOptions) настройку либо иначе присваивать..
 

GoodvinVV

Участник
Сообщения
85
Оценка реакций
2
пока не изменится что либо здесь...
JavaScript Object Reference:
Document>>Document properties>>inkList - object - Read-only.

выше описаный способ и имеющийся баг к цели не приближает...
 

GoodvinVV

Участник
Сообщения
85
Оценка реакций
2
а новую версию Illustrator CC (17) не пробовали тестить? может там уже работает?
 
Последнее редактирование модератором:

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
не работает в СС, только в ЦС4
 

qsedftghk

фея
12 лет на форуме
Сообщения
1 543
Оценка реакций
774
dumbm1, честно: помог бы, чем мог бы, но:
1. лень втыкаться в код, наполовину представленный.
2. , работы - до
Не по теме:
непереводимая игра слов...

3. Совет: абстрагируйтесь. Если это глюк, попробуйте решить проблему иначе: другой язык, другой софт...
4. Суперсовет. Супер-присупер: Если есть силы и возможность - изучайте SDK. Скрипты - сосут (извините за сленг, но мне сейчас иначе мысль не выразить. (просьба модераторам, поправить без казни))
 

dumbm1

Участник
Топикстартер
Сообщения
385
Оценка реакций
166
Спасибо )))
3. Можно из готового ps-файла удалить ненужные страницы - вручную получается, скриптом тоже должно.

Не по теме:
4. А SDK, это в смысле C++ и адобовскую среду разработки? У меня такая идея фикс - написать простой плагин к иллюстратору - менеджер скриптов (для загрузки, отображения и запуска скриптов из палитры - как в индизайне, например). На первый взгляд просто и полезно, но никто пока не сделал.
 
Последнее редактирование:

GoodvinVV

Участник
Сообщения
85
Оценка реакций
2
как вариант можно в пдф а потом
PHP:
Function savPDF_pos(pozN As Integer, pdfDocpath As String, newSavepdfDocpath As String)
        // удаление лишних сепараций из pdf и сохранение по новому пути\

        Dim myPdfDoc As Object
   
        myPdfDoc.Open(pdfDocpath)
        Dim pageCount As Integer = myPdfDoc.GetNumPages

        If pozN > 1 And pozN < pageCount Then
            myPdfDoc.DeletePages(0, pozN - 2)
            myPdfDoc.DeletePages(1, pageCount - pozN)
        End If
        If pozN > 1 And pozN = pageCount Then
            myPdfDoc.DeletePages(0, pozN - 2)
        End If
        If pozN = 1 And pozN < pageCount Then
            myPdfDoc.DeletePages(1, pageCount - pozN)
        End If

        If pozN = 1 And pageCount = 1 Then
            Exit Function
        End If

        myPdfDoc.Save(1, newSavepdfDocpath)
        myPdfDoc.Close()

    End Function
 
Статус
Закрыто для дальнейших ответов.