[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Per Script Absatz finden und in neuen Textrahmen einfügen

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

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

26. Jan 2010, 14:49
Beitrag # 1 von 19
Bewertung:
(16435 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen bin im Scripten noch ein Neuling.

Ich importiere Texte in mein vorgefertigtes InDesign Layout, die Word-Absatzformate werden automatisch zugewiesen.

So und nun das Problem, auf der ersten Seite meines Dokuments soll unten links ein neuer Textrahmen platziert werden und dort automatisch alle Absätze mit dem Absatzformat "Literatur" eingefügt werden.
Ich hab es jetzt schon irgendwie geschafft, dass ein Textrahmen platziert wird, aber ich kann auf keinen Text zugreifen, geschweige ihn da reinkopieren.
Geht das auch noch, dass der Textrahmen in der Höhe variabel ist? Also der Rahmen sich dann an die Textmenge anpasst.


Ich hoffe ihr könnt mir helfen!!

Viele Grüße Julian
X

Per Script Absatz finden und in neuen Textrahmen einfügen

Martin Fischer
  
Beiträge gesamt: 12783

26. Jan 2010, 18:54
Beitrag # 2 von 19
Beitrag ID: #431614
Bewertung:
(16390 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

wie weit bist Du im Skript gekommen?
Hast Du eine Idee, wie Du auf Text mit dem AF 'Literatur' zugreifen könntest?

Hast Du Dich mal mit der Suchfunktion findText() beschäftigt und Dir ein Beispiel angesehen?
Ein einfaches Beispiel findest Du etwa hier: parentStory für gesuchten Text ansprechen (script).


als Antwort auf: [#431564]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

27. Jan 2010, 08:02
Beitrag # 3 von 19
Beitrag ID: #431652
Bewertung:
(16361 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin, danke schon mal für die schnelle Antwort!
Hab mir den Beitrag mal angeschaut, aber dazu muss ich ja den text ausgewählt haben wenn ich das richtig verstehe, um auf das AF zugreifen zu können. Wollte das ohne Auswahl machen da die Literatur über den ganzen Text zerstreut liegt.

Bisher habe ich nur das um den Textrahmen an der gewünschten Position zu erzeugen in einer festen größe:

Code
var myDoc = app.documents[0];  
var myDocHeight = myDoc.documentPreferences.pageHeight;
var myDocWidth = myDoc.documentPreferences.pageWidth;
var myFrameHeight = 15;
var myFrameWidth = 85;
var myLeftMargin = 15;
var myBottomMargin = 20;
var myFrameBounds = [ myDocHeight - myBottomMargin - myFrameHeight, myLeftMargin, myDocHeight - myBottomMargin, myLeftMargin + myFrameWidth];
var myNewFrame = myDoc.pages.item(0).textFrames.add();
myNewFrame.geometricBounds = myFrameBounds;


Viele Grüße
Julian


als Antwort auf: [#431614]

Per Script Absatz finden und in neuen Textrahmen einfügen

Martin Fischer
  
Beiträge gesamt: 12783

27. Jan 2010, 08:33
Beitrag # 4 von 19
Beitrag ID: #431658
Bewertung:
(16351 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

Antwort auf: aber dazu muss ich ja den text ausgewählt haben wenn ich das richtig verstehe, um auf das AF zugreifen zu können. Wollte das ohne Auswahl machen da die Literatur über den ganzen Text zerstreut liegt.


Nein, Du musst den Text nicht ausgewählt haben.
Du musst die Absätze, die mit dem entsprechenden Absatzformat ausgezeichnet sind, suchen.
Du kannst sie per Skript u.a. im gesamten Dokument (app.documents.firstItem() oder myDoc) suchen.

Das geht so:
1. Definiere die Suchoptionen (1b.); stelle dabei sicher, dass zuvor eventuell vorhandene Suchoptionen zurückgestellt werden (1a.).
2. Führe die Suche in einem definierten Bereich aus.

Code
// 1a. Zurückstellen der Suchoptionen 
app.findTextPreferences = app.changeTextPreferences = null;

// 1b. Definition der Suchoption (suche nach einem bestimmten Absatzformat)
app.findTextPreferences.appliedParagraphStyle = 'Literatur';

// 2. Suche im Dokument ausführen und Suchergebnisse in einer Variable (myResult) auffangen
var myResult = app.documents.firstItem().findText();


Nun sind die gefundenen Stellen in der Variable myResult als Array gespeichert (jede gefundenen Stelle ist ein Element des Arrays).

In einer Schleife durch den Array myResult kannst Du bestimmen, was damit gemacht werden soll:
Code
// Schleife durch den Array myResult 
for (var i = 1; i < myResult.length; i++ )
{
// tu was mit dem einzelnen Element myResult[i]
}


Was soll getan werden?
Der jeweilige Text soll ans Ende des Textabschnitts im neu erstellten Textrahmen kopiert werden.
Dazu findest Du im DocumentObjectModell bei dem Objekt Text den Befehl duplicate().
Zitat Text duplicate (to:LocationOptions[, reference:any])
Duplicates the text in the specified location.


Das Ziel ist das Ende LocationOptions.AT_END des Textabschnitts ( myNewFrame.parentStory – als reference) von Deinem Textrahmen myNewFrame).

Also lautet der Befehl:
Code
myResult[i].duplicate(LocationOptions.AT_END, myNewFrame.parentStory); 


Oben eingefügt ergibt sich

Code
// Schleife durch den Array myResult 
for (var i = 1; i < myResult.length; i++ )
{
myResult[i].duplicate(LocationOptions. AT_END, myNewFrame.parentStory);
}


Dabei könnten sich Probleme ergeben, wenn ein gefundener Text nicht mit einer Absatzmarke endet (z.B. am Ende eines Textabschnitts oder am Ende einer Tabellenzelle).
Deswegen wäre ab dem zweiten Durchgang (wenn Text im neuen Textrahmen vorhanden ist) vor dem Duplizieren des jeweiligen Texts eine Prüfung des letzten Zeichens des Textabschnitts im neuen Rahmen von Vorteil: ist es eine Absatzmarke oder nicht.
Wenn nicht, dann füge zunächst eine Absatzmarke ein.
Doch dazu später mehr.

Versuche zunächst das Skript wie oben dargestellt zu erweitern.


als Antwort auf: [#431652]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

27. Jan 2010, 09:14
Beitrag # 5 von 19
Beitrag ID: #431667
Bewertung:
(16339 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für die superschnelle Antwort!
Werde mich gleich dransetzen, testen und mich dann wieder melden!!

DANKE!

viele grüße
Julian


als Antwort auf: [#431658]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

27. Jan 2010, 11:50
Beitrag # 6 von 19
Beitrag ID: #431696
Bewertung:
(16314 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also habe jetzt mal getestet. Klappt teilweise.
Es klappt nicht mit jedem Absatzformat, mit "Grundtext" ging es aber nicht von Anfang des Textes fink erst ab dem 5. Absatz an.
Ich hab das duplicate durch move ersetzt damit der Text verschoben wird.

Hier der Code. Was läuft da schief :( ?

Code
var myDoc = app.documents.item(0); 
var myPage = myDoc.pages.item(0);
var myNewFrame = myPage.textFrames.item(0);
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = "Grundtext";
var myResult = app.documents.firstItem().findText();

var myDocHeight = myDoc.documentPreferences.pageHeight;
var myDocWidth = myDoc.documentPreferences.pageWidth;
var myFrameHeight = 15;
var myFrameWidth = 85;
var myLeftMargin = 15;
var myBottomMargin = 20;
var myFrameBounds = [myDocHeight - myBottomMargin - myFrameHeight, myLeftMargin, myDocHeight - myBottomMargin, myLeftMargin + myFrameWidth];
var myNewFrame = myDoc.pages.item(0).textFrames.add();
myNewFrame.geometricBounds = myFrameBounds;

for (var i = 1; i < myResult.length; i++ )
{
myResult[i].move(LocationOptions.AT_END, myNewFrame.parentStory);

}



als Antwort auf: [#431667]

Per Script Absatz finden und in neuen Textrahmen einfügen

Martin Fischer
  
Beiträge gesamt: 12783

27. Jan 2010, 12:01
Beitrag # 7 von 19
Beitrag ID: #431701
Bewertung:
(16305 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Es klappt nicht mit jedem Absatzformat


Richtig.
Absatzformate in Formatgruppen müssen anders adressiert werden.

Antwort auf: Ich hab das duplicate durch move ersetzt damit der Text verschoben wird.


Oben war von Kopieren die Rede.
Verschieben macht einen gravierenden Unterschied: durch das Verschieben von Textteilen wird während der Ausführung der Schleife in den Index der Fundstellen eingegriffen. Wenn die erste Fundstelle verschoben wird, stimmt die Adressierung der folgenden Fundstelle nicht mehr mit der ursprünglichen Adressierung überein.

Um dieser störenden 'Neuindizierung' vorzubeugen greifst Du Dir die Fundstellen von hinten herein.
D.h. Du lässt die Schleife rückwärts laufen.
Freilich musst Du dann den Text am Anfang des Textabschnitts im neuen Textrahmen verschieben.

Code
var myDoc = app.documents.item(0);  
var myPage = myDoc.pages.item(0);
var myNewFrame = myPage.textFrames.item(0);
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = "Grundtext";
var myResult = app.documents.firstItem().findText();

var myDocHeight = myDoc.documentPreferences.pageHeight;
var myDocWidth = myDoc.documentPreferences.pageWidth;
var myFrameHeight = 15;
var myFrameWidth = 85;
var myLeftMargin = 15;
var myBottomMargin = 20;
var myFrameBounds = [myDocHeight - myBottomMargin - myFrameHeight, myLeftMargin, myDocHeight - myBottomMargin, myLeftMargin + myFrameWidth];
var myNewFrame = myDoc.pages.item(0).textFrames.add();
myNewFrame.geometricBounds = myFrameBounds;

for (var i = myResult.length-1; i >= 0; i-- )
{
myResult[i].move(LocationOptions.AT_BEGINNING, myNewFrame.parentStory);

}



als Antwort auf: [#431696]
(Dieser Beitrag wurde von Martin Fischer am 27. Jan 2010, 12:04 geändert)

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

27. Jan 2010, 13:06
Beitrag # 8 von 19
Beitrag ID: #431711
Bewertung:
(16283 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich bin begeistert!! Funktioniert einwandfrei! Vielen vielen DANK!

Hier nochmal der Code. Es wird jetzt noch ein Objektstil für den neuen Textrahmen zugeordnet:
Code
var myDoc = app.documents.item(0);   
var myPage = myDoc.pages.item(0);
var myNewFrame = myPage.textFrames.item(0);
var myObjectStyle = app.activeDocument.objectStyles.item("OBJEKTSTIL");
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = "ABSATZFORMAT";
var myResult = app.documents.firstItem().findText();

var myDocHeight = myDoc.documentPreferences.pageHeight;
var myDocWidth = myDoc.documentPreferences.pageWidth;
var myFrameHeight = 15;
var myFrameWidth = 85;
var myLeftMargin = 15;
var myBottomMargin = 20;
var myFrameBounds = [myDocHeight - myBottomMargin - myFrameHeight, myLeftMargin, myDocHeight - myBottomMargin, myLeftMargin + myFrameWidth];
var myNewFrame = myDoc.pages.item(0).textFrames.add();
myNewFrame.geometricBounds = myFrameBounds;
myNewFrame.applyObjectStyle(myObjectStyle);

for (var i = myResult.length-1; i >= 0; i-- )
{
myResult[i].move(LocationOptions.AT_BEGINNING, myNewFrame.parentStory);

}


Kann ich jetzt für die höhe des Textrahmens einen variablen Wert eingeben der sich an der Textmenge orientiert oder ist es da besser über Skript "Rahmen an Inhalt anpassen" zu machen??


viele grüße
julian


als Antwort auf: [#431701]

Per Script Absatz finden und in neuen Textrahmen einfügen

Martin Fischer
  
Beiträge gesamt: 12783

27. Jan 2010, 13:53
Beitrag # 9 von 19
Beitrag ID: #431725
Bewertung:
(16259 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

Antwort auf: Kann ich jetzt für die höhe des Textrahmens einen variablen Wert eingeben der sich an der Textmenge orientiert oder ist es da besser über Skript "Rahmen an Inhalt anpassen" zu machen??


Ich sehe zwei Möglichkeiten:
– Du vergrößerst den Textrahmen so lange, bis der Textabschnitt keinen Überlauf mehr hat (while (myNewFrame.parentStory.overflows == true) {// Textrahmen größer machen})
– Du vergrößerst den Textrahmen mal ganz stark (so groß, dass Du keinen Überlauf mehr erwartest); dann prüfst Du kurz auf Überlauf; wenn keiner mehr da ist, dann ermittelst Du die Position der Grundlinie der letzten Zeile des Textrahmens (myNewFrame.lines.lastItem().baseline) und richtest die Unterkante des Textrahmens entsprechend ein.


als Antwort auf: [#431711]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

28. Jan 2010, 15:23
Beitrag # 10 von 19
Beitrag ID: #431896
Bewertung:
(16205 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin, hab mich dafür entschieden den Textrahmen erst mal sehr stark zu vergrößern.
Habe hier den Wert geändert

Code
var myFrameHeight = 100; 


da geht auf jeden fall alles rein!
danach für ich das hier aus:

Code
myNewFrame.fit(FitOptions.frameToContent); 


der Textrahmen passt sich dem Inhalt an, sieht soweit prima aus.

Nur jetzt das Problem mit "myNewFrame.lines.lastItem().baseline"
Damit komm ich irgendwie nicht ganz zurecht. Muss ich die baseline noch irgendwie definieren?? Wahrscheinlich ist die Lösung ganz einfach, aber ich hab erst vor sehr kurzer Zeit mit der Materie angefangen!

Viele Grüße Julian


als Antwort auf: [#431725]

Per Script Absatz finden und in neuen Textrahmen einfügen

Martin Fischer
  
Beiträge gesamt: 12783

28. Jan 2010, 15:45
Beitrag # 11 von 19
Beitrag ID: #431902
Bewertung:
(16201 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Julian,

prima!

Antwort auf: Nur jetzt das Problem mit "myNewFrame.lines.lastItem().baseline"
Damit komm ich irgendwie nicht ganz zurecht. Muss ich die baseline noch irgendwie definieren?? Wahrscheinlich ist die Lösung ganz einfach, aber ich hab erst vor sehr kurzer Zeit mit der Materie angefangen!


Nein, baseline ist eine Eigenschaft der line.
Sie gibt Dir die y-Koordinate der Grundline zurück.

Und wenn Du den Y2-Wert der geometricBounds des übergeordneten Textrahmens (myNewFrame) durch diesen ersetzt, dann sollte die Unterkante des Textrahmens auf der Grundlinie der letzten Zeile liegen.

Etwa so:

Code
myNewFrame.geometricBounds = [ 
myNewFrame.geometricBounds[0],
myNewFrame.geometricBounds[1],
myNewFrame.lines.lastItem().baseline,
myNewFrame.geometricBounds[3]
]


Aber wozu brauchst Du das noch, wenn myNewFrame.fit(FitOptions.frameToContent) klappt?


als Antwort auf: [#431896]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

28. Jan 2010, 17:13
Beitrag # 12 von 19
Beitrag ID: #431926
Bewertung:
(16167 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wiedermal DANKE für die schnelle Antwort.
Das klingt einleuchtend werde ich morgen gleich probieren.

Ich brauche das da wenn ich myNewFrame.fit(FitOptions.frameToContent) mache der Textrahmen nicht mehr an der Unterkante steht. Er zieht sich von unten zusammen und steht dann mitten auf der Seite. Der Inhalt des Textrahmens soll Vertikal nach unten ausgerichtet sein und an der Grundlinie beginnen und sich dann nach oben aufbauen. Hab da im zugewisenen Objektstil einen Konturenführung hinterlegt damit der Grundtext verdrängt wird. Es soll im Prinzip die Optik von Fußnoten haben.

Viele Grüße Julian


als Antwort auf: [#431902]

Per Script Absatz finden und in neuen Textrahmen einfügen

Martin Fischer
  
Beiträge gesamt: 12783

28. Jan 2010, 17:29
Beitrag # 13 von 19
Beitrag ID: #431931
Bewertung:
(16164 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Der Inhalt des Textrahmens soll Vertikal nach unten ausgerichtet sein und an der Grundlinie beginnen und sich dann nach oben aufbauen.


Dann taugt der obige Ansatz nix.
Denn dann steht die Grundlinie der letzten Zeile ja bereits auf der unteren Kante des Textrahmens.

Dann musst Du einen Ansatz finden, wie die Position der oberen Kante des Textrahmens zu justieren ist.


als Antwort auf: [#431926]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

8. Feb 2010, 13:13
Beitrag # 14 von 19
Beitrag ID: #432964
Bewertung:
(16011 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mh Ok Martin.
Hab mir jetzt mal ein paar Bücher bestellt um erst mal in dem Bereich fitter zu werden. Wenn ich Erfolg habe melde ich mich noch einmal.


als Antwort auf: [#431931]

Per Script Absatz finden und in neuen Textrahmen einfügen

JEckert
Beiträge gesamt: 11

12. Feb 2010, 10:14
Beitrag # 15 von 19
Beitrag ID: #433454
Bewertung:
(15924 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habs geschafft :-)

Ich zähle jetzt die Zeilen des neuen Textrahmens und Hinterlege dafür jeweils eine Höhe für den Textrahmen.
Das Problem das der Kasten mitten im Text steht und nicht unten bündig, hab ich durch einen zweiten Textrahmen
gelöst der erstellt wird und die Größe orientiert sich an der Anzahl der Zeilen.
Danach lösche ich den leeren Textrahmen.
Es gibt womöglich bessere und sauberere Lösungen aber für ein Anfänger wie mich ist das schon ein Erfolg :-)


Viele Grüße und nochmals Danke!
Julian


als Antwort auf: [#432964]
X

Aktuell

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
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

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

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

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? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

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

Und es geht doch: Automatisierung im Großformatdruck!