Quantcast
Channel: Adobe InDesign Skriptwerkstatt - HilfDirSelbst.ch
Viewing all 8700 articles
Browse latest View live

graphiclines löschen

$
0
0
Mit Deiner Schleife von vorne nach hinten ändern sich mit jeder gelöschten Linie die Indexe (Indices) der noch zu löschenden Linien: eine weg, dann ist die vormals zweite die erste - die wird aber übersprungen, weil jetzt die zweite dran ist und nicht mehr die erste ....

Kehre die Reihenfolge der Schleife um (von hinten nach vorne) und das Problem sollte gelöst sein.


Du könntest alternativ auch mal Folgendes versuchen (ungetestet):
Code
app.activeDocument.activeLayer.graphicLines.everyItem().remove(); 


Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 14:39 (Martin Fischer)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Hallo Gaby,

ein Textobjekt (Zeichen, Wort, ...) kann nur für je einen Hyperlink als Quelle dienen.
Was sollte dabei herauskommen, wenn Text auf mehrere unterschiedliche Ziele zielt. :-)

Prüfe vor der Zuweisung eines Hyperlinks, ob der Text bereits als Quelle für einen Hyperlink dient.
Wenn ja, entscheide, ob der alte Hyperlink weiter gelten oder gelöscht und durch den neuen ersetzt werden soll.

Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 14:44 (Martin Fischer)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Hallo Martin

Vielen Dank für deine rasche Antwort! Das ist mir im Prinzip ja klar, aber ich habe doch mehrere Textobjekte, an unterschiedlicher Stelle im Dokument, sie haben einfach denselben Inhalt, also der String ist identisch...?

Allfällige alte Hyperlinks, Quellen und Ziele habe ich vorgängig gelöscht, die können das Problem nicht sein.

Entschuldige, ich steh ich grad etwas auf dem Schlauch.

Lieber Gruss
Gaby

Gaby Leuenberger ... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 14:52 (Gaby Leuenberger)

graphiclines löschen

$
0
0
Danke Martin,

ja mit evry item funktioniert es wunderbar.

Aber ich möchte nur diese Linien löschen die keine Spitze haben. (kein Dreieck, Kreis etc)

Da muss ich doch noch die graphiclines unterscheiden..
die mit spitze sollen bleiben die ohne gelöscht. Bzw. nur die ohne Spitze löschen.

Aber so wie ich es auskommentiert hatte funktionierte es nicht.
... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 15:01 (faxinger)

graphiclines löschen

$
0
0
Hallo,

1. "_doc = activeLayer" ist verwirrend. Gewöhn dir solche Namen besser nicht an.
2. Wenn du die Linien unterscheiden willst, brauchst du auch den entsprechenden Befehl dafür und nicht nur die Eigenschaft
3. Martin hat es bereits geschrieben: Wenn du etwas löschen willst, funktioniert vorwärts manchmal, rückwärts aber immer. Daher immer rückwärts nehmen!

Code
// das aktive Dokument 
var curDoc = app.activeDocument;
// die aktive Ebene
var curLayer = curDoc.activeLayer;
// alle Linien auf der aktiven Ebene
var allLinesOnCurLayer = curLayer.graphicLines.everyItem().getElements();

// die Schleife muss rückwärts laufen, da du etwas löschen willst
for (var i = allLinesOnCurLayer.length-1; i >= 0 ; i--) {
var curLine = allLinesOnCurLayer[i];
// prüfen ob die Linie ohne Pfeile ist
if (curLine.leftLineEnd == ArrowHead.NONE) {
curLine.remove();
}
}


Gruß Kai Rübsamen
_______________________
... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 16:05 (Kai Rübsamen)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Möglicherweise findet Dein Script ein Textobjekt, dem das Skript zuvor (oder einem Teil davon) bereits einen Hyperlink zugewiesen hat.
Das könntest Du mit einer entsprechenden Abfrage abfangen.
Oder - etwas schmutzig - die Zuweisung eines Hyperlinks in eine try-catch Klammer einbetten.

Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 16:17 (Martin Fischer)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Kann es sein, dass das nicht sauber programmiert ist? Wenn ich z.B. ein Hyperlinkziel per Skript anlege, das danach im UI lösche (es ist nicht mehr in der Liste), dann das Skript erneut starte, erhalte ich den Fehler auch. Offenbar spukt da noch etwas im Hintergrund …

Gruß Kai Rübsamen
_______________________
... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 16:20 (Kai Rübsamen)

graphiclines löschen

$
0
0
Vielen Dank Kai,

genau dahin wollte ich.

Perfekt.
... Adobe InDesign Skriptwerkstatt 4. Dez 2017, 16:36 (faxinger)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Guten Morgen Kai

