[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

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

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

24. Jan 2011, 18:20
Beitrag # 1 von 22
Bewertung:
(22581 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Skriptkönner,

ich versuche nun schon seit geraumer Zeit erfolglos folgendes hinzubekommen (ist Teil meines letzten Postings):

Wie kann ich einen Absatz mit einem bestimmten Absatzformat finden, z. B. "Dia_A"?
Wenn ich den gefunden habe, möchte ich den kompletten Absatz markieren und ausschneiden.

Ciao
Uli

P.S. gibt es im Netz irgendwo eine komplette Referenz für InDesign Javascript?
Hier Klicken X

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

24. Jan 2011, 18:48
Beitrag # 2 von 22
Beitrag ID: #462763
Bewertung:
(22539 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uli,

ganz geschwinde zumindest eine Antwort auf diese Frage.

Antwort auf: gibt es im Netz irgendwo eine komplette Referenz für InDesign Javascript?


Die Referenz im CHM- und im HTML-Format findest Du in InDesign JavaScript Help.


Versuche Copy, Cut & Paste möglichst zu vermeiden und verwende statt dessen den duplicate- bzw. den move-Befehl:

Zu kopierenden/verschiebenden Text adressieren;
Ziel bestimmen;
dorthin transportieren

Viele Grüße
Martin




als Antwort auf: [#462762]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

25. Jan 2011, 13:02
Beitrag # 3 von 22
Beitrag ID: #462796
Bewertung:
(22477 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Wie kann ich einen Absatz mit einem bestimmten Absatzformat finden, z. B. "Dia_A"?


Das Grundgerüst für eine Suche mit bestimmten Parametern und der Behandlung der Treffer sieht in etwa so aus:

Code
// Zurücksetzen der Sucheinstellungen 
app.findTextPreferences = null;

// Setzen ser Sucheinstellungen
app.findTextPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( 'Standard' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findText();

// Mit dem Ergebnis was machen
for (var i = result.length-1; i >= 0; i--)
result[i].move( LocationOptions.AFTER, result[i].parentStory.insertionPoints.lastItem() );

// Zurücksetzen der Sucheinstellungen
app.findTextPreferences = null;


Hier werden alle gefundenen Absätze ans Ende des jeweiligen Textabschnitts (nach dem letzten Einfügepunkt) verschoben.

Gib hier als Ziel z.B. den ersten Einfügepunkt Deines Textrahmens an.

Code
result[i].move( LocationOptions.AFTER, myTextframe.insertionPoints.firstItem() ); 


Viele Grüße
Martin




als Antwort auf: [#462762]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

25. Jan 2011, 14:48
Beitrag # 4 von 22
Beitrag ID: #462812
Bewertung:
(22458 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen Dank für die Antwort. Ich tu mir noch ziemlich schwer, die Konstrukte wirklich zu verstehen ...

Ich habe in der Zwischenzeit mein Skript so hinbekommen, dass es ein bestimmtes Absatzformat sucht, den Absatz markiert und ausschneidet. Danach wird die Tabelle an dieser Stelle eingesetzt und in die erste Zelle (ist aber eine 1×1-Tabelle, ich brauche nur die Umrahmung) der ausgeschnittene Text eingesetzt.

Ich habe aber noch das Problem, dass sich zu diesem Zeitpunkt der Cursor innerhalb der Tabelle befindet, sodass bei einem weiteren Aufruf das Ganze innerhalb der Tabelle ausgeführt wird!

Ich suche also noch eine Anweisung, wie ich den Cursor aus der Tabelle an den Anfang des nächsten Absatzes platzieren kann. Kannst Du mir da weiterhelfen? Wenn ich das gelöst habe, kann ich nämlich eine Schleife bauen, damit alles für den Rest des Dokuments gemacht wird.

Ciao
Uli


als Antwort auf: [#462796]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

25. Jan 2011, 15:29
Beitrag # 5 von 22
Beitrag ID: #462816
Bewertung:
(22449 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Ich suche also noch eine Anweisung, wie ich den Cursor aus der Tabelle an den Anfang des nächsten Absatzes platzieren kann.


Versuch's mal damit.

Code
if (app.selection.length != 0 && app.selection[0].hasOwnProperty('baseline') && app.selection[0].parent.constructor.name == 'Cell') 
{
var a_table = app.selection[0].parent.parent;
a_table.storyOffset.paragraphs.firstItem().insertionPoints.lastItem().select();
}
else
alert('Der Cursor ist wider Erwarten nicht in einer Tabelle.');


Viele Grüße
Martin




als Antwort auf: [#462812]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

25. Jan 2011, 17:12
Beitrag # 6 von 22
Beitrag ID: #462851
Bewertung:
(22434 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

super, funktioniert einwandfrei! Vielen Dank, ich werde auch versuchen zu verstehen, was es eigentlich macht ;-)

In diesem Zusammenhang noch eine Frage zur Grep-Suche:
Nach Eingabe der "app.findGrepPreferences" speichere ich das Ergebnis in
Code
var found_items = myDoc.findGrep(); 

Ist denn die folgende Konstruktion korrekt, mit der ich das Ergebnis markieren und später ausschneiden will?
Code
//    myCounter = found_items.length-1; 
// ich habe nicht verstanden, was das ".length-1" macht??
myCounter = 1;
// ich befürchte das ist fake ...
// Select and copy the found text
var current_item = found_items[myCounter];
//var found_text = current_item.paragraphs.firstItem();
var found_text = current_item;
app.selection = found_text;

Oder gibt es da etwas einfacheres bzw. muss ich etwas zurücksetzen, damit der nächste Absatz mit dem Format gefunden werden kann?

Ciao
Uli

P.S. gibt es eigentlich eine gute Einführung zu JavaScript für InDesign? Das Material von Adobe kommt mir sehr lückenhaft vor.


als Antwort auf: [#462816]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

25. Jan 2011, 18:09
Beitrag # 7 von 22
Beitrag ID: #462855
Bewertung:
(22416 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: // ich habe nicht verstanden, was das ".length-1" macht??


Es geht um den Zähler in einer Schleife rückwärts.
Anfang ist der das letzte gefundene Objekt.
In JavaScript (das mit 0 zu zählen anfängt) hat dieses Objekt den Index Anzahl der Elemente -1.

Deinen Code verstehe ich nicht.
Aber mit GREP müsste der obige Code für Deine Zwecke etwa so aussehen:

Code
app.findGrepPreferences = null;   

// Setzen der Sucheinstellungen
app.findGrepPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( 'Standard' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findGrep();

// Mit dem Ergebnis was machen
if (result.length > 0)
{
result[0].select();
app.activeWindow.zoomPercentage= app.activeWindow.zoomPercentage;
}
// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = null;



Antwort auf: P.S. gibt es eigentlich eine gute Einführung zu JavaScript für InDesign?


Für InDesign CS3/4: Scripting InDesign CS3/4 with JavaScript

Schon etwas in die Jahre gekommen, die dt. Übersetzung von Peter Kahrels Scripting InDesign with JavaScript: InDesign mit JavaScript automatisieren (für CS2/3).

Demnächst (April/Mai 2011) erwarte ich mit Spannung ein neues, umfangreicheres Einführungsbuch in dt. Sprache.

Viele Grüße
Martin




als Antwort auf: [#462851]
(Dieser Beitrag wurde von Martin Fischer am 25. Jan 2011, 18:26 geändert)

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

25. Jan 2011, 18:45
Beitrag # 8 von 22
Beitrag ID: #462859
Bewertung:
(22401 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen Dank für die schnelle Antwort und den Literaturempfehlungen. Ich nerve hoffentlich nicht zu sehr ...

Dein
Code
if (result > 0)  
result[0].select();

scheint aber nichts zu machen.
Wenn ich das von Dir verpönte "app.cut();" teste, erhalte eine Fehlermeldung "Cannot copy/cut due to invalid selection state."

Ciao
Uli


als Antwort auf: [#462855]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

25. Jan 2011, 18:53
Beitrag # 9 von 22
Beitrag ID: #462860
Bewertung:
(22397 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich nochmal. Funktioniert schon, aber es wird immer der erste Absatz im Dokument genommen, d. h. beim zweiten Aufruf des Skript wird wieder der erste Absatz bearbeitet. Ich will aber dann den nächsten mit diesem Format finden ... Hat das etwas mit ".firstItem()" zu tun"?

Ciao
Uli


als Antwort auf: [#462859]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

25. Jan 2011, 19:38
Beitrag # 10 von 22
Beitrag ID: #462867
Bewertung:
(22387 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nein, das hat damit zu tun, daß ich Dich falsch verstanden und die Schleife rausgenommen habe.

Bau die Schleife wieder ein.

Allerdings wir das Skript auch damit bei erneuter Ausführung genau dort starten, wie beim ersten Mal, wenn sich am Kontext (Absätze mit dem AF) nichts ändert.

Viele Grüße
Martin




als Antwort auf: [#462860]
(Dieser Beitrag wurde von Martin Fischer am 25. Jan 2011, 19:43 geändert)

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

26. Jan 2011, 06:53
Beitrag # 11 von 22
Beitrag ID: #462887
Bewertung:
(22339 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

Antwort auf [ Martin Fischer ] Nein, das hat damit zu tun, daß ich Dich falsch verstanden und die Schleife rausgenommen habe.


ähem, welche Schleife meinst Du?

Zitat Allerdings wir das Skript auch damit bei erneuter Ausführung genau dort starten, wie beim ersten Mal, wenn sich am Kontext (Absätze mit dem AF) nichts ändert.


Ja, genau. Das Absatzformat ändert sich nicht, der Absatz wird lediglich in die Tabelle kopiert.

Das Skript soll von vorn das Dokument nach Absätzen mit diesem bestimmten AF suchen. Sobald es auf einen solchen Absatz stößt, soll es ihn markieren und ausschneiden. Im zweiten Schritt (das funktioniert schon dank Deiner Hilfe) wird eine 1×1-Tabelle erstellt und der ausgeschnittene Absatz dort hineingestellt. Wenn das erledigt ist, soll nach dem nächsten Absatz mit diesem AF gesucht werden und das Ganze solange wiederholt werden, bis das Dokument komplett durchsucht wurde.

Vielen Dank nochmal für Deine Geduld, ich schätze das sehr!

Ciao
Uli


als Antwort auf: [#462867]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

26. Jan 2011, 07:46
Beitrag # 12 von 22
Beitrag ID: #462889
Bewertung:
(22329 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Schleife ist das:
Code
// Mit den Fundstellen der Reihe nach rückwärts was machen  
for (var i = result.length-1; i >= 0; i--)
{
// mach was mit Fundstelle i;
}


Das // mach was mit Fundstelle i; wäre in Deinem Fall:
1. erzeuge an der Fundstelle eine Tabelle mit bestimmten Parametern;
2. verschiebe die Fundstelle in die erste Zelle der soeben erzeugten Tabelle.

Im Code sieht das etwa so aus:
Code
// Zurücksetzen der Sucheinstellungen  
app.findGrepPreferences = null;

// Setzen der Sucheinstellungen
app.findGrepPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( 'Standard' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findGrep();

// Mit den Fundstellen der Reihe nach rückwärts was machen
for (var i = result.length-1; i >= 0; i--)
{
// Tabelle erzeugen (am ersten Einfügepunkt der Fundstelle)
var a_table = result[i].insertionPoints.firstItem().tables.add({bodyRowCount:1, columnCount:3});
// hier weitere Eigenschaften der Tabelle a_table einstellen
// ...

// Text in die erste Zelle der Tabelle verschieben
var a_text = result[i].move( LocationOptions.AFTER, a_table.cells.firstItem().insertionPoints.firstItem() );
// ggf. Absatzmarke am Ende des verschobenen Textes in der Tabelle löschen
if (a_text.characters.lastItem().contents == '\r')
a_text.characters.lastItem().remove();
}
// Zurücksetzen der Sucheinstellungen
app.findGrepPreferences = null;


Viele Grüße
Martin




als Antwort auf: [#462887]
(Dieser Beitrag wurde von Martin Fischer am 26. Jan 2011, 08:10 geändert)

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

26. Jan 2011, 08:37
Beitrag # 13 von 22
Beitrag ID: #462891
Bewertung:
(22313 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Einfacher geht's noch, indem man die Fundstelle in eine Tabelle umwandelt.

Code
for (var i = result.length-1; i >= 0; i--)  
{
// Text in Tabelle umwandeln
var a_table = result[i].convertToTable();
// weitere Einstellungen für die Tabelle
...
}


Viele Grüße
Martin




als Antwort auf: [#462889]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

uswd
Beiträge gesamt: 197

26. Jan 2011, 10:10
Beitrag # 14 von 22
Beitrag ID: #462902
Bewertung:
(22302 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen, vielen Dank! Damit ist es fast perfekt!!
Hier das Skript:

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

// Setzen der Sucheinstellungen
app.findGrepPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyles.itemByName( 'Diagramm Light' );

// Suchen und Ergebnisse in Variable speichern
var result = app.documents.firstItem().findGrep();

// Mit den Fundstellen der Reihe nach rückwärts was machen
for (var i = result.length-1; i >= 0; i--)
{
// Text in Tabelle umwandeln
var a_table = result[i].convertToTable();
// leere letzte Reihe löschen
a_table.rows[1].remove();
// weitere Einstellungen für die Tabelle
// weist Table Style zu
var myTStyle = app.activeDocument.tableStyles.item("Diagram Table");
a_table.appliedTableStyle=myTStyle;
// legt Höhe und Breite der Tabellenzelle fest
var tf = {
height:"12p3", // Höhe
width:"12p3" // Breite
};
a_table.cells.everyItem().properties = tf;
}

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


Das einzige Problem ist durch "convertToTable()" entstanden. Denn es löscht das Carriage Return da als Trenner erkannt und macht dadurch zwei Tabellenzeilen, wobei das Löschen der leeren letzten Zeile kein Problem ist (siehe Code).
Aber dadurch wird nachfolgender Text in das AF der Tabelle umgewandelt. Man bräuchte eigentlich nach der Tabelle ein Carriage Return.

Wie könnte man das lösen?

Ansonsten ist das Skript nun super, braucht auch mit Kommentaren nur 30 Zeilen!

Ciao
Uli


als Antwort auf: [#462891]

Absatz mit bestimmtem Absatzformat suchen, markieren und ausschneiden

Martin Fischer
  
Beiträge gesamt: 12091

26. Jan 2011, 10:57
Beitrag # 15 von 22
Beitrag ID: #462905
Bewertung:
(22288 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Denn es löscht das Carriage Return da als Trenner erkannt und macht dadurch zwei Tabellenzeilen, wobei das Löschen der leeren letzten Zeile kein Problem ist (siehe Code).
Aber dadurch wird nachfolgender Text in das AF der Tabelle umgewandelt. Man bräuchte eigentlich nach der Tabelle ein Carriage Return.


Handelt es sich bei den gesuchten Absätzen stets um einzelne, nicht aufeinanderfolgende Absätze?
Dann könnte es eventuell durch eine Spezifizierung des Suchausdrucks gelöst werden:

Code
// Suche alles, was nicht eine Absatzschaltung ist 
app.findGrepPreferences.findWhat = '[^\\r]+';


Andernfalls müsste man hinter der Fundstelle eine zusätzliche Absatzschaltung einfügen und darauf achten, dass sie bei der Konvertierung in die Tabelle nicht mit berücksichtigt wird.

Viele Grüße
Martin




als Antwort auf: [#462902]
X

Aktuell

Quark / Adobe / Apple / Microsoft
einleitung_scharfzeichnen_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.

Veranstaltungen
27.08.2019

Die smarte PDF-Workflow-Lösung für Druckereien — powered by Enfocus

Impressed GmbH, Hamburg
Dienstag, 27. Aug. 2019, 10.00 - 10.30 Uhr

Webinar

Wir stellen Ihnen das neueste Produkt aus dem Hause Impressed vor. Den Impressed Workflow Server (IWS) Der Impressed Workflow Server (kurz: IWS) ist eine automatisiert arbeitende PDF-Workflow-Lösung für Druckereien mit einer zentralen, Datenbank-gestützten Jobverwaltung und einer Browser-basierten Jobsteuerung. Die Bedienoberfläche des IWS ermöglicht eine Übersicht über die aktuellen in der Produktion befindlichen Dateien und kann deren weiteren Verlauf steuern. Der IWS automatisiert und standardisiert somit die Produktion - Powered by Enfocus! Der Impressed Workflow Server ist das Ergebnis unserer jahrzehntelangen Erfahrung mit Workflows für die Druckvorstufe sowie die logische Weiterentwicklung auf Basis von bewährten Enfocus Technologien.

Nein

Organisator: Impressed GmbH

Kontaktinformation: Detlef Grimm, E-Mailschulungen AT impressed DOT de

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

Impressed Workflow Server (IWS)
Veranstaltungen
28.08.2019

8005 Zürich
Mittwoch, 28. Aug. 2019, 18.00 - 20.15 Uhr

Meetup

«Das Leseerlebnis optimal gestalten, die eigenen Botschaften wirkungsvoll verbreiten und bei der Inhaltserstellung und -verwaltung von schlanken Prozessen und Effizienz profitieren - Publishing erfordert heute den richtigen Umgang mit Tools und Systemen. Eine Mehrkanal-Strategie ist dabei in den meisten Fällen von den Lesern nicht nur gefordert, sondern verdichtet die bereits bestehenden Herausforderungen. Gerade Automatisierungen können hier Abhilfe verschaffen. Nicht nur ermöglichen sie ein durchgängiges und einheitliches Leseerlebnis auf allen Kanälen. Sie machen den Prozess vielmehr effizienter und effektiver. An diesem Publishing-Meetup zeigt Benjamin Linsi verschiedene Beispiele für automatisiertes Publishing - von der kostengünstigen Web-to-Print Lösung über eine ausgeklügeltes Mehrkanal-Publishing-System bis zu einem umfassenden, medienneutralen und browserbasiertem Redaktionssystem. - AGENDA - 18.00 Speech von Benjamin Linsi 19.30 Apéro & Networking 20.15 Check-out - SPEAKER - "Als Marketer denke ich immer von der Zielgruppe aus, lege die Botschaften fest und bestimme, welche Kanäle bespielt werden. Dabei ist ein effizienter Prozess meist massgebend für die eigene Zielerreichung." Benjamin Linsi ist im Marketing Zuhause und setzt sich dabei, sowohl für seine eigene Arbeit als auch im Kundenkontakt, stark mit digitalen Lösungen auseinander. In seiner Position bei der Medienmacher AG setzt er sich dabei fokussiert mit dem Mehrwert von Publishing-Systemen auseinander.»

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.meetup.com/de-DE/Publishing-Group-Switzerland/events/263255802/

Mit Automatisierung den Publishing-Workflow verbessern
Hier Klicken