hilfdirselbst.ch
Facebook Twitter gamper-media
Ramius
Beiträge: 202
18. Nov 2013, 17:01
Beitrag #1 von 4
Bewertung:
(903 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Marginalie nimmt falsche Zeichen


Hallo Zusammen

Bei folgenden Zeilen sollte die erste Zahl vor dem Schrägstrich in einem verankerten Objekt bewegt werden. Der rote Textbaustein ": SRK #/##" sollte danach verschwinden.

PflegehelferIn SRK, Basismodul: SRK 3/14
PflegehelferIn SRK, Aufbaumodul: SRK 2/14
PflegehelferIn SRK, Basismodul: SRK 3/14

Mein Script erstellt zwar ein korrektes verankertes Objekt, bewegt wird aber nicht ein sondern zwei ganz andere Zeichen.
Code
#target InDesign  
/*Bestimmte Zeichen werden via Grep gesucht und in eine verankerte Textbox mit dem Namen "marginalie" verschoben.
*/
if (app.documents.length > 0 )
{
createInlineText();
}
else
{
alert ("Bitte Dokument öffnen")
}

function createInlineText()
{
var _doc = app.activeDocument;

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;

// Reduzierung der Leerzeichen
app.findGrepPreferences.findWhat = "(?<=: ) +(?=SRK \\d{1,}\\/\\d{1,})";
app.changeGrepPreferences.changeTo = "";
_doc.changeGrep();

// Setzen der Sucheinstellungen
app.findGrepPreferences.findWhat = ": SRK (\\d{1,})\\/\\d{1,}";
app.changeGrepPreferences.changeTo = "$1";

// Suchen und Ergebnisse in Variable speichern
var _result = _doc.changeGrep();

// Den Text in einen neuen Rahmen verschieben
for (var n = _result.length-1; n >= 0; n--)
{
var _a = _result[n].paragraphs[0].insertionPoints[0];
var _newTf = _a.textFrames.add();
var _breite = 10;
var _hoehe = 8;
_newTf.geometricBounds = [0,0,_hoehe,_breite];
_newTf.appliedObjectStyle = _doc.objectStyles.itemByName("marginalie", false);
_result[n].move(LocationOptions.AT_BEGINNING, _newTf.insertionPoints[0]);
_newTf.parentStory.texts.firstItem().appliedParagraphStyle = _newTf.appliedObjectStyle.appliedParagraphStyle;
}
}

Gearbeitet wir in Indesign CS6 auf MacOS 10.8.5

Ich wäre schon froh, wenn irgend ein Javascript-Profi hier ein Lösungsansatz hat.

Schöne Grüsse, Radius
Top
 
X
WernerPerplies
Beiträge: 2177
18. Nov 2013, 17:25
Beitrag #2 von 4
Beitrag ID: #519866
Bewertung:
(888 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Marginalie nimmt falsche Zeichen


Hallo Ramius,

ich hätte hier ein (allerdings kostenpflichtiges) Skript, das eventuell Deine Aufgabe erfüllen könnte.

Für Fragen stehe ich gerne zur Verfügung.

WpsCreateAnchoredFrames – Adobe InDesign Skript zur automatischen Erzeugung verankerter Rahmen

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#519864] Top
 
Martin Fischer  M  p
Beiträge: 11784
18. Nov 2013, 18:28
Beitrag #3 von 4
Beitrag ID: #519869
Bewertung:
(868 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Marginalie nimmt falsche Zeichen


Hallo Ramius,

in Zeile 30 speicherst Du Textobjekte eines Ersetzenvorgangs, der Textmenge verändert (hier reduziert) in eine Variable, die Du anschließend in einer Schleife rückwärts in die Marginalrahmen verschiebst (wodurch die Textmenge in den betroffenen Textabschnitten abermals reduziert wird.


Spontan kann ich zwar die Ursache des dabei entstehenden Fehlers, der falsche Adressierung der zu verschiebenden Textobjekte, nicht erkennen.

Aber ich würde in dieser Situation empfehlen, eins nach dem anderen zu machen:
Erst den Ersetzenvorgang in Zeile 30 durch einen einfachen Suchvorgang ersetzen ( var _result = _doc.findGrep(); ) und die Reduzierung des Textes in den Marginalienrahmen später (nach der Erstellung aller Marginalien) vornehmen.

Viele Grüße
Martin
als Antwort auf: [#519864]
(Dieser Beitrag wurde von Martin Fischer am 18. Nov 2013, 18:41 geändert)
Top
 
Ramius
Beiträge: 202
19. Nov 2013, 07:56
Beitrag #4 von 4
Beitrag ID: #519882
Bewertung:
(787 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Marginalie nimmt falsche Zeichen


Hallo Martin

Der Hinweis war in der Tat die Lösung. Zuerst den Ersetztenvorgang ausgeführt. Dann erst am Ende nochmals den Text bereinigt.
Der Vollständigkeit halber liste ich das Script hier nochmals auf.
Code
#target InDesign  
/*Bestimmte Zeichen werden via Grep gesucht und in eine verankerte Textbox mit dem Namen "marginalie" verschoben.
*/
if (app.documents.length > 0 )
{
createInlineText();
}
else
{
alert ("Bitte Dokument öffnen")
}

function createInlineText()
{
var _doc = app.activeDocument;

// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = app.changeGrepPreferences = null;

// Setzen der Sucheinstellungen, es wir nach der Zeichenkette, Beispiel ": SRK 1/14" gesucht
app.findGrepPreferences.findWhat = "(?<=: SRK )\\d+(?=\\/\\d+)";
app.changeGrepPreferences.changeTo = "$1";

// Suchen und Ergebnisse in Variable speichern
var _result = _doc.findGrep();

// Den Text in einen neuen Rahmen verschieben
for (var n = _result.length-1; n >= 0; n--)
{
var _a = _result[n].paragraphs[0].insertionPoints[0];
var _newTf = _a.textFrames.add();
var _breite = 10;
var _hoehe = 8;
_newTf.geometricBounds = [0,0,_hoehe,_breite];
_newTf.appliedObjectStyle = _doc.objectStyles.itemByName("marginalie", false);
_result[n].move(LocationOptions.AT_BEGINNING, _newTf.insertionPoints[0]);
_newTf.parentStory.texts.firstItem().appliedParagraphStyle = _newTf.appliedObjectStyle.appliedParagraphStyle;
_result[n].contents = "";
}

//Text wird bereinigt
app.findGrepPreferences.findWhat = ": SRK \\/\\d+";
app.changeGrepPreferences.changeTo = "";
_doc.changeGrep();

}


Vielen herzlichen Dank
Ramius
als Antwort auf: [#519869] Top
 
X