Ja, das dachte ich anfangs auch, weswegen ich ja alle Sources, Hyperlinks und Destinations zuerst entferne, und zwar je einzeln, weil die Arrays verschieden lang sein können.

Hier mal der ausführlichere Code (Warnung: Anfängerin):
Code
var  _myURL; 
var _myDoc = app.activeDocument;
var _oldDest = _myDoc.hyperlinkURLDestinations.everyItem().getElements();
var _oldSource = _myDoc.hyperlinkTextSources.everyItem().getElements();
var _aHyperlink = _myDoc.hyperlinks.everyItem().getElements(); //Array mit existierenden Hyperlinks

for (var i=_aHyperlink.length-1; i>=0; i--){//Hyperlinks entfernen
var _aHyperlinkRemove = _aHyperlink[i].remove();
_aHyperlink.pop();
}
for (var i=_oldDest.length-1; i>=0; i--){//Ziele entfernen
var _oldDestRemove = _oldDest[i].remove();
_oldDest.pop();
}
for (var i=_oldSource.length-1; i>=0; i--){//Quellen entfernen
var _oldSourceRemove = _oldSource[i].remove();
_oldSource.pop();
}




app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
//matche ALLE URLs
app.findGrepPreferences.findWhat = '((?:(?:https?|ftp|file)://|www\\.|ftp\\.)[-A-Za-z0-9+&@#/%=~_|$?!:,.]*[A-Za-z0-9+&@#/%=~_|$])';
var _myURL = _myDoc.findGrep();

for (var x = 0; x < _myURL.length; x++){ //Schleife durch alle gefundenen URLs, verlinke neu
var _URL = _myURL[x]; // Text-Objekt
try{
var _source = _myDoc.hyperlinkTextSources.add(_URL); //hier muss Text sein, weil die Quelle ein Text-Objekt sein muss
var _URLstring = _myURL[x].contents; // String
var _dest = _myDoc.hyperlinkURLDestinations.add(_URLstring, {name: _URLstring}); //Destination will einen String
var _hyperlink = _myDoc.hyperlinks.add(_source, _dest, {name: _URLstring}); }
catch (e){}
}


Und hier auch noch ein Muster meines Test-Dokuments:
Code
<https://www.revision.ch/liquiditaetsplanung.html> 
(zuletzt besucht am 29.06.2017).
https://www.nzz.ch
Blablabla
https://www.irgendeinewebseite.ch/index.html#id-1

https://www.irgendeinewebseite.ch/#a2343

https://www.nzz.ch


InDesign hätte ja das nette Hyperlink-Interface, das URLs zu Hyperlinks macht, aber das matcht a) die admin.ch-URL mit den # nicht korrekt und b) fügt es bei zwei identischen URLs auch nur einen Link ein. Ich verstehe aber auch nicht genau, was Martin denn nun meinte, aber vielleicht reden wir da nicht vom selben? Jedenfalls führt das Skript auch mit dem try-Block nicht zum Ziel.

Vielen Dank fürs Mitdenken, mir raucht schon der Kopf!

LG
Gaby

Gaby Leuenberger ... Adobe InDesign Skriptwerkstatt 5. Dez 2017, 11:13 (Gaby Leuenberger)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Ich glaube, ich habe das Problem gefunden:

Ich kann nicht denselben Namen vergeben für identische URLs...

Wenn ich bei
Code
   var _dest = _myDoc.hyperlinkURLDestinations.add( _URLtext, {name: _URLtext}); //Destination will einen String 
var _hyperlink = _myDoc.hyperlinks.add(_source, _dest, {name: _URLtext});


