Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Является ли Indesign Ole-сервером?, И вообще Adobe продукты?
alexey
Вставить ник
сообщение 9:12:2005, 13:00
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Можно ли управлять InDesign-ом через OLE?
И другими Adobe-вскими штучками?
biggrin.gif - пока разбирался с PageMakerom выяснилось что от него уже почти отказались - переходим на InDesign

Сообщение отредактировал alexey - 9:12:2005, 14:24
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 11)
demoded
Вставить ник
сообщение 19:12:2007, 10:06
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 2
Регистрация: 19:12:2007
Пользователь №: 14 333



Репутация: - 0 +


Цитата(alexey @ 9:12:2005, 19:00 ) *
Можно ли управлять InDesign-ом через OLE?
И другими Adobe-вскими штучками?
biggrin.gif - пока разбирался с PageMakerom выяснилось что от него уже почти отказались - переходим на InDesign


какраз этим сейчас и занимаюсь
Код
IDApp:=CreateOleObject('Indesign.Application');
IDDoc:= IDApp.Documents.Add;
IDText:=IDDoc.pages.item(1).textFrames.add;
IDText.geometricBounds:=VarArrayOf([0,72,288,288]);
IDText.contents := 'This is some example text.';
Подняться вверх 
 
Сообщение #2
Morpheus
Вставить ник
сообщение 19:12:2007, 10:08
Цитата Ответить 


очень злой модератор
*****

Группа: Lotus team
Сообщений: 2 666
Регистрация: 7:08:2006
Из: Украина, Киев
Пользователь №: 5 807
Специализация: разработчик всякой хрени



Репутация: - 46 +


Для: demoded
Очень рад за вас , но не стоит подимать столь старые темы .
Цитата(alexey @ 9:12:2005, 15:00 )
9:12:2005, 15:00

Думаю за 2 года человек уже нашёл рещение своей проблемы )))
Подняться вверх 
 
Сообщение #3
alexey
Вставить ник
сообщение 14:02:2008, 10:44
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Цитата(Morpheus @ 19:12:2007, 12:08 ) *
Для: demoded
Очень рад за вас , но не стоит подимать столь старые темы .
Думаю за 2 года человек уже нашёл рещение своей проблемы )))

laugh.gif
Еще не нашел biggrin.gif
Если серьезно - то вопрос с автоматизацией отошел на второй план, кроме того было много теории и только сейчас дошли до стадии запуска практики. И опять всплыла та же проблема - передача данных в Indesign. И как раз именно сейчас smile.gif
Самоке смешное - поиск в инете ведет на первой странице на это мое сообщение двухлетней давности, как будто этим больше никто не занимается blink.gif
Подняться вверх 
 
Сообщение #4
alexey
Вставить ник
сообщение 14:02:2008, 10:58
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Цитата(demoded @ 19:12:2007, 12:06 ) *
какраз этим сейчас и занимаюсь
Код
IDApp:=CreateOleObject('Indesign.Application');
IDDoc:= IDApp.Documents.Add;
IDText:=IDDoc.pages.item(1).textFrames.add;
IDText.geometricBounds:=VarArrayOf([0,72,288,288]);
IDText.contents := 'This is some example text.';

Вот-вот - самое оно!
А картинку вставить?
А ты с шаблоном не разбирался? Т.е. у меня задача такая - есть готовый шаблон, подготовленный дизайнерами, теперь его надо заполнить давными, причем самое сложное - привязаться к сетке - текстовой(кажется так называется). Проблема в том что я Indesign практически не знаю, т.е. смотрю как в нем работают, но это и все.... sad.gif А автоматизировать нужно.....
Подняться вверх 
 
Сообщение #5
demoded
Вставить ник
сообщение 19:02:2008, 10:32
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 2
Регистрация: 19:12:2007
Пользователь №: 14 333



Репутация: - 0 +


Цитата(alexey @ 14:02:2008, 16:58 ) *
Вот-вот - самое оно!
А картинку вставить?
А ты с шаблоном не разбирался? Т.е. у меня задача такая - есть готовый шаблон, подготовленный дизайнерами, теперь его надо заполнить давными, причем самое сложное - привязаться к сетке - текстовой(кажется так называется). Проблема в том что я Indesign практически не знаю, т.е. смотрю как в нем работают, но это и все.... sad.gif А автоматизировать нужно.....

картинку вставлять не пробовал. все брал из SDK, который свободно доступен на сайте adobe. больше всего пригодилось это InDesign CS2 Scripting Reference.pdf
с шаблоном в принципе все просто, пусть дизайнеры в шаблоне заполняемые места подпишут ключевыми словами например %NAME%. ты потом открываешь из программы в этом документе Story и заменяешь все ключевики на то что нужно.
в стори представлен только текст из TextFrame.

можно и так, через Find/Replace

The following script fragment shows how to find a specified string of text and replace it with a different string (for the complete script, see ChangeText):
//Clear the find/change preferences.
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
//Set the find options.
app.findChangeTextOptions.caseSensitive = false;
app.findChangeTextOptions.includeFootnotes = false;
app.findChangeTextOptions.includeHiddenLayers = false;
app.findChangeTextOptions.includeLockedLayersForFind = false;
app.findChangeTextOptions.includeLockedStoriesForFind = false;
app.findChangeTextOptions.includeMasterPages = false;
app.findChangeTextOptions.wholeWord = false;
//Search the document for the string "copy" and change it to "text".
app.findTextPreferences.findWhat = "copy";
app.changeTextPreferences.changeTo = "text";
app.documents.item(0).changeText();
//Clear the find/change preferences after the search.
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
Подняться вверх 
 
