Ошибки при использовании StyleMapping

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

Septic87

Участник
Топикстартер
Сообщения
29
Реакции
0
Всем привет. У меня очередная проблема.
Задачка состоит в том, чтобы в новый создаваемый документ вставить вордовский документ и заменить стили в нем индизайновскими которые созданы в текущем документе.
Код:
Document newDoc;
...
//*********первый вариант *******
newDoc.CellStyleMappings.Add(sStyleNameFromWord, sStyleNameFromIdesign, idMapType.idStyleMappingRule);// падает - "Отсутствует обязательный параметр "MappingRuleType" метода "Add"."

//*********второй вариант********
  ParaStyleMappings par = newDoc.ParaStyleMappings;
  string myJavaScript     = "var par       = arguments[0];\r";
  myJavaScript  += "var source  = arguments[1];\r";
  myJavaScript  += "var dest      = arguments[2];\r";
  myJavaScript  += "par.Add(source, dest, idMapType.idStyleMappingRule);\r";
  Array myArguments = new object[3] { par, sStyleNameFromWord, sStyleNameFromIdesign };
  m_Application.DoScript(myJavaScript, InDesignServer.idScriptLanguage.idJavascript, myArguments);// падает  -  par.Add не является функцией

Что у меня не верно подскажите кто знает? Может быть настроек не хватает каких либо?
Заранее благодарен.
 
Вообще мало что понятно. Что представляет собой переменная par? Вызов "par.Add()" тоже крайне подозрителен, должно быть "par.add()", если вообще такой метод существует.
 
В коде у меня все есть.
Код:
ParaStyleMappings par = newDoc.ParaStyleMappings;
Насколько я правильно понял это словарь подстановки стилей индизайна вместо тех что импортируются при вставки документа. Таких словарей 5 штук для ячеек, символов, параграфов и тд...
Например создать документ добавить пару стилей параграфа или символа, добавить фрейм и при вставки документа через диалог открытия, поставить галочку "посмотреть параметры". Перед вставкой откроется диалог "параметры импорта ", а там выбрать "настроить импорт стиля" и нажать на преобразование стилей. То там будет именно ParaStyleMappings или CharStyleMappings. В нем же можно подменить все интересующие стили из ворда индизайновскими.

Что касается метода Add, то его сигнатуру выдрал отсюда:
http://jongware.mit.edu/idcs6js/pc_CellStyleMappings.html
Ну и в тлб он выглядит вот так:
Код:
[Guid("C26B9F05-9487-446E-9F1F-04F777278012")]
[InterfaceType(2)]
public interface CellStyleMappings : IEnumerable
{
     [DispId(1668441452)]
     CellStyleMapping Add(string SourceStyleName, string DestinationStyleName, idMapType MappingRuleType);
}
 
Смотри что получается.
Основной скрипт у тебя на VB, как я понял. А запускаешь на выполнение в сервере Javascript. Так не получится ничего хорошего. Плюс передаешь определенную в VB переменную в качестве аргумента в скрипт. Очень сильно сомневаюсь, что так сработает. Вообще аргументы лучше передавать в виде строки, полученной вызовом типа par.toSource();. Не знаю, как это на VB делается.
Опять же, почему не определить par уже в Javascript, примерно так:
PHP:
app.documents[0].cellStyleMappings.add(source_name, dest_name, MapType.STYLE_MAPPING_RULE)
В Javascript методы принято называть с нижнего регистра. С верхнего называются только конструкторы объектов. Поэтому, будет "add()".
 
  • Спасибо
Реакции: Septic87
Спасибо всем за помощь. Но основная моя задача не выполнена. Маппинги (charStyleMappings, paraStyleMappings) у меня заполняются, но после place для фрейма стили не подменяются теми что я указал. Через сам Indesign все работает.
 
Порылся в ком модели нашел у документа и апликейшена свойство LinkedStoryOptions.ApplyStyleMappings. Но включив его все равно не подменяются стили в итоговом документе. Мб еще что надо включить?
 
Статус
Закрыто для дальнейших ответов.