je die Option name: rauslösche, läuft es durch und setzt die Links (nummeriert sie dann halt und sie sind im Hyperlink-Panel dann nicht ohne weiteres zu identifizieren...

Vielleicht hat mir jemand eine schlaue Lösung?

Gaby Leuenberger ... Adobe InDesign Skriptwerkstatt 5. Dez 2017, 11:24 (Gaby Leuenberger)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Hallo Gaby,

ich hab leider keine Zeit das heute zu testen. Ich löse das bei mir in der Praxis so, dass ich für alles einen Zähler mitlaufen lasse und damit gibt es quasi nichts doppelt.

Gruß Kai Rübsamen
_______________________
... Adobe InDesign Skriptwerkstatt 5. Dez 2017, 11:37 (Kai Rübsamen)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Hallo Kai

Kein Stress, ich muss auch gleich wegrennen, und kann erst morgen wieder weitermachen.

Ich werd das mit dem Zähler mal versuchen, aber ich weiss grad noch nicht so recht, wie ich den der name-Option mitgeben soll.

Interessant: Wenn ich zu Fuss verlinke, macht ID auch einen Zähler hinter den URL-Namen, wenn ich über das Panel automatisch verlinke, dann setzt mir ID nummerierte Links unter ein- und dieselbe URL, oh Objektmodell, du treibst mich in den Wahnsinn...

Merci und Gruss
Gaby

Gaby Leuenberger ... Adobe InDesign Skriptwerkstatt 5. Dez 2017, 11:45 (Gaby Leuenberger)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Hallo Gaby,

ja Hyperlinks haben es in sich, und mit dem Namen liegst Du richtig.

Ich habe das bei meinen Skripten , z. B. bei (
WpsHyperlinkInspector – Alle Hyperlinkinformationen einer Adobe InDesign Datei auf einen Blick), gelöst, indem ich entweder eine eigene Buchhaltung der Links gepflegt oder alternativ vor Erzeugung das Vorhanden sein geprüft habe.

Wenn ein Link schon vorhanden ist und voll gültig ist, erzeuge ich einen neuen Namen + (Zähler).

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 5. Dez 2017, 12:18 (WernerPerplies)

hyperlinkURLDestinations schon von einem anderen Objekt verwendet

$
0
0
Hallo Werner (und Kai)

Danke für die Antwort. Heute morgen bin ich wacher und mir hat auch gleich gedämmert, wie ich den Zähler beim Namen setzen kann. Jetzt flutscht alles wunderbar! :)

Vielen Dank allen fürs Mitdenken, ich finde es immer wieder faszinierend, wie sehr ich mich vor eine Wand fahren kann und dann gar nichts mehr durchschaue, und einen Tag später fällt es wie Schuppen von den Augen ... (leider nicht immer :)).

Einen schönen Nikolaus wünsch ich

Liebe Grüsse
Gaby ... Adobe InDesign Skriptwerkstatt 6. Dez 2017, 08:29 (Gaby Leuenberger)

Mehrere Dokumente automatisch erstellen und speichern

$
0
0
Servus,

ist aus diesem Projekt eigentlich was geworden? Ich habe einen sehr ähnlichen Anwendungsfall.
... Adobe InDesign Skriptwerkstatt 6. Dez 2017, 10:19 (rawimage)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo zusammen,
ich stehe gerade bei einem Script auf dem Schlauch und komme nicht weiter.

Innerhalb eines InDesign-Dokumentes sind mehrere InDesign Dateien als modulare Texte eingebunden. Da es diese Texte auf Deutsch und Englisch gibt, hat jede eingebundene Datei die Ebenen "DE" und "EN". Natürlich ist immer nur eine von den beiden Ebenen sichtbar.

Mit einem Script möchte ich jetzt die Sichtbarkeit dieser Ebenen umschalten. Also von Deutsch nach Englisch und entgegengesetzt. So zu sagen hin und her toggeln.

Bei meinem Script funktioniert das Einblenden der nicht sichtbaren Ebenen und auch das Ausblenden der sichtbaren. Allerdings nur, wenn ich nur eine Sache von beiden im Script aktiviere und die andere auskommentiere. Sind beide aktiv kommt es immer zu einem Fehler "Fehlernummer 30476 - Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert" Zeile 57.

Und genau hier komme ich nicht weiter.
Für Tipps und Hilfe bin ich sehr dankbar.

Grüße
Marcel

Hier das Script:


Code
Set myInDesign = CreateObject("InDesign.Application.cs6") 
Set myDocument = myInDesign.ActiveDocument

Layer_DE = false
Layer_EN = false

REDIM e(1)


Set Seiten = myDocument.pages
For i = 1 to Seiten.count 'Seiten durchlaufen
Set Seite = Seiten(i) 'Seite i im Dokument

Set Dateien = Seite.allGraphics 'Alle eingebundenen Dateien der Datei

For j = 1 to Dateien.count 'Eingebundene Dateien durchlaufen

Set Datei = Dateien(j)

Ebene_DE = false
Ebene_EN = false

Set Ebenen = Datei.graphicLayerOptions.graphicLayers

for k = 1 to Ebenen.count

'----- Prüfen, ob Ebenen vorhanden sind -------

if Ebenen.item(k).Name = "DE" then 'DE vorhanden
Ebene_DE = true
end if
if Ebenen.item(k).Name = "EN" then 'EN vorhanden
Ebene_EN = true
end if


'------------- Toggle Ebenen DE und EN ---------------------


if (Ebene_DE = true) AND (Ebene_EN = true) then

if ebenen.Item("DE").CurrentVisibility = false then
e(0) = "DE"
e(1) = "EN"
end if

if ebenen.Item("EN").CurrentVisibility = false then
e(0) = "EN" 'Ebene, die eingeblendet werden soll
e(1) = "DE" 'Ebene, die ausgeblendet werden soll
end if
end if

