[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Absätze in Pfade konvertieren

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

Absätze in Pfade konvertieren

iduser
Beiträge gesamt: 107

5. Okt 2013, 10:31
Beitrag # 1 von 11
Bewertung:
(4099 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
ich habe eine Frage bezüglich der Konvertierung in Pfade.
Der Ausgang soll eine zweizeilige mathematische Formel über zwei Zeilen bzw. Absätze sein (unterschiedlich mit einem harten und weichen Umbruch getrennt). Diese soll in Pfade gewandelt werden.
Im Anhang ist eine Datei die den Sachverhalt etwas verdeutlichen soll. Ausgewählt sind die kompletten zwei Zeilen inkl. Absatzmarke.

Im ersten Fall:
Code
app.selection[0].createOutlines(true); 

wird jede Zeile einzeln in Pfade gewandelt (eventuelle Leerräume am Anfang und Ende der Zeile, zur Ausrichtung der Formel werden nicht berücksichtigt)

Im zweiten Fall:
Code
app.selection[0].createOutlines(false); 

werden die zwei Zeilen in ein Objekt zusammengefasst/gruppiert, jedoch nicht verankert über den Text gelegt.

Ziel ist es nur ein Objekt/eine Gruppe (wie im zweiten Fall) zu haben, welche aber im Text verankert ist.

Ist dies mit der Funktion createOutlines() machbar oder gibt es noch einen einfacheren Weg als die Gruppe aus dem 2. Fall per Skript an der entsprechenden Stelle im Text zu verankern?

Philipp

Anhang:
Outlines-test.idml (152 KB)
X

Absätze in Pfade konvertieren

Gerald Singelmann
  
Beiträge gesamt: 6269

5. Okt 2013, 11:14
Beitrag # 2 von 11
Beitrag ID: #518098
Bewertung:
(4077 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das ist wie in der GUI. Text wird zeilenweise in Pfade umgewandelt.

Es gibt verschiedene Wege, zum Ziel zum kommen.

Ohne es selbst ausprobiert zu haben, halte ich folgenden für plausibel:

  1. Mit createOutline(false) umwandeln und das Ergebnis der Umwandlung in Variable speichern

  2. Der Auswahl (also dem Text) die Farbe "Keine" zuweisen. Dadurch ändert sich der Umbruch nicht.

  3. Ergebnis der Umwandlung verankern am ersten insertionPoint der Auswahl. (Nicht einfügen.)




als Antwort auf: [#518093]
(Dieser Beitrag wurde von Gerald Singelmann am 5. Okt 2013, 11:14 geändert)

Absätze in Pfade konvertieren

iduser
Beiträge gesamt: 107

5. Okt 2013, 19:36
Beitrag # 3 von 11
Beitrag ID: #518116
Bewertung:
(4031 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Singelmann,
vielen Dank für Ihre Antwort. An eine ähnliche Vorgehensweise habe ich auch gedacht. Der 2. Schirtt ist sehr trickreich :). Die Erhaltung der Textteile ist jedoch nicht nötig (Umbruchänderungen können geschehen, da es ein epub-export wird)

So hab ich es bisher.
Zitat var _sel = app.selection[0];
var _oldSelect = _sel;
var _newObject = _sel.createOutlines(false);

app.select(_newObject);
app.cut();
app.select(_oldSelect.paragraphs.itemByRange(_oldSelect.characters[0], _oldSelect.characters[-2]));// Damit die Absatzmarke nicht mit ersetzt wird
app.paste();


Eine Frage habe ich noch. Schritt 3 hätte ich wie oben mit cut() and paste() realisiert. Nun haben Sie aber geschrieben "Nicht einfügen". Könnten Sie mir bitte noch einen kleinen Tip geben, wie man das Objekt verankert ohne es auszuschneiden und wieder einzufügen?

Danke für die schnelle Hilfe
Philipp


als Antwort auf: [#518098]
(Dieser Beitrag wurde von iduser am 5. Okt 2013, 19:52 geändert)

Absätze in Pfade konvertieren

Gerald Singelmann
  
Beiträge gesamt: 6269

5. Okt 2013, 21:01
Beitrag # 4 von 11
Beitrag ID: #518118
Bewertung:
(4004 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Nun haben Sie aber geschrieben "Nicht einfügen". Könnten Sie mir bitte noch einen kleinen Tip geben, wie man das Objekt verankert ohne es auszuschneiden und wieder einzufügen?


Entschuldigung, das war in Ihrem Kontext Unsinn.
Das sieht alles OK aus.

:)


als Antwort auf: [#518116]

Absätze in Pfade konvertieren

iduser
Beiträge gesamt: 107

5. Okt 2013, 23:54
Beitrag # 5 von 11
Beitrag ID: #518122
Bewertung:
(3975 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ok, hätte ja sein können, dass es noch eine ressourcenschonendere Variante geben könnte :)

Eine weitere Frage stellt sich mir gerade. Es kann vorkommen, dass am Anfang oder Ende der Zeile ein verankertes Objekt vorkommt (Icon) wenn dieses in der Auswahl inbegriffen ist, so wird dieses mit in die Gruppierung eingebettet.

Nun dachte ich, dass ich mit nachfolgendem Code die Auswahl verringern kann.

Code
var _sel = app.selection[0]; 

if(_sel.characters[0].contents == String.fromCharCode(0xFFFC))
// Objektanker am Anfang der 1. Zeile soll
_sel = _sel.texts.itemByRange(_sel.characters[1], _sel.characters[-1]); abgewählt werden
if(_sel.characters[-2].contents == String.fromCharCode(0xFFFC))
// Objektanker am Ende der letzten Zeile soll abgewählt werden
_sel = _sel.texts.itemByRange(_sel.characters[0], _sel.characters[-3]);
if(_sel.characters[-1].contents == String.fromCharCode(0xD))
// Absatzmarke in letzter Zeile soll abgewählt werden
_sel = _sel.texts.itemByRange(_sel.characters[0], _sel.characters[-2]);

var _newObject = _sel.createOutlines(false);
app.select(_newObject);
app.cut();
app.select(_sel);
app.paste();


Das funktioniert auch soweit, jedoch kann ich dann das neue Objekt (die Gruppe) nicht mehr auswählen und es erscheint die Fehlermeldung: "Ungültiger Wert für Parameter 'selectableItems' der Methode 'select'... gEnum enumerator or SelectAll enumerator erwartet, aber (()) erhalten".

Kann mir dies bitte jemand erklären?

Im Anhang ist nochmal eine Datei.
Der oben genannte Code ist nur beispielhaft, später soll es dann in einer Schleife mehrere Absätze durchlaufen, sodass die manuelle Demakierung der Anker nicht in Frage kommt ;)


als Antwort auf: [#518118]
(Dieser Beitrag wurde von iduser am 5. Okt 2013, 23:56 geändert)

Anhang:
Outlines-test2.idml (71.9 KB)

Absätze in Pfade konvertieren

WernerPerplies
Beiträge gesamt: 2762

6. Okt 2013, 09:44
Beitrag # 6 von 11
Beitrag ID: #518125
Bewertung:
(3937 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

Zitat Könnten Sie mir bitte noch einen kleinen Tip geben, wie man das Objekt verankert ohne es auszuschneiden und wieder einzufügen?

Das funktioniert erst ab einer bestimmten InDesignversion (CS6?), deshalb verwende ich eine Funktion, die versionsunabhängig funktionieren sollte.
Anwendung für Dein Beispiel:
Code
#target indesign 
main();

function main()
{
try
{
// selektierter Absatz
var selected = app.selection[0]
if (selected.constructor.name!="Paragraph")
throw new Error("Kein Absatz ausgewählt!");
// selektiert den Text bis zum Absatzumbruch
var sel = selected.paragraphs.itemByRange(selected.characters[0], selected.characters[-2]);
// wandelt den Text in eine Gruppe mit Outlines um
var newObject = sel.createOutlines(false);
// löscht den Absatz_inhalt_
sel.remove();
// keine Ahnung warum, aber es funktioniert weder die direkte Übergabe des neuen Objektes,
// noch die direkte Selektion, deshalb
anchorThis(app.activeDocument.groups[-1], sel.insertionPoints[0]);
function anchorThis(/*object*/toAnchor, /*InsertionPoint*/ip, /*enum*/anchorPosition, /*enum*/anchorPoint)
{
if ((toAnchor.hasOwnProperty ("anchoredObjectSettings")) &&
(toAnchor.anchoredObjectSettings.hasOwnProperty ("insertAnchoredObject")))
{
// Funktion ist von der InDesignversion abhängig!
if (anchorPosition==null) anchorPosition = AnchorPosition.INLINE_POSITION;
if (anchorPoint==null) anchorPoint = AnchorPoint.BOTTOM_RIGHT_ANCHOR;
toAnchor.anchoredObjectSettings.insertAnchoredObject(ip, anchorPosition);
toAnchor.anchoredObjectSettings.anchorPoint = anchorPoint;
}
else
{
// alernativ copy and paste Lösung
toAnchor.select();
app.cut();
ip.select();
app.pasteInPlace();
toAnchor = app.selection[0].parent.textFrames[0];
}
return toAnchor;
}
}
catch (error)
{
alert(error.message+"\n"+error.line);
}
}

Ich hoffe, das ich alles richtig umgesetzt habe.


als Antwort auf: [#518116]

Absätze in Pfade konvertieren

iduser
Beiträge gesamt: 107

6. Okt 2013, 11:25
Beitrag # 7 von 11
Beitrag ID: #518129
Bewertung:
(3915 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,
vielen Dank für die
Antwort auf: // keine Ahnung warum, aber es funktioniert weder die direkte Übergabe des neuen Objektes,
// noch die direkte Selektion
, deshalb
anchorThis(app.activeDocument.groups[-1], sel.insertionPoints[0]);

Genau, das verstehe ich auch nicht.
Aber die Lösung, die zuletzt erstellte Gruppe auszuwählen finde ich sehr gut und es funktioniert :)
Ist die zuletzt erstellte Gruppe immer diese "app.activeDocument.groups[-1]", völlig gleichgültig an welcher Stelle im Dokument sie hinzugefügt wird?

Danke für den Hinweis, dass die Objekte auch ohne cut-paste-Prozedur verankert werden können.

In der Testversion (CS6) erscheint bei mir nur folgende Fehlermeldung: Ungültiger Wert für Parameter "StoryOffset" der Methode "insertAnchoredObject"... Aber normalerweise sollte vor der Absatzmarke in der Variable "sel" ein Einfügepunkt vorhanden sein.

Das werde ich bei Gelegenheit näher Anschauen. Momentan arbeite ich mit der ID-Version 7.5 (CS5.5)

Vielen Dank für die sehr hilfreichen Antworten und die Aufwendung der damit verbundenen Zeit.

Testweise funktionierte es nun auch mit diesem Code:
Code
var _sel = app.selection[0];  

if(_sel.characters[0].contents == String.fromCharCode(0xFFFC))
// Objektanker am Anfang der 1. Zeile soll abgewählt werden
_sel = _sel.texts.itemByRange(_sel.characters[1], _sel.characters[-1]);
if(_sel.characters[-2].contents == String.fromCharCode(0xFFFC))
// Objektanker am Ende der letzten Zeile soll abgewählt werden
_sel = _sel.texts.itemByRange(_sel.characters[0], _sel.characters[-3]);
if(_sel.characters[-1].contents == String.fromCharCode(0xD))
// Absatzmarke in letzter Zeile soll abgewählt werden
_sel = _sel.texts.itemByRange(_sel.characters[0], _sel.characters[-2]);

var _newObject = _sel.createOutlines(false);
app.activeDocument.groups[-1].select();
app.cut();
app.select(_sel);
app.paste();


Philipp


als Antwort auf: [#518125]

Absätze in Pfade konvertieren

WernerPerplies
Beiträge gesamt: 2762

6. Okt 2013, 12:04
Beitrag # 8 von 11
Beitrag ID: #518130
Bewertung:
(3899 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr ?;-),

Zitat Ist die zuletzt erstellte Gruppe immer diese "app.activeDocument.groups[-1]", völlig gleichgültig an welcher Stelle im Dokument sie hinzugefügt wird?

Das weiß ich nicht, aber ich vermute es.
Noch sicherer wäre es, sich eine Gruppensammlung zu suchen, die näher dran liegt, z. B. Page.groups.
Zitat In der Testversion (CS6) erscheint bei mir nur folgende Fehlermeldung: Ungültiger Wert für Parameter "StoryOffset" der Methode "insertAnchoredObject"... Aber normalerweise sollte vor der Absatzmarke in der Variable "sel" ein Einfügepunkt vorhanden sein.

Das verstehe ich jetzt nicht, ich habe es hier mit CS6 getestet. Die Ursache müsste damit wohl bei der Testdatei liegen.
Könnten Sie mir Ihre Datei zur Verfügung stellen?
Zitat Vielen Dank für die sehr hilfreichen Antworten und die Aufwendung der damit verbundenen Zeit.

Gerne, ich lerne zu jeder Zeit gerne etwas hinzu, und das geht am Besten, in dem man gestellte Aufgaben löst. ;-)
Ihre Version habe ich hier auch ausprobiert, sie erscheint mir aber irgendwie aufwändiger zu sein.

Ich habe mein Programm gerade auch mit der Version CS5.5 ausprobiert, auch in dieser Version funktioniert der Zweig ohne Copy und Paste.

Ich arbeite unter Windows, aber das sollte keine Rolle spielen.

Ergänzung:
ich habe gerade gesehen, dass Sie bereits eine Testdatei zur Verfügung gestellt haben, und damit verhält sich das Programm wirklich anders:
Das Object toAnchor.anchoredObjectSettings ist zwar vorhanden, aber ungültig!
Bei meiner Datei (einfacher Text) ist das Object gültig.


als Antwort auf: [#518129]
(Dieser Beitrag wurde von WernerPerplies am 6. Okt 2013, 12:24 geändert)

Absätze in Pfade konvertieren

iduser
Beiträge gesamt: 107

6. Okt 2013, 12:32
Beitrag # 9 von 11
Beitrag ID: #518132
Bewertung:
(3885 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Testdatei habe ich in einem der vorherigen Posts angehängt (Outlines-test2.idml). Der Fehler kam nun auch in CS5.5.

Die 2 ersten If-Abfragen sollten eventuelle icons (verankertes Objekt), welche auftreten können, am Anfang und Ende der Auswahl entfernen. Die dritte Abfrage entfernt die Absatzmarke falls vorhanden (Formel kann ja auch am Ende des Textrahmens stehen)
Die cut-paste-Prozedur ist annähernd die gleiche.
Ich habe nun bei mir noch eine Unterscheidung zwischen mehr- und einzeiligen Auswahlen getroffen. Bei einer Zeile kann man dann der Funktion createOutlines() den Wert "true" übergeben und man spart sich den Rest.

Mit freundlichen Grüßen
Philipp Kern ;)

PS: Bei mir läufts auch auf Windows :)


als Antwort auf: [#518130]
(Dieser Beitrag wurde von iduser am 6. Okt 2013, 12:43 geändert)

Absätze in Pfade konvertieren

WernerPerplies
Beiträge gesamt: 2762

6. Okt 2013, 12:50
Beitrag # 10 von 11
Beitrag ID: #518134
Bewertung:
(3872 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Kern,

Zitat Die Testdatei habe ich in einem der vorherigen Posts angehängt (Outlines-test2.idml). Der Fehler kam nun auch in CS5.5.


Ja, und es sieht so aus, dass das Objekt, das durch CreateOutlines entsteht je nach Input ein mehr oder weniger vollständiges Objekt ist.

So kann zum Beispiel das aus Ihren Daten erzeugte Objekt und über app.activeDocument.groups[-1] referenzierte Object nicht dupliziert werden.

Das sieht für mich alles nach einem Bug aus.


als Antwort auf: [#518132]

Absätze in Pfade konvertieren

iduser
Beiträge gesamt: 107

6. Okt 2013, 15:58
Beitrag # 11 von 11
Beitrag ID: #518143
Bewertung:
(3821 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,
das erzeugte Objekt kann über app.activeDocument.stories[1].groups[-1] angesprochen werden. Ich vermute, dass verankerte Gruppen nur über die Story ansprechbar sind. Nur "lose" Gruppen können mit app.activeDocument.groups referenziert werden. Da bei der Erzeugung mit createOutlines(false) eine "lose" Gruppe erzeugt wird, funktioniert es. Erst nachträglich wird sie durch das Ausschneiden und Einfügen verankert.

Aber nun gut. Mit den heutigen Erkenntnissen funktionierts vorübergehend :)

Vielen Dank nochmals
Philipp Kern


als Antwort auf: [#518134]
X

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!