[GastForen Programme Print/Bildbearbeitung Adobe InDesign InDesign CS2 [JavaScript]

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

InDesign CS2 [JavaScript]

vhausw
Beiträge gesamt: 65

8. Dez 2006, 12:25
Beitrag # 1 von 4
Bewertung:
(1474 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen.
Ich suche ein JavaScript, welches mir den Inhalt eines Textrahmens kopiert,
und danach in einen 2Textrahmen einfügt [wobei der Inhalt dieses Textrahmens
nicht gelöscht, sondern nur ergänzt werden darf].

Kann mir da jemand von Euch bitte helfen????
Danke.
Grüßle vh


So weit bin ich schon:

Code
var myDoc = app.documents[0];      

//========================================================================================================
//Zeichen style for the page numbers.
//========================================================================================================
// Registration = Passkreuze
// Black = Schwarz
try{myDoc.characterStyles.item("00_INFO_Ebene").name;}
catch (myError){myDoc.characterStyles.add({name:"00_INFO_Ebene"});}
myDoc.characterStyles.item("00_INFO_Ebene").fillColor = myDoc.colors.item("Registration");

//Paragraph styles for the page footer text.
try{myDoc.paragraphStyles.item("00_INFO_Ebene").name;}
catch (myError){myDoc.paragraphStyles.add({name:"00_INFO_Ebene"});}
myDoc.paragraphStyles.item("00_INFO_Ebene").fillColor = myDoc.colors.item("Registration");
//========================================================================================================



var myFrameWidth = 110; // Breite des Textrahmens
var myFrameOffset = 15; // Abstand zur Seite
var myPageWidth = app.documents[0].documentPreferences.pageWidth; // Seitenbreite
var myBounds_00_INFO_Ebene = [24, myPageWidth + myFrameOffset, 150, myPageWidth + myFrameOffset + myFrameWidth]; // Koordinaten des Textrahmens

var myLabel_00_INFO_Ebene = "00_INFO_Satz";
var myFont = "Helvetica LT";

// Neue Ebene anlegen
//
try { var myNewLayer_00_INFO_Ebene = myDoc.layers.add({name:"00_INFO_Ebene"});
myNewLayer_00_INFO_Ebene.move(LocationOptions.atBeginning, undefined); }
catch(e) { var myNewLayer_00_INFO_Ebene = myDoc.layers.item("00_INFO_Ebene") }

// Ebene SPERREN
myNewLayer_00_INFO_Ebene.locked = false;
myNewLayer_00_INFO_Ebene.visible = true;
myNewLayer_00_INFO_Ebene.layerColor = 1766613612; //lightBlue
myNewLayer_00_INFO_Ebene.showGuides = false;


// Textrahmen prüfen und ggf. löschen (Koordinaten sichern)
var myFSFrames = myDoc.spreads[0].textFrames;
for (oneFrame = myFSFrames.length -1; oneFrame >=0 ; oneFrame--)
{
if (myFSFrames[oneFrame].label == myLabel_00_INFO_Ebene)
{
myBounds_00_INFO_Ebene = myFSFrames[oneFrame].geometricBounds;
myFSFrames[oneFrame].remove()
}
}

// catch the info
var theDocName = myDoc.name.split(".indd")[0]; ;
var theCharacters = myDoc.stories.everyItem().characters.length;
var theFN = myDoc.search("^F");
if (theFN.length > 0) var theFNChars = myDoc.stories.everyItem().footnotes.everyItem().texts[0].characters.length else theFNChars = 0;
if (myDoc.stories.everyItem().tables.length > 0) var theTableChars = myDoc.stories.everyItem().tables.everyItem().cells.everyItem().texts[0].characters.length else theTableChars = 0;
var theLinks = myDoc.links.length;
var theFonts = myDoc.fonts.everyItem().name.join("\r\t");



// legt das Absatzformat "Info" an
myStyle_00_INFO_Ebene = myDoc.paragraphStyles.item("00_INFO_Ebene")


// prüft, ob das Absatzformat bereits vorhanden
try
{
myStyle_00_INFO_Ebene.name;
}
catch (e) // Nein, das Absatzformat ist nicht vorhanden, wird neu angelegt
{
myStyle_00_INFO_Ebene = myDoc.paragraphStyles.add({name:"00_INFO_Ebene"})
}

// das Absatzformat bekommt verschiedene Eigenschaften zugewiesen
// unabhängig davon, ob es beim Start des Skripts schon angelegt war oder nicht
if (app.fonts.item(myFont).status != FontStatus.installed)
{
alert("Schrift \"" + myFont + "\" nicht vorhanden.\rAbsatzformat \"Info\" konnte nicht angelegt werden.");
exit();
}

myTabList_00_INFO_Ebene = [{position:'3.5mm', aligment:TabStopAlignment.leftAlign}, {position:'40mm', aligment:TabStopAlignment.leftAlign}];
with (myStyle_00_INFO_Ebene)
{
appliedFont = app.fonts.item(myFont),
justification = Justification.leftAlign,
firstLineIndent = 0,
leftIndent = 0,
pointSize = 7,
tabList_00_INFO_Ebene = myTabList_00_INFO_Ebene

}



// neues Zeichenformat anlegen mit bestimmten Eigenschaften
// wenn die gewählte Schrift nicht installiert ist, erfolgt Abbruch
myCharStyle_00_INFO_Ebene = myDoc.characterStyles.item("00_INFO_Ebene")
try
{
myCharStyle_00_INFO_Ebene.name;
}
catch (e)
{
if (app.fonts.item(myFont).status != FontStatus.installed)
{
alert("Schrift \"" + myFont + "\" nicht vorhanden.\rZeichenformat \"Info\" konnte nicht angelegt werden.");
exit();
}

myCharStyle_00_INFO_Ebene = myDoc.characterStyles.add(
{
name:"00_INFO_Ebene",
appliedFont:app.fonts.item(myFont),
pointSize:7,
}
)
}



//============================================================================================
//Legt einen Textrahmen an.
//============================================================================================

myFrame_00_INFO_Ebene = myDoc.pages[0].textFrames.add
(
{
geometricBounds:myBounds_00_INFO_Ebene,
contents:
("[VH]_" + iniName_01 ),
label:myLabel_00_INFO_Ebene,
itemLayer:myNewLayer_00_INFO_Ebene
}
);
//============================================================================================
// Zuweisung des Absatzformats
myFrame_00_INFO_Ebene.texts[0].appliedParagraphStyle = myStyle_00_INFO_Ebene
X

InDesign CS2 [JavaScript]

Martin Fischer
  
Beiträge gesamt: 12714

8. Dez 2006, 12:41
Beitrag # 2 von 4
Beitrag ID: #266051
Bewertung:
(1466 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo vh,

auf die Schnelle konnte ich aus Ihrem Code nicht entschlüsseln, wie sie Text aus einem Textrahmen in einen anderen kopieren wollen. Da werden Ebenen überprüft und neu angelegt, dasselbe mit geschieht mit Absatz- und Zeichenformaten. Und ein neuer Textrahmen wird auch angelegt.

Aber es ist nicht ersichtlich, aus welchem Textrahmen Sie in welchen anderen Text kopieren möchten.

Deswegen hier nur eine Lösungsskizze:
Leider kennt das Textobjekt keinen duplicate-Befehl, sondern nur den move-Befehl.
Sie wollen aber den ursprünglichen Text nicht löschen, sondern erhalten (also kopieren).

Das geht über copy & paste:
Wählen Sie den Quelltext mit dem select-Befehl in dem einen Textrahmen aus und kopieren Sie diesen mit app.copy(). Anschließend wählen Sie den letzten Einfügepunkt des zweiten Textrahmens aus (besser den letzten Einfügepunkt des übergeordneten Textflusses) und fügen dort den Inhalt der Zwischenablage ein.


als Antwort auf: [#266047]

InDesign CS2 [JavaScript]

vhausw
Beiträge gesamt: 65

8. Dez 2006, 13:34
Beitrag # 3 von 4
Beitrag ID: #266062
Bewertung:
(1443 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Halllo Herr Fischer,
ich habe nun einmal versucht die 2 Textrahmen zu erzeugen.
Die Befüllung steht auch schon, aber das Kopieren geht noch nicht.
Könnten Sie mir da nochmals HELFEN......

Code
var myDoc = app.documents[0];      

//========================================================================================================
//Zeichen style for the page numbers.
//========================================================================================================
//Paragraph styles for the page footer text.
try{myDoc.paragraphStyles.item("00_INFO_Ebene").name;}
catch (myError){myDoc.paragraphStyles.add({name:"00_INFO_Ebene"});}
myDoc.paragraphStyles.item("00_INFO_Ebene").fillColor = myDoc.colors.item("Registration");
//========================================================================================================




var myFrameWidth = 110; // Breite des Textrahmens
var myFrameOffset = 7; // Abstand zur Seite
var myPageWidth = app.documents[0].documentPreferences.pageWidth; // Seitenbreite
var myBounds = [184, myPageWidth + myFrameOffset, 174, myPageWidth + myFrameOffset + myFrameWidth]; // Koordinaten des Textrahmens

var myLabel = "INFO_Satz";
var myFont = "Helvetica LT";


//02_Musterseite============================================================================================
// Neue Ebene anlegen
//
try { var myNewLayer_02_Musterseite = myDoc.layers.add({name:"02_Musterseite"});
myNewLayer_02_Musterseite.move(LocationOptions.atBeginning, undefined); }
catch(e) { var myNewLayer_02_Musterseite = myDoc.layers.item("02_Musterseite") }

// Ebene SPERREN
myNewLayer_02_Musterseite.locked = false;
myNewLayer_02_Musterseite.visible = true;
myNewLayer_02_Musterseite.layerColor = 1766613612; //lightBlue
myNewLayer_02_Musterseite.showGuides = false;
//========================================================================================================
// Textrahmen prüfen und ggf. löschen (Koordinaten sichern)
var myFSFrames = myDoc.spreads[0].textFrames;
for (oneFrame = myFSFrames.length -1; oneFrame >=0 ; oneFrame--)
{
if (myFSFrames[oneFrame].label == myLabel)
{
myBounds = myFSFrames[oneFrame].geometricBounds;
myFSFrames[oneFrame].remove()
}
}
//========================================================================================================

// catch the info
var theDocName = myDoc.name.split(".indd")[0]; ;
var theCharacters = myDoc.stories.everyItem().characters.length;
var theFN = myDoc.search("^F");
if (theFN.length > 0) var theFNChars = myDoc.stories.everyItem().footnotes.everyItem().texts[0].characters.length else theFNChars = 0;
if (myDoc.stories.everyItem().tables.length > 0) var theTableChars = myDoc.stories.everyItem().tables.everyItem().cells.everyItem().texts[0].characters.length else theTableChars = 0;
var theLinks = myDoc.links.length;
var theFonts = myDoc.fonts.everyItem().name.join("\r\t");

// Datumformatierung
var Datum = new (Date);
var Tag = Datum.getDate();
if (Tag<10)
{
Tag = "0" + Tag;
}
var Wochentag = Datum.getDay();
var Monat = Datum.getMonth();
var Jahr = Datum.getFullYear();
var Tagname = new Array("So","Mo","Di","Mi","Do","Fr","Sa");
var Monatname = new Array("01","02","03","04","05","06","07","08","09","10","11","12");
var Stunde = Datum.getHours();
var Minute = Datum.getMinutes();
if (Minute<10)
{
Minute = "0" + Minute;
}
if (Stunde<10)
{
Stunde = "0" + Stunde;
}

// legt das Absatzformat "Info" an
myStyle = myDoc.paragraphStyles.item("00_INFO_Satz")
// prüft, ob das Absatzformat bereits vorhanden
try
{
myStyle.name;
}
catch (e) // Nein, das Absatzformat ist nicht vorhanden, wird neu angelegt
{
myStyle = myDoc.paragraphStyles.add({name:"00_INFO_Satz"})
}
// das Absatzformat bekommt verschiedene Eigenschaften zugewiesen
// unabhängig davon, ob es beim Start des Skripts schon angelegt war oder nicht
if (app.fonts.item(myFont).status != FontStatus.installed)
{
alert("Schrift \"" + myFont + "\" nicht vorhanden.\rAbsatzformat \"Info\" konnte nicht angelegt werden.");
exit();
}

myTabList = [{position:'3.5mm', aligment:TabStopAlignment.leftAlign}, {position:'40mm', aligment:TabStopAlignment.leftAlign}];
with (myStyle)
{
appliedFont = app.fonts.item(myFont),
justification = Justification.leftAlign,
firstLineIndent = 0,
leftIndent = 0,
pointSize = 7,
tabList = myTabList

}
//============================================================================================
// Legt einen Textrahmen an.
// >> Quelle <<
//============================================================================================
myFrame = myDoc.pages[0].textFrames.add
(
{
geometricBounds:myBounds,
contents:
("Original-Text"),
label:myLabel,
itemLayer:myNewLayer_02_Musterseite
}
);
//============================================================================================
// Zuweisung des Absatzformats
myFrame.texts[0].appliedParagraphStyle = myStyle
//============================================================================================
var myFrameWidth_00 = 110; // Breite des Textrahmens
var myFrameOffset_00 = 15; // Abstand zur Seite
var myPageWidth_00 = app.documents[0].documentPreferences.pageWidth; // Seitenbreite
var myBounds_00_INFO_Ebene = [24, myPageWidth_00 + myFrameOffset_00, 150, myPageWidth_00 + myFrameOffset_00 + myFrameWidth_00]; // Koordinaten des Textrahmens

var myLabel_00_INFO_Ebene = "00_INFO_Satz";
var myFont = "Helvetica LT";



// Neue Ebene anlegen
//
try { var myNewLayer_00_INFO_Ebene = myDoc.layers.add({name:"00_INFO_Ebene"});
myNewLayer_00_INFO_Ebene.move(LocationOptions.atBeginning, undefined); }
catch(e) { var myNewLayer_00_INFO_Ebene = myDoc.layers.item("00_INFO_Ebene") }

// Ebene SPERREN
myNewLayer_00_INFO_Ebene.locked = false;
myNewLayer_00_INFO_Ebene.visible = true;
myNewLayer_00_INFO_Ebene.layerColor = 1766613612; //lightBlue
myNewLayer_00_INFO_Ebene.showGuides = false;


// Textrahmen prüfen und ggf. löschen (Koordinaten sichern)
var myFSFrames = myDoc.spreads[0].textFrames;
for (oneFrame = myFSFrames.length -1; oneFrame >=0 ; oneFrame--)
{
if (myFSFrames[oneFrame].label == myLabel_00_INFO_Ebene)
{
myBounds_00_INFO_Ebene = myFSFrames[oneFrame].geometricBounds;
myFSFrames[oneFrame].remove()
}
}

// catch the info
var theDocName = myDoc.name.split(".indd")[0]; ;
var theCharacters = myDoc.stories.everyItem().characters.length;
var theFN = myDoc.search("^F");
if (theFN.length > 0) var theFNChars = myDoc.stories.everyItem().footnotes.everyItem().texts[0].characters.length else theFNChars = 0;
if (myDoc.stories.everyItem().tables.length > 0) var theTableChars = myDoc.stories.everyItem().tables.everyItem().cells.everyItem().texts[0].characters.length else theTableChars = 0;
var theLinks = myDoc.links.length;
var theFonts = myDoc.fonts.everyItem().name.join("\r\t");



// legt das Absatzformat "Info" an
myStyle_00_INFO_Ebene = myDoc.paragraphStyles.item("00_INFO_Ebene")


// prüft, ob das Absatzformat bereits vorhanden
try
{
myStyle_00_INFO_Ebene.name;
}
catch (e) // Nein, das Absatzformat ist nicht vorhanden, wird neu angelegt
{
myStyle_00_INFO_Ebene = myDoc.paragraphStyles.add({name:"00_INFO_Ebene"})
}

// das Absatzformat bekommt verschiedene Eigenschaften zugewiesen
// unabhängig davon, ob es beim Start des Skripts schon angelegt war oder nicht
if (app.fonts.item(myFont).status != FontStatus.installed)
{
alert("Schrift \"" + myFont + "\" nicht vorhanden.\rAbsatzformat \"Info\" konnte nicht angelegt werden.");
exit();
}

myTabList_00_INFO_Ebene = [{position:'3.5mm', aligment:TabStopAlignment.leftAlign}, {position:'40mm', aligment:TabStopAlignment.leftAlign}];
with (myStyle_00_INFO_Ebene)
{
appliedFont = app.fonts.item(myFont),
justification = Justification.leftAlign,
firstLineIndent = 0,
leftIndent = 0,
pointSize = 7,
tabList_00_INFO_Ebene = myTabList_00_INFO_Ebene

}

//============================================================================================
// Legt einen Textrahmen an.
// >> Ziel <<
//============================================================================================
myFrame_00_INFO_Ebene = myDoc.pages[0].textFrames.add
(
{
geometricBounds:myBounds_00_INFO_Ebene,
contents:
("[VH]_" + " >> Text aus erstem Textrahmen <<" ),
label:myLabel_00_INFO_Ebene,
itemLayer:myNewLayer_00_INFO_Ebene
}
);
//============================================================================================
// Zuweisung des Absatzformats
myFrame_00_INFO_Ebene.texts[0].appliedParagraphStyle = myStyle_00_INFO_Ebene


Dankeschööön


als Antwort auf: [#266051]

InDesign CS2 [JavaScript]

Martin Fischer
  
Beiträge gesamt: 12714

8. Dez 2006, 14:08
Beitrag # 4 von 4
Beitrag ID: #266069
Bewertung:
(1432 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo vhausw,

es tut mir leid, aber aus Ihrem Code kann ich immer noch nicht erkennen, aus welchem Textrahmen der Text kopiert werden soll. Das Ziel ist klar. Aber wo ist die Quelle?

Hier ein kleines Skript, das mit genau zwei Textrahmen funktioniert.
Der erste Textrahmen ist der, der als erster ausgewählt worden ist.
Und aus diesem wird der gesamte Text ans Ende des zweiten kopiert.

Genauer gesagt: der gesamte Textfluß des ersten Textrahmens wird ans Ende des Textflusses des zweiten Textrahmens angehängt.

Code
//copyFromOneFrame3Another.jsx 

if (app.selection.length != 2) {
alert("Fehler!\rSie haben " + app.selection.length + " Objekte ausgewählt.\Das Skript verarbeitet aber nur genau zwei Objekte.")
exit();
}

if ((app.selection[0].constructor.name == "TextFrame") && (app.selection[0].constructor.name == "TextFrame")) {
var oldSelection = app.selection;
app.selection[1].parentStory.texts[0].select();
app.copy();
restoreSelection();
app.selection[0].parentStory.insertionPoints[-1].select();
app.paste();
restoreSelection();
}

function restoreSelection() {
oldSelection[oldSelection.length-1].select();
for (k = oldSelection.length-2; k >= 0; k--)
oldSelection[k].select(SelectionOptions.addTo);
}


Auch wenn ich mit dem Skript selber wahrscheinlich nie etwas Vernünftiges anfangen werde, so halte ich wenigstens die Funktion "restoreSelection()" auch für andere Zwecke verwendbar.


als Antwort auf: [#266062]
(Dieser Beitrag wurde von Martin Fischer am 8. Dez 2006, 14:10 geändert)
X