JavaScript в действии...

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

BoB4iK

Участник
Топикстартер
Сообщения
5
Реакции
0
Приветсвую!

Пишу программу в Фотошопе для создания бейджов. Интересует такой вопрос. Можно ли одну текстовую строку написать разным шрифтом ну или размером и как можно задать определённый шрифт?
 

BoB4iK

Участник
Топикстартер
Сообщения
5
Реакции
0
Ответ: JavaScript в действии...

Вот фрагмент кода:

layerRef2 = app.documents[0].artLayers.add(); // создаём отдельный слой для окна или видовой
layerRef2.kind = LayerKind.TEXT; // задаём тип слоя
layerRef2.textItem.contents = "Фамилия\rИмя\r \rкласс"
layerRef2.textItem.justification = Justification.CENTER; // позиционируем текст по центру рамки
layerRef2.textItem.size = 17; // размер шрифта
layerRef2.textItem.fauxBold = true; // жирный шрифт
layerRef2.textItem.kind = TextType.PARAGRAPHTEXT; // параграф
layerRef2.textItem.textComposer = TextComposer.ADOBEEVERYLINE; // многострочный

...

А как задать шрифт? И можно ли его к разным строкам разный размер или шрифт?
 

Steve

Участник
Сообщения
227
Реакции
0
Ответ: JavaScript в действии...

есть такая штука scriptlistener. можно записать действия и посмотреть как это будет в кодах (VB/JS).
 

BoB4iK

Участник
Топикстартер
Сообщения
5
Реакции
0
Ответ: JavaScript в действии...

Я знаю такую "штуку", там код по данной теме на 200++ строк получается ))
Мне бы по объектной модели как-то это проделать надо.
 

similideus

12 лет на форуме
Сообщения
671
Реакции
349
Ответ: JavaScript в действии...

PHP:
layerRef2.textItem.font = "Courier New"
 

BoB4iK

Участник
Топикстартер
Сообщения
5
Реакции
0
Ответ: JavaScript в действии...

Спасибо similideus. Я это знал, но alert(layerRef2.textItem.font) выдавал - "CourierNew-Regular", поэтому я пробовал по аналогии и не получалось ))

А по отдельным строкам текста никак нельзя? Кто знает подскажите плизз. Очень надо.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: JavaScript в действии...

Можно. У меня есть функция но басике, но есть. Сделана из кодов скриптлистенера.

fontParams - это массив параметров шрита. Функция интегрирована в апликухе которая самостоятельно вскрывает список шрифтов и достает все названия, включая PostScript нотацию.

Если вы хотите в скрипте задать фиксированные названия шрифтов - уточните с помощью Action как они точно называются у ФШ. Если же собираетесь выбирать шрифт - вам придется завести в интерфейсе скрипта список который будет заполняться в зависимости от количества установленных файлов. Фотошопская функция перечисления шрифтов работает очень медленно.

PHP:
Public Sub psEditTextLayer(Start As Long, _
                            length As Long, _
                            fontParams As columnFontOptions)
                            
Dim objApp As New Photoshop.Application
Dim desc2 As New Photoshop.ActionDescriptor
Dim desc3 As New Photoshop.ActionDescriptor
Dim desc6 As New Photoshop.ActionDescriptor
Dim desc8 As New Photoshop.ActionDescriptor
Dim desc7 As New Photoshop.ActionDescriptor
Dim list2 As New Photoshop.ActionList
Dim ref1 As New Photoshop.ActionReference

On Error GoTo ErrHandler

If Start + length <= 0 Then Exit Sub

Call ref1.PutEnumerated(objApp.CharIDToTypeID("TxLr"), _
                        objApp.CharIDToTypeID("Ordn"), _
                        objApp.CharIDToTypeID("Trgt"))
                        
Call desc2.PutReference(objApp.CharIDToTypeID("null"), ref1)

Call desc6.PutInteger(objApp.CharIDToTypeID("From"), Start)
Call desc6.PutInteger(objApp.CharIDToTypeID("T   "), Start + length)

   
Call desc7.PutString(objApp.StringIDToTypeID("fontPostScriptName"), fontParams.fntcPsName)
Call desc7.PutString(objApp.CharIDToTypeID("FntN"), fontParams.fntcName)
Call desc7.PutString(objApp.CharIDToTypeID("FntS"), fontParams.fntcStyle)
Call desc7.PutInteger(objApp.CharIDToTypeID("Scrp"), 7)
Call desc7.PutInteger(objApp.CharIDToTypeID("FntT"), 1)

Call desc7.PutUnitDouble(objApp.CharIDToTypeID("Sz  "), _
                         objApp.StringIDToTypeID("pointsUnit"), fontParams.fntcSize)

Call desc8.PutDouble(objApp.CharIDToTypeID("Cyn "), fontParams.fntcCyan)
Call desc8.PutDouble(objApp.CharIDToTypeID("Mgnt"), fontParams.fntcMagenta)
Call desc8.PutDouble(objApp.CharIDToTypeID("Ylw "), fontParams.fntcYellow)
Call desc8.PutDouble(objApp.CharIDToTypeID("Blck"), fontParams.fntcBlack)
Call desc7.PutObject(objApp.CharIDToTypeID("Clr "), objApp.CharIDToTypeID("CMYC"), desc8)
    
Call desc6.PutObject(objApp.CharIDToTypeID("TxtS"), objApp.CharIDToTypeID("TxtS"), desc7)
Call list2.PutObject(objApp.CharIDToTypeID("Txtt"), desc6)
Call desc3.PutList(objApp.CharIDToTypeID("Txtt"), list2)

Call desc2.PutObject(objApp.CharIDToTypeID("T   "), objApp.CharIDToTypeID("TxLr"), desc3)
Call objApp.ExecuteAction(objApp.CharIDToTypeID("setd"), desc2, 3)

Set desc2 = Nothing
Set desc3 = Nothing
Set desc6 = Nothing
Set desc8 = Nothing
Set desc7 = Nothing
Set list2 = Nothing
Set ref1 = Nothing

Exit Sub
    
ErrHandler:
    MsgBox Err.description
End Sub
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: JavaScript в действии...

Однако PostScript Name шрифта следует записывать не в:

desc7.PutString(objApp.StringIDToTypeID("fontPostScriptName")

как логично было бы предположить, но, в:

desc7.PutString(objApp.CharIDToTypeID("FntN")

---

И главное. Для визиток и бэджей в ФШ специально предусмотрена такая фитча как Variables. Не компостируйте моск со скриптами, берите и вариаблите.
 

Zest

Забанен
Сообщения
2 967
Реакции
70
Ответ: JavaScript в действии...

Мне бы по объектной модели как-то это проделать надо.

По объектной не получится. Там нет ничего вроде TextRange. Будете писать строками и подгонять их.

Более того, даже вскрыв логи скриптлистенера вы не сможете реализовать свойство Overflow блока. То есть переполнения. Если строка окажется длинее чем предусмотрено - слова будут перенесены.

Если так сильно хочется самому написать - пишите на VBA Корела.

А в ФШ Variables берет список+шаблон и выдает продукцию. Список вы делаете сами, причем очень просто его сделать в ёкзеле. Где-то была статья про вариаблы.
 

BoB4iK

Участник
Топикстартер
Сообщения
5
Реакции
0
Ответ: JavaScript в действии...

Буду переводить в JavaScript...
Напишу про результат как тока он будет.
 
Статус
Закрыто для дальнейших ответов.