Сообщение #6
alexey
Вставить ник
сообщение 19:02:2008, 15:14
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Благодарю, сейчас попробую в действии.
Насчет подписывания мне уже советовали, но пока не использовал.
У меня есть файл с описанием структуры объектов Indesign - COM - 3 версии, но описание очень приличное поэтому все никак не могу найти время чтобы его изучить, да и очень уж оно объемное, когда нужно сделать простые вещи.
Насчет Script гляну. Мне крайне интересно - можно ли передать картинку через OLE или ее обязательно надо выгружать в файл.
Подняться вверх 
 
Сообщение #7
alexey
Вставить ник
сообщение 7:05:2008, 16:20
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Решил таки отписаться и заодно задать вопрос.
В общему случае все получилось, причем ничего не надо вручную копировтаь - как и подозревал сам Indesign прекрасно это делает - мастер-шаблон. Все остальное вытягивается из документации.
Но вот пришлось с CS3 перейти на CS - т.к. CS3 не умеет правильно создавать PS файлы для типографии, точнее создает но с ошибками.
И возникла проблема - элементы из библиотеки не ставятся в нужное место. В CS3 все работает красиво и аккуратно, а в CS1 не выставляется высота элемента, координаты по высоте вообще странно - выбирает минимальное значение по обоим точкам и его берет за берет границу, с шириной вроде нормально, хотя может попадать не на ту страницу. Может кто сталкивался?
Подняться вверх 
 
Сообщение #8
zubr
Вставить ник
сообщение 7:05:2008, 21:54
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 899
Регистрация: 19:11:2003
Пользователь №: 133



Репутация: - 11 +


Работал с CS2 - все нормально работает.
Подняться вверх 
 
Сообщение #9
alexey
Вставить ник
сообщение 12:05:2008, 11:27
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Цитата(zubr @ 7:05:2008, 23:54 ) *
Работал с CS2 - все нормально работает.

Вот такой код в CS2 работает или будет работать?:

CODE

function GetGeometricBounds(Bound:TFRect):Olevariant;
begin
Result:=VarArrayOf([Bound.Top,Bound.Left,Bound.Bottom,Bound.Right]);
end;

function GetIndesignLibraryAsset(Indesign:OleVariant; LibraryName, AssetName:string):OleVariant;
var
lib:OleVariant;
i:integer;
AName:string;
begin
Result:=Null;
lib := GetIndesignLibrary(Indesign,LibraryName);

for i:=1 to Lib.Assets.Count do
begin
AName:=Lib.Assets[i].Name;
if ANSIUpperCase(AName)=ANSIUpperCase(AssetName)
then Result:=Lib.Assets[i];
end;
end;

function PlaceIndesignAsset(Indesign, Document, PlaceTo : OleVariant; page_n:integer; Bound:TFRect; LibraryName, AssetName:string):OleVariant;
var
Asset:OleVariant;
page:OleVariant;
p:Olevariant;
bounds:OleVariant;
begin
Asset:=GetIndesignLibraryAsset(Indesign, LibraryName, AssetName);
page:=Document.pages[page_n];
Result:=Asset.PlaceAsset(PlaceTo);

{$IFDEF CS3}
Result.Item[Result.Count].Move(page);
p:=VarArrayOf([Bound.Left, Bound.Top]);
Result.Item[Result.Count].Move(p);
bounds:=GetGeometricBounds(Bound);
Result.Item[Result.Count].GeometricBounds:=bounds;
{$ENDIF}

{$IFDEF CS1}
p:=VarArrayOf([Bound.Left, Bound.Top]);
Result.Item[Result.Count].Move(page,p);
bounds:=GetGeometricBounds(Bound);//правильно, но не работает
или
bounds:=OleVariant(VarArrayOf([Bound.Bottom,Bound.Left,Bound.Bottom+1,Bound.Righ
t]));// неправильно, но зато выставляет нижнюю границу корректно

Result.Item[Result.Count].GeometricBounds:=bounds;
{$ENDIF}
end;

Document и PlaceTo - это фактически и есть текущий документ. TFRect - тот же Rect, только поля - типа extended.
Это мой вариант функции вставки библиотечного элемента, для CS3 работает без вопросов. В CS1 как описал выше. Правда вариант кода для CS2 я тут не описал, не знаю как там правильно, но можно попробовать оба для CS1({$DEFINE CS1}) или CS3 ({$DEFINE CS3}).
Да - сама библиотека должн быть уже открыта.
Подняться вверх 
 
Сообщение #10
zubr
Вставить ник
сообщение 12:05:2008, 16:23
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 899
Регистрация: 19:11:2003
Пользователь №: 133



Репутация: - 11 +


Припоминаю (давновато было) с VarArrayOf у меня Indesign не хотел корректно работать. Я делал VarArrayCreate([0, 3], varInteger);
Подняться вверх 
 
Сообщение #11
alexey
Вставить ник
сообщение Вчера, 21:01
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 33
Регистрация: 30:04:2004
Пользователь №: 470



Репутация: - 0 +


Цитата(zubr @ 12:05:2008, 18:23 ) *
Припоминаю (давновато было) с VarArrayOf у меня Indesign не хотел корректно работать. Я делал VarArrayCreate([0, 3], varInteger);

Не смог сразу ответить.
Попробовал, не помогло, та же картина.
А в CS2 дизайнеры не хотят работать, говорят что интерфейс слишком сильно отличается от CS и CS3. Да и не факт что CS2 корректно выдаст PS файлы.
Подняться вверх 
 
Сообщение #12


Ответить  Новая тема 

 

RSS Текстовая версия Сейчас: 17:05:2008 - 06:34
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net