КОНЕЧНАЯ ЦЕЛЬ
В конечном итоге мне нужно экспортировать мой файл InDesign в HTML, чтобы каждый элемент уровня блока HTML имел какой-то уникальный идентификатор (неважно, какой он, если он уникален), уникальный идентификатор, который также остается в InDesign и не изменяется, независимо от изменений, внесенных пользователем в содержимое InDesign, и экспортируется в HTML с каждым элементом. Что-то вроде этого:
<p data-id = "4j8w53">My first paragraph</p>
<p data-id = "k39dh2">My second paragraph</p>
И затем, когда пользователь InDesign изменяет контент и повторно экспортирует в HTML, существующие идентификаторы остаются, например:
<p data-id = "4j8w53">My first paragraph is awesome!</p>
<p data-id = "lq09cf">My inserted paragraph</p>
<p data-id = "k39dh2">My second paragraph</p>
Если кто-то знает простой способ сделать это, я бы хотел его услышать.
ПЛАН НОМЕР ПЕРВЫЙ
Пытаясь понять это, я решил сопоставить все в файле InDesign с XML, затем добавить атрибуты моего идентификатора к элементам XML с помощью пользовательского сценария JS, а затем экспортировать XML как HTML с помощью другого пользовательского сценария JS. Поскольку элементы XML фактически сопоставляются с элементами InDesign, идентификаторы останутся с ними по мере изменения текста.
Вот проблема: похоже, я не могу сопоставить весь мой контент InDesign с XML с помощью функции mapStylesToXMLTags(). У меня есть куча stories в файле, и один из них никогда не отображается в XML, когда я его экспортирую. Его просто нет.
Если бы я мог просто заставить весь контент отображаться в экспортированном XML, когда я использую mapStylesToXMLTags(), это, вероятно, решило бы мою проблему.
Или, если есть другой механизм сопоставления, который фактически отображает все мои элементы в XML и сохраняет сопоставления, это также может сработать.
ПЛАН НОМЕР ВТОРОЙ
Если я рекурсивно перебираю allPageItems в app.documents[0] и вручную создаю XML вместо использования mapStylesToXMLTags(), то недостающий объект отображается точно так же, как и все остальное.
Однако тогда идентификаторы, которые я даю XML-элементам, не прикрепляются к элементам InDesign, поскольку эти элементы фактически официально не «отображаются» на XML-элементы. Они не обновляются автоматически при изменении. Мне пришлось бы перезаписать весь XML при внесении изменений в файл InDesign, что исключает согласованность значений идентификаторов данных.
Кроме того, когда я делаю это таким образом, все не в порядке и не соответствует тому, как это было выложено в файле InDesign.
План номер один по-прежнему кажется наиболее многообещающим, если бы я мог просто нанести на карту весь контент.
ПОЖАЛУЙСТА, ПРОСТО НА МЕНЯ
Надеюсь, все ясно. FWIW, я парень JS / HTML, а не парень InDesign. Я новичок в InDesign и просто пытаюсь понять, как сделать этот процесс доступным для пользователей InDesign в моей организации.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если тексты отбрасываются, возможно, что отображение не завершено, или текст не может быть помечен тегами, например, сноски, возможно, текстовые переменные или подписи. Чтобы включить их в цикл, вам нужно будет преобразовать их в обычный текст перед экспортом. Но на всякий случай вот простой сценарий. Вы можете попробовать и посмотреть, улавливает ли он проблемные тексты.
//MAIN ROUTINE
var main = function() {
var doc = app.properties.activeDocument,
fgp = app.findGrepPreferences.properties,
fcgo = app.findChangeGrepOptions.properties,
found, n = 0, text, pTag, xe;
//Exit if no documents open
if ( !doc ) {
alert("You need an open document" );
return;
}
//Setting F/R Grep
app.findGrepPreferences = app.findChangeGrepOptions = null;
app.findGrepPreferences.properties = {
findWhat : "^.+",
}
app.findChangeGrepOptions.properties = {
includeFootnotes:false,
includeHiddenLayers:true,
includeLockedLayersForFind:true,
includeLockedStoriesForFind:true,
includeMasterPages:true,
}
//Adding "p" tag if needed
pTag = doc.xmlTags.itemByName("p");
!pTag.isValid && pTag = doc.xmlTags.add({name:"p"});
//Getting paragraphs occurences
found = doc.findGrep();
n = found.length;
while ( n-- ) {
text = found[n];
xe = text.associatedXMLElements;
//Adding "p" tags with ids if needed
if ( !xe.length || xe[0].markupTag.name! = "p") {
doc.xmlElements[0].xmlElements.add( pTag, text ).xmlAttributes.add('id', guid () );
}
}
//Reverting initial F/R settings
app.findGrepPreferences.properties = fgp;
app.findChangeGrepOptions.properties = fcgo;
}
//Returns unique ID
function guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}
var u;
//Run
app.doScript ( "main()",u,u,UndoModes.ENTIRE_SCRIPT, "The Script" );Может быть ошибка. Я прекрасно могу экспортировать. Какую версию вы используете? Вы в курсе? Возможно, содержимое слишком велико. Попробуйте установить фиктивный атрибут вместо UUID и посмотрите, экспортирует ли InDesign без сбоев. Это нужно, чтобы узнать, виноват ли UUID.
Очевидно, объект, который не был сопоставлен с XML, был связанным файлом InCopy, который был заблокирован от любого редактирования. Чтобы сопоставить его с XML, мне пришлось щелкнуть внутри него, а затем выбрать «Правка»> «InCopy»> «Оформить». После этого он без труда нанес на карту, используя мой «План номер один», приведенный выше.
Каждый раз, когда я пытаюсь экспортировать сгенерированный из него XML, происходит сбой InDesign.