tags bag

  • Автор темы Автор темы uriy
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

uriy

Участник
Топикстартер
Сообщения
89
Реакции
1
Adobe Illustrator CS2

У меня скрипты с тегами объектов работают неправильно.
Значение тега заменяется его именем.
Причем, происходит это и в бейсике и в яваскрипте.
Причем, на примерах скриптов самого Adobe!

1) Пример взят из Illustrator CS2 JavaScript Scripting Reference.pdf, стр 240.

Если на странице есть картинка,
то пример добавляет тег "AdobeWebSite" со значением "http://www.adobe.com/"

В него я добавил alert с именем и значением добавляемого тега

Код:
// Set a URL property on all RasterItems and PlacedItems in the document
if ( app.documents.length > 0 ) {
	doc = app.activeDocument;
	if ( doc.placedItems.length + doc.rasterItems.length > 0 ) {
		for ( i = 0; i < doc.pageItems.length; i++ ) {
			imageArt = doc.pageItems[i];
			if ( imageArt.typename == "PlacedItem" || imageArt.typename == "RasterItem") {
				// Create a new Tag with the name AdobeURL and the
				// value of the www link
				urlTAG = imageArt.tags.add();
				urlTAG.name = "AdobeWebSite";
				urlTAG.value = "http://www.adobe.com/";
				alert( "Tag Name: " + urlTAG.name + ", Value: " + urlTAG.value);
			}
		}
	}
	else {
		alert( "No placed or raster items in the document" );
	}
}

скопируйте код в текстовый файл с расширением .js
откройте илл и перетяните на окно нового документа любую картинку (или Menu > file > place)
запустите скрипт
увидите alert со значением тега не "http://www.adobe.com/", а "AdobeWebSite".
Т.е. значение тега заменяется именем тега.

2) Пример взят из директории ...\Adobe Illustrator CS2\Scripting\Sample Scripts\Visual Basic\Working with Tagged Art
Исходный файл - CreateDeleteTag.vbs
переработал его, что-бы в новом файле он выводил строку с именем и значением тега

Код:
Set appRef = CreateObject("Illustrator.Application.3")

If (appRef.Documents.Count = 0) Then
	Set docRef = appRef.Documents.Add
Else
	Set docRef = appRef.ActiveDocument
End If

If (docRef.PageItems.Count = 0) Then
	Set textArt = docRef.TextFrames.Add
	textArt.Position = Array(100, 200)
	textArt.Contents = "Illustrator Scripting"
	textArt.TextRange.CharacterAttributes.Size = 24
End If

appRef.DoJavaScript "alert('Adding a tag')"
' OR
' MsgBox "Adding a tag."

Set newTag = docRef.PageItems(1).Tags.Add
newTag.Name = "MyTest"
newTag.Value = "MyValue"
textArt.Contents = "Adding a tag, Name: " & newTag.Name & ", Value: " & newTag.Value

Rem now delete the tag.
Rem Obtain the tag using it's name
appRef.DoJavaScript "alert('Removing the tag.')"
' OR
' MsgBox "Removing the tag."

Set tagToDelete = docRef.PageItems(1).Tags("MyTest")
textArt.Contents = "Tag, Name: " & docRef.PageItems(1).Tags("MyTest").Name & ", Value: " & 

docRef.PageItems(1).Tags("MyTest").Value
docRef.PageItems(1).Tags.Remove tagToDelete

appRef.DoJavaScript "alert('Tag deleted.')"
' OR
' MsgBox "Tag deleted"
------------------------------------
скопируйте код в текстовый файл с расширением .vbs
откройте в илле новый документ и запустите скрипт

увидите текст со значением тега не "myValue", а "myTest".
Т.е. значение тега заменяется именем тега.

В сохраненном без компрессии файле илла можно убедиться, что значение тега в любом случае = его имени.
Напр.:

Код:
%_/ArtDictionary :
%_(MyTest) /String (MyTest) ,

Такая вот чешуя :((

Это у меня одного, или реальный баг скриптинга?
Спасибо всем, кто проверит и откликнется!

uriy
 
Ответ: tags bag

JS — твой результат воспроизводится.

VBS, правленный тобой:

Сервер сценариев Windows (Microsoft R) версия 5.6
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

G:\TempData\Скрипт\0.vbs(32, 92) Ошибка компиляции Microsoft VBScript: Синтаксическая ошибка

Exit code: 1 , 0001h

Вот такой код VBS выдаёт тот же результат, что и JS:

PHP:
Set appRef = CreateObject("Illustrator.Application.3")

If (appRef.Documents.Count = 0) Then
	Set docRef = appRef.Documents.Add
Else
	Set docRef = appRef.ActiveDocument
End If

If (docRef.PageItems.Count = 0) Then
	Set textArt = docRef.TextFrames.Add
	textArt.Position = Array(100, 425)
	textArt.Contents = "Illustrator Scripting"
	textArt.TextRange.CharacterAttributes.Size = 48
End If

MsgBox "Adding a tag."

Set newTag = docRef.PageItems(1).Tags.Add
newTag.Name = "MyTest"
newTag.Value = "MyValue"

myMsgText = "Name: " & newTag.name & "; Value: " & newTag.Value
MsgBox myMsgText

MsgBox "Removing the tag."

Set tagToDelete = docRef.PageItems(1).Tags("MyTest")
docRef.PageItems(1).Tags.Remove tagToDelete

MsgBox "Tag deleted"

Я думаю, можно сделать вывод, что имеет место врождённый глюк.
 
Ответ: tags bag

Спасибо Shlyapa

Хреново это.
Система тегов по сути - встроенная база данных.
И судя по книге Ethan Wilde - "Adobe Illustrator SCRIPTING with Visual Basic and AppleScript" - для 10 люстры такого глюка не существовало. Собственно - в ней (переводе Кудиц-Образ) описывается, как работать с этой базой.

Полезу на глиняный сайт выяснять...
 
Ответ: tags bag

Выяснил.

В очередной китайский раз адоба н@#bала пользователей. И даже не признает и не собирается исправлять этот баг. Никакой официальной информации, хотя на форуме адобы этот баг известен :((

Мораль: Не верьте тому, что пишется в инструкциях и хелпе. Пробуйте сами.
 
Ответ: tags bag

Для того, чтобы верить или не верить Help-у и документации, их нужно хотя бы читать.
 
Статус
Закрыто для дальнейших ответов.