2016-04-01 3 views
1

Я разработал скрипт для inDesign, в котором цикл inDesign файлов 1 на 1, по страницам, сканирует текстовые фреймы, находит определенные коды внутри текста и для каждого кода, который он проверяет, внутри списка, если да, сценарий будет вставлять небольшое изображение после кода, если скрипт не переходит к следующему текстовому фрейму.InDesign Script - Нижний колонтитул стола и точка ввода

Поскольку пример лучше, что большой разговор, вот пример:

enter image description here

После кода имеет это маленькое черное/серое изображение вставляется. Это отлично работает для каждого кода, за исключением кодов в последней строке таблицы.

У меня есть несколько вопросов, прежде чем обращаться за помощью: -Script правильно определить код (я даже могу отредактировать текст со сценарием, чтобы убедиться). - В ячейке таблицы достаточно места для вставки изображения (я также три, чтобы увеличить высоту строки). -I попытался изменить размер изображения, уменьшить его размер. -The скрипт правильно добавить изображение, если добавить пустую строку после последней ... так что это действительно последняя проблема строки ...

Теперь вот часть сценария, которые не

 app.findTextPreferences.findWhat = currentREF; 
     var myFoundItems = app.activeDocument.findText(); 

     for (var bh = 0; bh < myFoundItems.length; bh++) { 


     myLastIns = myFoundItems[bh].insertionPoints.length; 
     myInsPointOk = myFoundItems[bh].insertionPoints[myLastIns - 1]; 

     if (bh == 0) { 
      myTf = myInsPointOk.parentTextFrames[0]; 
     } 

     try { 
      //Insert/place the logo 
      var myImgPath = logoImage; 
      var myBlockImg = myInsPointOk.rectangles.add({strokeWeight: 0, strokeColor: "None", fillColor: "None", geometricBounds: [ 0, 0, 1, 1 ]}); 
      myBlockImg.contentType = ContentType.graphicType; 
      myBlockImg.anchoredObjectSettings.anchoredPosition = AnchorPosition.INLINE_POSITION; 
      myBlockImg.anchoredObjectSettings.anchorXoffset = 0; 
      myBlockImg.anchoredObjectSettings.anchorYoffset = 0; 
      myBlockImg.place(File(myImgPath)); 
      myBlockImg.fit(FitOptions.FRAME_TO_CONTENT); 
     } catch (e) { 

      //Warning, the code has been find but the script didn't success to insert it 
      $.writeln("La référence " + normalFormatRef + " à été trouvée dans le fichier " + app.activeDocument.name + " mais le script n'à pas réussit à insérer le picto."); 
      arrError.push("La référence " + normalFormatRef + " à été trouvée dans le fichier " + app.activeDocument.name + " mais le script n'à pas réussit à insérer le picto."); 

     } 
     } 

Насколько я понимаю, скрипт не находит точку вставки внутри таблицы последней строки ... но почему? Или, может быть, я не правильно думаю ...

В конце концов, остановка сценария на линии каждый раз, когда пытаюсь добавить изображение на последнем ряду ...

 var myBlockImg = myInsPointOk.rectangles.add({strokeWeight: 0, strokeColor: "None", fillColor: "None", geometricBounds: [ 0, 0, 1, 1 ]}); 

Вот почему Я предполагаю, что это точка ввода, которая терпит неудачу.

+0

Это работает, если вы используете '..findText (true)', чтобы получить список найденных предметов в обратном порядке? Если это так, я могу объяснить, почему :) – usr2564301

+0

