2016-04-01 10 views
1

Ich habe ein Skript für inDesign entwickelt, das inDesign-Dateien Seite für Seite 1 x einscodiert, Textrahmen scannt, bestimmte Codes im Text findet und für jeden Code prüft, ob der Code ist In einer Liste, wenn ja, fügt das Skript ein kleines Bild nach dem Code ein, wenn nicht das Skript zum nächsten Textrahmen übergeht.InDesign Script - Tabellenfuß und Einfügepunkt

Weil Beispiel ist besser, dass große Rede, hier ein Beispiel:

enter image description here

Nach Code es dieses kleine schwarz/grau Bild eingefügt hat. Das funktioniert perfekt für jeden Code, außer für die Codes in der letzten Tabellenzeile.

Ich habe mehrere Punkte überprüfen, bevor Sie um Hilfe bitten: -Script erkennen den Code richtig (ich kann sogar den Text mit dem Skript bearbeiten, um sicherzustellen, dass). -Die Tabellenzelle hat genug Platz, um das Bild einzufügen (ich habe auch versucht, der Reihe eine höhere Höhe zu geben). -Ich habe versucht, das Bild zu verkleinern, es kleiner zu machen. -Der Skript hinzufügen das Bild korrekt, wenn ich eine leere Zeile nach dem letzten hinzufügen ... so ist es wirklich eine letzte Reihe Problem ...

Hier ist der Teil des Skripts, das

 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."); 

     } 
     } 
scheitern

Was ich denke ist, dass das Skript nicht den Einfügepunkt in der Tabelle der letzten Zeile findet ... aber warum? Oder vielleicht tun denke ich nicht richtig ...

Am Ende, das Skript Stopp auf dem jedes Mal Linie versuchen, ein Bild auf der letzten Zeile hinzufügen ...

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

Aus diesem Grund Ich vermute, dass der Einfügepunkt fehlschlägt.

+0

Funktioniert es, wenn Sie '..findText (true)' verwenden, um die Liste der gefundenen Elemente in umgekehrter Reihenfolge zu erhalten? Wenn ja, kann ich erklären warum :) – usr2564301

+0

Danke, aber es hat nicht funktioniert :( –

Antwort

1

Zunächst Danke für eure Antworten! Dann endlich die Lösung fand ich, ich poste unter:

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); 
 
}

eine Weile zu erklären, was fand ich heraus, Erhöhung der Körpergröße Reihe war nicht genug, es benötigt auch die Eltern passen Textblock.

0

Nichts offensichtlich. Lassen Sie mich diesen Ansatz vorschlagen. Ich wähle im Allgemeinen Objektstile, anstatt Objekteigenschaften im Skript zu bearbeiten. Dadurch kann der Benutzer das Erscheinungsbild und den Speicherort des Objekts nach dem Ausführen des Skripts problemlos bearbeiten. Es vermeiden Sie auch den passenden Anruf.

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");

Auch nahm ich Grep über den Text für die Textsuche, da sie eine Schleife durch die ref vermeiden kann. Es ist jedoch möglicherweise keine gute Übereinstimmung, wenn die Refs variable Muster haben.

The result…

Verwandte Themen