[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Objektebenenoptionen in platziertem PDF ändern

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

Objektebenenoptionen in platziertem PDF ändern

Jack.
Beiträge gesamt: 25

6. Feb 2015, 08:25
Beitrag # 1 von 11
Bewertung:
(4355 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

stehe hier leider vor einem Problem wo ich einfach keine Lösung finde.

Ich habe im Illustrator eine PDF mit 4 Ebenen erstellt, "de"; "fr"; "it"; "Gestaltungselemente", diese als PDF gespeichert und im InDesign CS6 auf der Arbeitsfläche platziert.

Nun habe ich ein Script welches mir bestimmte Ebenen ausblenden die nicht dem Namen entsprechen.

Code
function pdfLayer(_object, layerName){ 

var _objectFirstGraphic = _object.allGraphics[0];
var _objectLayerLength = _objectFirstGraphic.graphicLayerOptions.graphicLayers.length;
var _objectGraphicLayer = _objectFirstGraphic.graphicLayerOptions.graphicLayers;

for(var i = _objectLayerLength - 1; i >= 0; i--){
if(_objectGraphicLayer[i].name !== layerName && _objectGraphicLayer[i].name !== "Gestaltungselemente"){
_objectGraphicLayer.itemByName(_objectGraphicLayer[i].name).currentVisibility = false;
}
}
}

var thisDoc = app.activeDocument;
var thisRec = thisDoc.selection[0];

try{
pdfLayer(thisRec, "fr");
}catch(e){
$.writeln("Fehler: " + e);
}


Die Ebenen sind alle immer eingeblendet und nicht gesperrt, er findet die erste Ebene und blendet diese aus, sobald er aber eine 2. Ebene findet bricht er mit dem Fehler "Referenzfehler: Objekt ist ungültig" ab, als würde das Objekt nicht mehr existieren.

Ich hoffe mir kann hier jemand weiterhelfen.

Grüße Jack

(Dieser Beitrag wurde von Martin Fischer am 6. Feb 2015, 15:59 geändert)
X

Objektebenenoptionen in platziertem PDF ändern

Uwe Laubender
Beiträge gesamt: 4853

6. Feb 2015, 11:55
Beitrag # 2 von 11
Beitrag ID: #536734
Bewertung:
(4269 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Jack!

Das ein "berühmt-berüchtigter" Bug!

Die ID des platzierten Objekts (nämlich deine AI-Datei !) hat sich nach dem ersten Ausschalten der Sichtbarkeit geändert. Von daher ist die Variable _objectFirstGraphic nicht mehr gültig. Das ursprünglich eingefangene Objekt existiert nicht mehr.

Das kannst Du nachprüfen, wenn Du vor Ablauf des Skripts die ID prüfst:

Code
var myIDBefore = _object.allGraphics[0].id; 

//Hier kommt dann die Schleife
// …

//Dann nochmal prüfen:
var myIDAfter = _object.allGraphics[0].id;

//Vergleichen:
$.writeln(myIDBefore+"\r"+myIDAfter);


Eine try/catch ohne Abbruchbedingung um die if-Abfrage wickeln, damit die Schleife durchlaufen kann.

Code
try{ 
//Bedingung
}catch(e){};


So, jetzt wollen wir mal drüber nachdenken, was der beste Workaround in diesem Fall sein könnte…

Uwe
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#536727]

Objektebenenoptionen in platziertem PDF ändern

Uwe Laubender
Beiträge gesamt: 4853

6. Feb 2015, 12:02
Beitrag # 3 von 11
Beitrag ID: #536735
Bewertung:
(4264 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier noch mal zum Nachvollziehen:

Neue inDesign-Datei erstellen. Genau eine AI-Grafik mit den Ebenen platzieren. Dann folgendes Snippet laufen lassen:

Code
var myID = app.documents[0].allGraphics[0].id; 
var _objectFirstGraphic = app.documents[0].allGraphics[0];
var _objectLayerLength = _objectFirstGraphic.graphicLayerOptions.graphicLayers.length;


for(var n=0; n<_objectLayerLength;n++){

//Fehlermeldung in die JavaScript-Konsole des ESTK, falls Objekt nicht mehr gültig:
try{
if(_objectFirstGraphic.graphicLayerOptions.graphicLayers[n].name !== "Gestaltungselemente"){
_objectFirstGraphic.graphicLayerOptions.graphicLayers[n].currentVisibility = false;
};
}catch(e){$.writeln(n+"\t"+e.message)};

};

/*
Anmerkung: Die gesuchte Ebene ist die unterste der vier Ebenen.

RESULTAT:

1 Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert.
2 Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert.
3 Die angeforderte Aktion konnte nicht ausgeführt werden, da das Objekt nicht mehr existiert.
*/

var myIDAgain = app.documents[0].allGraphics[0].id;
$.writeln(myID+"\r"+myIDAgain);

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#536734]

Objektebenenoptionen in platziertem PDF ändern

Kai Rübsamen
Beiträge gesamt: 4659

6. Feb 2015, 14:18
Beitrag # 4 von 11
Beitrag ID: #536741
Bewertung:
(4203 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich hab ein Skript von jongware gefunden und etwas umgeschrieben. Hier fehlen aber noch ein paar Prüfungen. Muss leider jetzt dringend weg und hole das später nach, falls richtige Richtung.

Code
main(); 
function main() {

var checklist = [];
var layernames = [ "de", "fr", "it", "Gestaltungselemente" ];

var ilDialog = app.dialogs.add({ name: "Objektebenen ein- / ausblenden", canCancel: true });
with ( ilDialog ) {
with( dialogColumns.add() ) {
with( dialogRows.add() ) {
staticTexts.add ({ staticLabel: "Check to show, uncheck to hide" });
for ( var i = 0; i < layernames.length; i++ ) {
with( dialogRows.add() ) {
checklist.push ( checkboxControls.add({ staticLabel: layernames[i], checkedState: false }) );
} // with
} // for
} // with
} // with
} // with


if (ilDialog.show() == true) {

var placedFile = app.selection[0].graphics[0];

for ( var k = 0; k < layernames.length; k++ ) {
var layer = app.selection[0].graphics[0].graphicLayerOptions.graphicLayers.item( layernames[k] );

if ( layer.isValid && layer.currentVisibility != checklist[k].checkedState ) {
layer.currentVisibility = checklist[k].checkedState;
}
}
}

} // end main

[ Edit: Auf speziellen Wunsch von Kai ("Sieht ja furchtbar aus.") die Tabs durch Leerschläge ersetzt. ]

Gruß Kai Rübsamen


als Antwort auf: [#536735]
(Dieser Beitrag wurde von Hans Haesler am 7. Feb 2015, 21:00 geändert)

Objektebenenoptionen in platziertem PDF ändern

Uwe Laubender
Beiträge gesamt: 4853

6. Feb 2015, 14:33
Beitrag # 5 von 11
Beitrag ID: #536742
Bewertung:
(4199 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Kai!

Ich denke, das wird funktionieren, da Du immer mit der Auswahl hier arbeitest.
Und die verliert sich nicht, wenn die ID des platzierten Objekts sich im ausgewählten Grafikrahmen ändert.

Wir schauen also *nicht* auf die Grafik selbst, um etwas zu tun (Layer ausschalten), sondern referenzieren stattdessen den Container, den Grafikrahmen. Von da aus wird dann in der Schleife immer die gerade aktualisierte Grafik angesprochen.

Ja, diese Vorgehensweise haut hin…
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#536741]

Objektebenenoptionen in platziertem PDF ändern

Martin Fischer
  
Beiträge gesamt: 12398

6. Feb 2015, 15:56
Beitrag # 6 von 11
Beitrag ID: #536744
Bewertung:
(4164 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Antwort auf: Wir schauen also *nicht* auf die Grafik selbst, um etwas zu tun (Layer ausschalten), sondern referenzieren stattdessen den Container, den Grafikrahmen.


Gute Idee!
Das lege ich mir auf Evernote. ;-)

Viele Grüße
Martin




als Antwort auf: [#536742]
(Dieser Beitrag wurde von Martin Fischer am 6. Feb 2015, 15:57 geändert)

Objektebenenoptionen in platziertem PDF ändern

Hans Haesler
  
Beiträge gesamt: 5797

7. Feb 2015, 15:59
Beitrag # 7 von 11
Beitrag ID: #536752
Bewertung:
(4010 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

Dein Vorschlag funktioniert. Einigermassen.
Aber die Checkboxen zeigen nicht den aktuellen Zustand.

Das folgende Script listet die Namen und die Sichtbarkeit der Ebenen auf und verwendet diese Arrays im Dialog.
Zu Beginn sind auch die von Dir angesprochenen Prüfungen eingebaut.

Code
//EbenenEinAus_501d.js 
//© 07.02.15 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
//DESCRIPTION:PDF-Ebenen ein- und ausblenden

//Credits: Nach einer Steilvorlage von Kai Rübsamen :-)

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung", true);
exit();
}

// die Auswahl speichern ...
var curSel = app.selection;
var nItems = curSel.length;
// ... und prüfen
if (nItems == 0) {
alert ("Es ist nichts ausgewählt.", "Stop", true);
exit();
}
else if (nItems > 1) {
alert ("Nur *ein* Objekt auswählen.", "Achtung", true);
exit();
}
// testen, ob ein Bildrahmen oder dessen Inhalt ausgewählt ist
var objType = curSel[0].constructor.name;
if (objType == "Rectangle" || objType == "Polygon" || objType == "Oval") {
try {
var curObj = curSel[0].graphics[0];
var curLink = curObj.itemLink;
}
catch (e) {
alert ("Der Bildrahmen ist leer.", "Stop", true);
exit();
}
}
else if (objType == "PDF") {
var curObj = curSel[0];
var curLink = curObj.itemLink;
app.select(curObj.parent);
}
else {
alert ("Bitte ein plaziertes PDF auswählen.", "Achtung", true);
exit();
}

// die ausgewählte Datei
var placedFile = app.selection[0].graphics[0];
var nLayers = 0;
try {
var allLayers = placedFile.graphicLayerOptions.graphicLayers;
var nLayers = allLayers.length;
}
catch (e) {
alert ("Mit dieser Datei klappt es nicht.", "Stop", true);
exit();
}
if (nLayers == 0) {
alert ("Es sind keine Ebenen vorhanden.", "Stop", true);
exit();
}

var layerNames = new Array();
var checkList = new Array();

for (var i=0; i<nLayers; i++) {
layerNames.push(allLayers[i].name);
checkList.push(allLayers[i].currentVisibility);
}

// eventuell vorhandene Dialoge entfernen
try {
app.dialogs.everyItem().destroy();
}
catch (e) {
}

// den Dialog vorbereiten ...
var dlogCheckList = new Array();
var aDialog = app.dialogs.add({name:"Objektebenen ein-/ausblenden", canCancel:true});
with (aDialog) {
with (dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({staticLabel:"aktiviert = einblenden"});
for (var n=0; n<nLayers; n++) {
with (dialogRows.add()) {
dlogCheckList.push(checkboxControls.add({staticLabel:layerNames[n], checkedState:checkList[n]}));
}
}
}
}
}
// ... anzeigen und die Wahl des Anwenders anwenden
if (aDialog.show() == true) {
for (var k=0; k<nLayers; k++) {
var curLayer = app.selection[0].graphics[0].graphicLayerOptions.graphicLayers.itemByName(layerNames[k]);
curLayer.currentVisibility = dlogCheckList[k].checkedState;
}
aDialog.destroy();
}
else {
aDialog.destroy();
}

@ Jack: Ob PDF- oder Illustrator-(ai mit PDF)-Datei: Es funktioniert mit beiden.

Gruss, Hans

[ Edit: Auf speziellen Wunsch von Kai ("Sieht ja furchtbar aus.") die Tabs durch Leerschläge ersetzt.


als Antwort auf: [#536741]
(Dieser Beitrag wurde von Hans Haesler am 7. Feb 2015, 21:00 geändert)

Objektebenenoptionen in platziertem PDF ändern

Kai Rübsamen
Beiträge gesamt: 4659

7. Feb 2015, 21:29
Beitrag # 8 von 11
Beitrag ID: #536759
Bewertung:
(3921 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

nicht nur sehr gute Lösung, sondern du hast wieder mal vorbildlich gezeigt, wie man ein Skript aufbauen kann. Danke.

Die Idee, den Dialog aufgrund der im PDF-gefundenen Ebenen aufbauen zu lassen, finde ich gut. Ich könnte mir aber auch eine Variante vorstellen, bei der man durch alle platzierten Grafiken geht und global z.B. von 'de' auf 'fr' umstellst.

Gruß Kai Rübsamen


als Antwort auf: [#536752]

Objektebenenoptionen in platziertem PDF ändern

Hans Haesler
  
Beiträge gesamt: 5797

8. Feb 2015, 15:07
Beitrag # 9 von 11
Beitrag ID: #536776
Bewertung:
(3786 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

bitte sehr.

Nun, dass der Dialog den aktuellen Zustand wiedergibt, ist doch unabdingbar.
Zwar sieht der Benutzer dem Dokument an, was gerade eingestellt ist.
Aber mithilfe der Checkboxen kann er dem Script seinen Wunsch durchgeben.

Die Variante der Schleife durch die geladenen PDF-Dateien ist einfach einzufügen.
Ausgangspunkt wäre auch ein ausgewählter Rahmen und der Zustand der Ebenen.

Problematisch würde es aber, wenn die Ebenen der Dateien nicht dieselben sind.

Doch warten wir schon mal ab, ob der OP Jack das gepostete Script gebrauchen kann.
Und ob eine Erweiterung für ihn Sinn macht.

Gruss, Hans


als Antwort auf: [#536759]

Objektebenenoptionen in platziertem PDF ändern

Jack.
Beiträge gesamt: 25

9. Feb 2015, 13:08
Beitrag # 10 von 11
Beitrag ID: #536816
Bewertung:
(3601 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen!

Erstmal sorry für meine späte Antwort.

Der 2. Beitrag von Uwe hat mich schon in die richtige Spur gebracht.

Ich habe hier nur nach der try-catch-schleife die platzierte PDF nochmal zugeordnet.

Code
var _objectFirstGraphic = app.documents[0].allGraphics[0];  
var _objectLayerLength = _objectFirstGraphic.graphicLayerOptions.graphicLayers.length;

for(var n=0; n<_objectLayerLength;n++){
try{
if(_objectFirstGraphic.graphicLayerOptions.graphicLayers[n].name !== "Gestaltungselemente"){
_objectFirstGraphic.graphicLayerOptions.graphicLayers[n].currentVisibility = false;
};
}catch(e){
$.writeln(n+"\t"+e.message)
};
_objectFirstGraphic = app.documents[0].allGraphics[0];
};


Ich hoffe ihr habt euch mit dem Dialog-Script nicht zuviel Arbeit gemacht. :)

Grüße Jack


als Antwort auf: [#536776]

Objektebenenoptionen in platziertem PDF ändern

Hans Haesler
  
Beiträge gesamt: 5797

9. Feb 2015, 13:57
Beitrag # 11 von 11
Beitrag ID: #536823
Bewertung:
(3587 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jack,

nöö, nicht zu viel Arbeit. Das war eher eine schöne Fingerübung. :-)

Aber hast Du wenigstens das Script im Beitrag #7 ausprobiert?

Gruss, Hans


als Antwort auf: [#536816]
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
26.01.2021 - 27.01.2021

Digicomp Academy AG, Zürich oder virtuell
Dienstag, 26. Jan. 2021, 08.30 Uhr - Mittwoch, 27. Jan. 2021, 17.00 Uhr

Kurs

In diesem Advanced-Kurs erlernen Sie weitergehende Methoden im Dokumentenaufbau, der Typografie und im Bereich Layouttechniken. Nach diesem Kurs können Sie strukturierte Dokumente erstellen oder bestehende effizienter anpassen.

Dauer: 2 Tage
Preis: CHF 1'400.–

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/INDEM2

Veranstaltungen
27.01.2021 - 28.01.2021

Digicomp Academy AG, Bern oder Basel
Mittwoch, 27. Jan. 2021, 08.30 Uhr - Donnerstag, 28. Jan. 2021, 17.00 Uhr

Kurs

Mit After Effects können Sie visuelle Effekte und Animationen für Video, Web, DVD und Blu-Ray erzeugen. In diesem Kurs lernen Sie die Grundlagen kennen und sehen inspirierende Anwendungsbeispiele, die Ihnen helfen, Ihre eigenen Ideen umzusetzen.

Preis: CHF 1'700.-
Dauer: 2 Tage

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/AFT

Neuste Foreneinträge


Absätze vor/nach AF suchen

Laser Drucker druckt schwarze Flecken Links und Rechts von Blatt

Gleich Große Icons erstellen

PSD CS6 (!) Mac: Dialog "Dateiinformationen" Fenster leer und Sackgasse

Langsamer MacMini

Illustrator Skript Übersatztext - Hilfe benötigt

ID CC 2019 und 2020: Crash beim Startvorgang - 2021

Inhalt Textrahmen verbinden

iPhone Farbprofil

Exel ohne leeres Tabellenblatt starten
medienjobs