[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Eigenschaften von Characters bei Umsortierung beibehalten

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Eigenschaften von Characters bei Umsortierung beibehalten

iduser
Beiträge gesamt: 107

9. Jan 2014, 16:35
Beitrag # 1 von 12
Bewertung:
(2826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ein fröhliches Hallo an Alle,
es ist ja bekannt, das mithilfe der Contens-Zuweisung, verschiedene Eigenschaften der Characters nicht übernommen werden. Bis jetzt konnte ich mir immer mit der Methode "move" behelfen... Nun habe ich aber eine Zahlenanordnung (Array) im Text vorliegen, dieses Array soll transponiert werden.

Der Einfachheit habe ich in der Testdatei nur eine "1x6-Matrix".
In dem Beispiel möchte ich, die Reihenfolge der Zahlen umkehren. Dabei sollen die Character-Eigenschaften erhalten bleiben.

Eigentlich müsste man schon beim Einlesen der Characters beginnen, sodass diese nicht in einen String konvertiert werden, bzw. die Characters nicht mit der Methode contents herausziehen? Sehe ich das richtig? Aber dann müssten alle Characters einzeln durchlaufen werden, was bei größeren Dokumenten mit größeren Matrizen länger dauern könnte.

Hat jemand eine Idee – mit Hinsicht auf die Transposition, sprich mit größeren Matrizen – wie man dies bewerkstelligen kann?

Code
var _string = app.selection[0].contents; 
var _array = _string.split(" ");

app.selection[0].contents = _array.reverse().join(" ");

Erste bis letzte Zahl selektieren.

Philipp

Anhang:
test.idml (31.3 KB)
X

Eigenschaften von Characters bei Umsortierung beibehalten

Martin Fischer
  
Beiträge gesamt: 12785

9. Jan 2014, 17:29
Beitrag # 2 von 12
Beitrag ID: #521813
Bewertung:
(2796 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

die Reihenfolge ausgewählter Zeichen kannst Du mit ReverseCharacters.jsx umkehren.

Bin mir aber nicht ganz sicher, ob das das ist, wonach Du suchst.
Es unterscheidet nicht zwischen Zahlen, Buchstaben oder Leerzeichen, sondern kehrt einfach alle Zeichen in der Auswahl um.


als Antwort auf: [#521805]

Eigenschaften von Characters bei Umsortierung beibehalten

iduser
Beiträge gesamt: 107

9. Jan 2014, 17:44
Beitrag # 3 von 12
Beitrag ID: #521819
Bewertung:
(2784 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
danke für deine Antwort. Das würde meine Vermutung bestätigen, alle Characters der Auswahl einzeln durchzugehen.

Zur Erläuterung: Ziel ist es am Ende eine Matrix in dieser Form:
1 2 3
4 5 6
7 8 1/2

in diese umzuwandeln
1 4 7
2 5 8
3 6 1/2

Sprich Zeilen werden zu Spalten und Spalten werden zu Zeilen.
Da bleibt mir wohl nix anderes übrig als die Characters durchzugehen...


als Antwort auf: [#521813]

Eigenschaften von Characters bei Umsortierung beibehalten

WernerPerplies
Beiträge gesamt: 2770

9. Jan 2014, 17:54
Beitrag # 4 von 12
Beitrag ID: #521821
Bewertung:
(2779 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo iduser,

;-)
Da hast Du Dir ja eine wirklich schöne Aufgabe gesucht:

Ich habe jetzt eine Weile rumprobiert und eigentlich keine wirkliche Lösung gefunden.

Vielleich ginge ja Folgendes, so mal als grobe Idee:

Jedes Element des Arrays im Ursprungtext suchen, die Eigenschaften merken - sollten in den TextStyleRanges des Ergebnisse stecken - , dann die Arrayelemente in umgekehrter als Contents speichern, die Elemente wieder suchen und die ursprünglichen Eigenschaften zuweisen.

Alles klar?


als Antwort auf: [#521805]
(Dieser Beitrag wurde von WernerPerplies am 9. Jan 2014, 18:05 geändert)

Eigenschaften von Characters bei Umsortierung beibehalten

WernerPerplies
Beiträge gesamt: 2770

9. Jan 2014, 18:08
Beitrag # 5 von 12
Beitrag ID: #521824
Bewertung:
(2762 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo iduser,

auch nicht probiert, aber vielleicht könnte man das Problem dann relativ einfach mit Hilfe einer temporären Tabelle lösen.

Dann könnte man doch per index auf Zellen und Spalten zugreifen.


als Antwort auf: [#521819]

Eigenschaften von Characters bei Umsortierung beibehalten

Uwe Laubender
Beiträge gesamt: 5321

9. Jan 2014, 20:18
Beitrag # 6 von 12
Beitrag ID: #521834
Bewertung:
(2722 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!

Ja. Mit einer temporären Tabelle geht's.

Angenommen, wir haben folgende Situation wie hier im angehängten Screenshot:
"BeforeScript_TargetSource_Selected.png"

2 Tabellen in jeweils einem Textrahmen nebeneinander, die eine mit (=Source), die andere ohne Inhalt (=Target). Dass die Target-Tabelle keinen Inhalt hat, ist nicht wichtig, dient nur der leichteren Identifizierung.

Der Source-Textrahmen wurde zuerst ausgewählt, dann der Target-Textrahmen; dies gewährleistet in InDesign CS5.5 (und darüber) die Indexreihenfolge der Textrahmen: 0,1.

Folgendes Scriptschnipsel führt dann zum Ziel der Umsortierung wie ima angehängten Screenshot ersichtlich:
AfterScript_TargetSource_Selected.png

Code
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll; 

app.doScript(_SwitchRowsWithColumns, ScriptLanguage.JAVASCRIPT, [], UndoModes.ENTIRE_SCRIPT, "Switch rows with columns of two selected tables");

function _SwitchRowsWithColumns(){

//A little bit of testing:
if(app.selection.length !== 2 || app.selection[0].constructor.name !== "TextFrame" || app.selection[1].constructor.name !== "TextFrame"){
return;
};


//SELECTING BY INDEX DOES WORK IN
//InDesign CS5.5 and above:

//First select SOURCE:
var mySourceTable = app.selection[0].tables[0];

//Then select TARGET:
var myTargetTable = app.selection[1].tables[0];

//Removing contents from TARGET:

myTargetTable.cells.everyItem().contents = "";

var counter = 0;

for(var n=0;n<mySourceTable.columns.length;n++){

for(var c=0;c<mySourceTable.columns[n].cells.length;c++){
mySourceTable.columns[n].cells[c].texts[0].duplicate(LocationOptions.AT_BEGINNING,myTargetTable.cells[counter].insertionPoints[0]);
++counter;
};
};

};


Hab' mir bisher die Test-IDML-Datei noch nicht angeschaut.
Mach' ich aber noch…

Uwe


als Antwort auf: [#521824]
Anhang:
BeforeScript_TargetSource_Selected.png (10.7 KB)   AfterScriptTargetSource_Selected.png (12.0 KB)

Eigenschaften von Characters bei Umsortierung beibehalten

iduser
Beiträge gesamt: 107

9. Jan 2014, 20:25
Beitrag # 7 von 12
Beitrag ID: #521835
Bewertung:
(2719 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,
naja, so knifflig ist es nicht, bis eben auf diese Sache :D
Die Idee mit der Tabelle gefällt mir richtig gut.
Die erste Variante funktioniert nicht so einfach, da ich noch einen Teil verschwiegen hatte. In der ID-Datei wird der mteditor zum darstellen von Formeln verwendet. Die Character-Eigenschaften könnte man sich noch merken, da das Plugin aber auch Marken erstellt (ähnlich wie xml-Tags), werden diese mit "Contents" zerstört. Sie stecken zwar noch drin aber sind nicht mehr richtig greifbar. Die Marken bleiben aber bspw. mit der methode move erhalten... Leider hat das PlugIn keine Schnittstelle für Javascript.

Ich werd das mit der Tabelle mal ausprobieren.
Vielen Dank für den Hinweis.


als Antwort auf: [#521824]

Eigenschaften von Characters bei Umsortierung beibehalten

Uwe Laubender
Beiträge gesamt: 5321

9. Jan 2014, 20:33
Beitrag # 8 von 12
Beitrag ID: #521836
Bewertung:
(2714 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ iduser ] … , da ich noch einen Teil verschwiegen hatte.


Hallo, Philipp!

Ja. Das bedeutet, dass Du in jedem Fall mit Objekten des Typs Text arbeiten musst. Da bieten sich dann die Methoden move() oder/und duplicate() an.

Als Ziele dienen dann auch Objekte vom Typ Text, nämlich insertionPoints.

Die können in Tabellenzellen liegen oder aber auch in temporär bereitgestellten Textrahmen. Bei der ganzen Aktion ist darauf zu achten, dass die transportierten Texte immer in das dafür bereitgestellte Ziel passen (möglichst ohne Textüberlauf zu erzeugen).


als Antwort auf: [#521835]
(Dieser Beitrag wurde von Uwe Laubender am 9. Jan 2014, 20:34 geändert)

Eigenschaften von Characters bei Umsortierung beibehalten

Peter Kahrel
Beiträge gesamt: 182

10. Jan 2014, 01:38
Beitrag # 9 von 12
Beitrag ID: #521851
Bewertung:
(2612 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das kann man viel einfacher machen. Selektiere ein bisschen Text, und dann:

Code
str = app.selection[0]; 
n = str.characters.length;
for (i = 1; i < n; i++){
str.characters[i].move(LocationOptions.before, str.characters[0]);
}


Peter


als Antwort auf: [#521835]

Eigenschaften von Characters bei Umsortierung beibehalten

iduser
Beiträge gesamt: 107

10. Jan 2014, 09:16
Beitrag # 10 von 12
Beitrag ID: #521856
Bewertung:
(2562 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So, es ist geschafft.
im Anhang die Datei, und nachfolgend die Funktion.
(Das Skript setzt eine markierte Tabelle vorraus)

Code
if(!(app.selection[0] instanceof Table)){  
exit();
};

transposeTable(app.selection[0]);

function transposeTable(_table){

var _xy = [_table.columns.length, _table.rows.length];
var _tempTextFrame = app.activeDocument.textFrames.add();
var _diffRows = _diffColumns= 0;

while(_xy[0] < _xy[1]) {
_table.columns.add();
_xy[0] +=1;
_diffColumns++;
}
while(_xy[0] > _xy[1]) {
_table.rows.add();
_xy[1] +=1;
_diffRows++;
}

for(x=0; x < _xy[0]; x++){
for(y=0; y < _xy[1]; y++){
if((_diffRows>0 && x>y) || (_diffColumns>0 && x<y)){
_table.rows[x].cells[y].texts[0].move(LocationOptions.AT_BEGINNING, _tempTextFrame.insertionPoints[0]);
_table.rows[y].cells[x].texts[0].move(LocationOptions.AT_BEGINNING, _table.rows[x].cells[y].insertionPoints[0]);
_tempTextFrame.texts[0].move(LocationOptions.AT_BEGINNING, _table.rows[y].cells[x].insertionPoints[0]);
_tempTextFrame.contents = "";
}
}
}

while(_diffColumns != 0){
_table.rows[-1].remove();
_diffColumns--;
}
while(_diffRows != 0){
_table.columns[-1].remove();
_diffRows--;
}
_tempTextFrame.remove();

}


Es funktioniert sogar auch mit nichtquadratischen Matrizen (Tabellen). Kommentare hab ich mir grad aus Gründen des Zeitmangels erspart, aber ich denke dass jeder von euch durchsieht.

Einen großen Dank an alle Beteiligten.
Alleine hätte es wahrscheinlich eine Weile gedauert bis ich drauf gekommen wäre ;)

Philipp


als Antwort auf: [#521836]
Anhang:
Transpose.idml (29.1 KB)

Eigenschaften von Characters bei Umsortierung beibehalten

WernerPerplies
Beiträge gesamt: 2770

10. Jan 2014, 09:30
Beitrag # 11 von 12
Beitrag ID: #521857
Bewertung:
(2556 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

es freut mich, dass Du mit meiner Idee etwas anfangen konntest.

Ich ging dabei ursprünglich von Deinem Textbeispiel aus, das sollte mit
textObject.convertToTable()
und anschließendem
tableObject.convertToText()
auch funktionieren.


als Antwort auf: [#521856]

Eigenschaften von Characters bei Umsortierung beibehalten

iduser
Beiträge gesamt: 107

10. Jan 2014, 09:35
Beitrag # 12 von 12
Beitrag ID: #521859
Bewertung:
(2554 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Genau, der Rest sollte nun kein Problem mehr darstellen.


als Antwort auf: [#521857]
X

Aktuell

PDF / Print
enfocus_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
18.06.2024

Online
Dienstag, 18. Juni 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow
Veranstaltungen
02.07.2024

Online
Dienstag, 02. Juli 2024, 10.00 - 10.30 Uhr

Webinar

In diesen beiden kostenlose Webinaren erfahren Sie, wie Sie mit Hilfe von Enfocus Griffin und dem Impressed Workflow Server Ihren LFP-Workflows optimieren können. 18.06.2024: So optimieren Sie Ihre Prozesse mit Enfocus Griffin 02.07.2024: So sparen Sie Zeit und Geld mit Impressed Workflow Server in der LFP-Edition Griffin: Griffin ist das leistungsstarke Kraftpaket für das automatische Nesting im Großformatdruck. Dank eines ausgeklügelten, KI-basierten Nesting-Algorithmus können Sie mit Griffin Vorlagen schnell und effizient vernutzen – und das klappt auch mit unregelmäßigen Formen perfekt. Das spart Ihnen unzählige Stunden, die Sie bisher mit dem manuellen Nesting und Ausschießen verbracht haben. Einige wichtige Funktionen ≡ Anlage von Beschnittzugaben ≡ Automatische Erzeugung der Schnittkontur ≡ Erstellung von Strichcodes, Textmarkierungen und Registrierungen IWS LFP Edition: Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Mit dem IWS LFP Edition automatisieren Sie Ihre Produktion von der Übernahme der Daten aus dem ERP-System bis zur Erzeugung der verschachtelten Druckform und der Übergabe an den RIP. Phoenix Core ist eine hochentwickelte KI-Technologie für die Planung und das Nesting von Druckerzeugnissen. Anders als herkömmliche Ausschießlösungen arbeitet Phoenix nicht auf Basis von Vorlagen, sondern erzeugt entsprechend der Maschinen- und Produktionsanforderungen druckfertige Layouts „on-the-fly“.

kostenlos

Ja

Organisator: Impressed GmbH

Kontaktinformation: E-Mailschulungen AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=328

So optimieren Sie Ihren LFP-Workflow