Next 'ENDE Ebenen durchlaufen

ebenen.Item(e(0)).CurrentVisibility = true
ebenen.Item(e(1)).CurrentVisibility = false

Next 'ENDE Dateien durchlaufen
Next 'ENDE Seiten durchlaufen

... Adobe InDesign Skriptwerkstatt 7. Dez 2017, 14:17 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hab es mir nur grob(!) angesehen.
1.) Die "k"-Schleife muss doch sicherlich VOR dem Toggeln beendet sein/werden?!
2.) Das Toggeln würde ich mittels des Not-Operators lösen, der schaltet von True auf False und umgekehrt.
Code
Set myInDesign = CreateObject("InDesign.Application.cs6")  
Set myDocument = myInDesign.ActiveDocument

Layer_DE = false
Layer_EN = false

Set Seiten = myDocument.pages
For i = 1 to Seiten.count 'Seiten durchlaufen
Set Seite = Seiten(i) 'Seite i im Dokument

Set Dateien = Seite.allGraphics 'Alle eingebundenen Dateien der Datei

For j = 1 to Dateien.count 'Eingebundene Dateien durchlaufen

Set Datei = Dateien(j)

Ebene_DE = false
Ebene_EN = false

Set Ebenen = Datei.graphicLayerOptions.graphicLayers

for k = 1 to Ebenen.count
'----- Prüfen, ob Ebenen vorhanden sind -------
if Ebenen.item(k).Name = "DE" then 'DE vorhanden
Ebene_DE = true
end if
if Ebenen.item(k).Name = "EN" then 'EN vorhanden
Ebene_EN = true
end if
Next k

'------------- Toggle Ebenen DE und EN ---------------------
if (Ebene_DE = true) AND (Ebene_EN = true) then
ebenen.Item("DE").CurrentVisibility = Not(ebenen.Item("DE").CurrentVisibility)
ebenen.Item("EN").CurrentVisibility = Not(ebenen.Item("EN").CurrentVisibility)
end if

Next j 'ENDE Dateien durchlaufen
Next i 'ENDE Seiten durchlaufen

... Adobe InDesign Skriptwerkstatt 7. Dez 2017, 18:16 (Henry)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo Henry,

danke für die Hilfe.
Nicht schlecht die Idee mit dem Not-Operator.
Macht es auch etwas kürzer.
Allerdings läuft das Script genau so weit wie meins.

In dem Testdokument habe ich drei InDesign Dateien mit den "DE" und "EN" Ebenen eingebunden.

Beim Test sind die "DE" Ebenen sichtbar. Beim Ausführen des Scripts wird bei der Ersten Datei die "DE" Ebene ausgeblendet und dann kommt der Fehler "... da das Objekt nicht mehr existiert" Zeile 38.

Das ist dann in Deinem Script hier:
Code
ebenen.Item("EN").CurrentVisibility = Not(ebenen.Item("EN").CurrentVisibility) 


und bei mir ist das hier:
Code
ebenen.Item(e(1)).CurrentVisibility = false 


Der Fehler kommt, wenn innerhalb einer Datei die Sichtbarkeit der nächste Ebene umgeschaltet werden soll. Ich frage mich, welches Objekt in dem Moment nicht mehr existiert.
Die Ebene ist ja noch da.
... Adobe InDesign Skriptwerkstatt 7. Dez 2017, 21:05 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Kurzer Zwischenstand,
ich bin etwas weiter.

Durch rumtesten ist mir aufgefallen, dass das Script nur mit der letzten (untersten) Ebene einer eingebundenen Datei funktioniert.

Die Ebene "DE" befindet sich unterhalb der Ebene "EN".
DE geht, EN gibt den Fehler. Befinden sich oberhalb DE weitere Ebenen, so erscheint der Fehler sobald eine dieser Ebenen umgeschaltet werden sollen.
... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 09:25 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Mmmh, da bin ICH als Nicht-Experte überfragt.

Du kannst dir Variablenwerte mit der MsgBox-Funktion ausgeben lassen, also z.B. eine solche Zeile hier einfügen:
Code
		'------------- Toggle Ebenen DE und EN ---------------------   
if (Ebene_DE = true) AND (Ebene_EN = true) then
MsgBox "Ebene DE visible? " & ebenen.Item("DE").CurrentVisibility & VbCr & "Ebene EN visible? " & ebenen.Item("EN").CurrentVisibility
ebenen.Item("DE").CurrentVisibility = Not(ebenen.Item("DE").CurrentVisibility)
ebenen.Item("EN").CurrentVisibility = Not(ebenen.Item("EN").CurrentVisibility)
end if

... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 09:26 (Henry)
Viewing all 8700 articles
Browse latest View live