Thanx, но это не сработало :( –

ответ

1

Во-первых спасибо за ответы! Тогда я, наконец, нашел решение, я отправляю ниже:

if (myFoundItems[bh].parent.constructor.name == "Cell") { 
 
     //Only for text include in cells, temporary increase the height of the parent's row 
 
     var previousRowHeight = myFoundItems[bh].parent.minimumHeight; 
 
     myFoundItems[bh].parent.minimumHeight = "15mm"; 
 
     myFoundItems[bh].parent.parent.parent.fit(FitOptions.FRAME_TO_CONTENT); 
 
} 
 

 
     var myBlockImg = myFoundItems[bh].parent.insertionPoints[-1].rectangles.add({strokeWeight: 0, strokeColor: "None", fillColor: "None", geometricBounds: [ 0, 0, 0.1, 0.1 ]}); 
 
     myBlockImg.contentType = ContentType.graphicType; 
 
     myBlockImg.anchoredObjectSettings.anchoredPosition = AnchorPosition.INLINE_POSITION; 
 
     myBlockImg.anchoredObjectSettings.anchorXoffset = 0; 
 
     myBlockImg.anchoredObjectSettings.anchorYoffset = 0; 
 
     myBlockImg.place(File(myImgPath)); 
 
     myBlockImg.fit(FitOptions.FRAME_TO_CONTENT); 
 

 
if (myFoundItems[bh].parent.constructor.name == "Cell") { 
 
     //Only for text include in cells, reset the height of the parent's row 
 
     myFoundItems[bh].parent.minimumHeight = previousRowHeight; 
 
     myFoundItems[bh].parent.parent.parent.fit(FitOptions.FRAME_TO_CONTENT); 
 
}

Чтобы объяснить какое-то время, что я узнал, было увеличение высоты Ей была недостаточна, необходимо также, чтобы соответствовать родителю текстовый блок.

0

Ничего очевидно. Позвольте мне предложить такой подход. Я обычно выбираю стили объектов, а не редактирую свойства объекта внутри скрипта. Это позволяет пользователю легко редактировать внешний вид и местоположение объекта после запуска сценария. Он также избегает подходящего вызова.

var main = function(){ 
 
\t var doc, fgp, cgp, found = [], n = 0, text, parent, rect, os, 
 
\t osProps = { 
 
\t \t \t name:"picto", 
 
\t }, 
 
\t picto = File (Folder.desktop+"/picto.ai"), 
 
\t uip = app.scriptPreferences.properties; 
 
\t 
 
\t if (!app.properties.activeDocument) return; 
 
\t 
 
\t if (!picto.exists) { 
 
\t \t alert("The picto file could't be found!"); 
 
\t \t return; 
 
\t } 
 

 
\t doc = app.activeDocument; 
 
\t fgp = app.findGrepPreferences.properties; 
 
\t cgp = app.changeGrepPreferences.properties; 
 
\t 
 
\t app.findGrepPreferences = app.changeGrepPreferences = null; 
 
\t 
 
\t app.findGrepPreferences.findWhat = "(\\d{2}\\.){4}\\d{2}"; 
 
\t 
 
\t found = doc.findGrep(); 
 
\t n = found.length; 
 
\t 
 
\t if (!n) return; 
 
\t 
 
\t app.scriptPreferences.enableRedraw = false; 
 
\t app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT; 
 
\t 
 
\t os = doc.objectStyles.item ("picto"); 
 
\t !os.isValid && os = doc.objectStyles.add(osProps); 
 
\t 
 
\t while (n--) { 
 
\t \t text = found[n]; 
 
\t \t parent = text.parent; 
 
\t \t if (parent instanceof Cell 
 
\t \t && parent.parentRow.cells[-1]==parent) { 
 
\t \t \t rect = text.insertionPoints[-1].rectangles.add({geometricBounds: [ 0, 0, 1, 1 ]}); 
 
\t \t \t rect.appliedObjectStyle = os; 
 
\t \t \t rect.place (picto); 
 
\t \t } 
 
\t } 
 
\t 
 
\t app.findGrepPreferences.properties = fgp; 
 
\t app.changeGrepPreferences.properties = cgp; 
 
\t app.scriptPreferences.properties = uip; 
 
} 
 

 
var u; 
 
app.doScript (main, u, u, UndoModes.ENTIRE_SCRIPT, "Add picto");

Также я выбрал Grep над текстом для поиска текста, как это может избежать петли через исх. Однако это может быть не очень хорошо, если ссылки имеют переменные шаблоны.

The result…

 Смежные вопросы

  • Нет связанных вопросов^_^