hilfdirselbst.ch
Facebook Twitter gamper-media
Forenindex -- Lesezeichen

15 Lesezeichen für skript

Skript zum Index generieren
Mit folgendem Skript lassen sich Indexeinträge basierend auf einer Konkordanzliste (Liste mit aufzunehmenden Begriffen) erzeugen. Ein Dialog fordert zur Auswahl der Textdatei mit der Begriffsliste auf. Die Begriffe müssen durch Zeilenschaltung voneinander getrennt sein (je Begriff eine neue Zeile).

Code
// IndexFromList.jsx  
//DESCRIPTION: Erzeugt Indexeinträge anhand einer externen Konkordanzdatei, die über einen Dialog ausgewählt wird.

var myDoc = app.activeDocument;
var myList = File.openDialog ("Liste mit Indexbegriffen");
if (!myList) exit();

var myWords = getWords(myList);
proceedWithList(myWords);
alert("Habe fertig!");


// Konkordanzliste einlesen
function getWords (aFile) {
if (aFile.exists) {
aFile.open ('r', undefined, undefined);
var aText = aFile.read()+'\n';
// löschen von Leerzeichen am Ende der Zeile + löschen von leeren Zeilen
aText = aText.replace(/ +\n/g, '\n').replace(/\n+/g, '\n');
// ersetzen von mehrfach aufeinander folgende Leerzeichen aller Art und von RETURNs durch RETURNs
aText = aText.replace(/\s+/g, '\n');

var words = aText.split('\n');
aFile.close();
return words;
}
else {
exit();
}
}

// Begriffsliste abarbeiten
function proceedWithList (w) {
// bei Bedarf wird ein neuer Index erzeugt
if (myDoc.indexes.length == 0)
myDoc.indexes.add();

app.findPreferences = app.changePreferences = null;

for (var i = 0; i < w.length; i++)
if (w[i] != "")
makeEntry(w[i]);

// Aktualisieurng des Index
myDoc.indexes[0].update();
}

// Indexeintrag erzeugen
function makeEntry(oneWord) {
var myResult = myDoc.search(oneWord, true, true, undefined);
for (var oneEntry = myResult.length-1; oneEntry >=0; oneEntry--) {
// Fehler abfangen, z.B. Fußnoten ausnehmen
try {
// Hinzufügen des Themas
myDoc.indexes[0].topics.add(oneWord);
// Hinzufügen der Referenz
myDoc.indexes[0].topics.item(myResult[oneEntry].contents).pageReferences.add(myResult[oneEntry], PageReferenceType.currentPage);
}
catch(e) {}
}
}


Das Skript basiert auf Peter Kahrels IndexFromCharacterStyle_shortVersion.js (Dank für die Vorlage).

Aktuell ist es so eingestellt, daß es Groß-/Kleinschreibung unterscheidet ("fischen" ungleich "Fischen") und daß es nach ganzen Worten sucht ("Fisch" findet "Fisch", aber nicht "Fischer").
Diese Einschränkung könnte bei Bedarf später per Dialog mit Optionen geöffnet werden.

Ferner ignoriert diese Version Fundstellen in Fußnoten.
Um letztere zu berücksichtigen, müßten die Fußnoten z.B. über das Skript notes2text.jsx von Peter Kahrel zunächst in Endnoten umgewandelt und nach der Erzeugung der Indexeinträge mit demselben Skript wieder in Fußnoten zurückkonvertiert werden.

edit (16.11.2007):
Eine aktualisierte Fassung (für InDesign CS2) findet sich in Indexhilfe erwünscht.
...
Martin Fischer
5. Mär 2007, 08:48
Wörterbuch-Problem in CS6
Hallo zusammen,

bzgl. der Wörterbücher in InDesign mache ich entweder etwas falsch oder ich habe bis heute nicht verstanden wie das funktioniert…

Wir haben gerade einen Job abgeschlossen, bestehend aus knapp 500 einzelnen ID-Dateien. Im Laufe des Jobs habe ich immer mal wieder falsche oder unerwünschte Silbentrennungen (meist nicht-deutsche Wörter) ins Benutzerwörterbuch aufgenommen (siehe Screenshot "user_dictionary.pdf").

Selbstverständlich habe ich in den Voreinstellungen für die Dokumente die Option "Benutzerwörterbuch ins Dokument einlesen" aktiviert (siehe Screenshot "dictionary_preferences.pdf).

Etwa drei Wochen lang wurden die Dokumente immer wieder geöffnet und bearbeitet, mal auf Computer A, mal über's Netzwerk auf Computer B. Die Dokumente liegen und lagen stets am gleichen Ort auf Computer A. Ausschließlich auf Computer A wird das auch das Benutzerwörterbuch gepflegt. Es wurde nicht exportiert und auf Computer B übertragen. Nicht ein einziges Mal wurde beim Öffnen eines Dokumentes gemeckert, dass mit den Trennungsausnahmen etwas nicht stimmt. Weder auf Computer A noch auf Computer B.

Seit gestern weist InDesign plötzlich auf Computer A beim Öffnen eines beliebigen Dokumentes dieses Jobs auf abweichende Trennungsausnahmen hin (Screenshot "nervige_frage.pdf"). Ohne dass ich an den Einstellungen von InDesign oder sonstwas etwas verändert hätte. Auf Computer B kommt dieser Hinweis nicht. Gerade mit ca. 20 zufällig ausgewählten Dateien getestet.

Hat jemand eine Erklärung dafür oder kann mir eventuell die "Erleuchtung" geben? Die InDesign-Hilfe macht mich auch nicht schlauer…
...
Ralf Hobirk
15. Nov 2012, 18:00
|| Absatzformate aus JSON erzeugen
Hey,

beim rumspielen ist mir folgendes aufgefallen.
Man kann in die ".add()" Methode JSON rein schmeissen. Vielleicht wusstet ihr das schon. Wenn nicht hier mein Code zum Absatzformate erzeugen.
Viel Spass damit.
:F
Code
main(); 
function main(){


createParStyles(app.documents.add());

};


function createParStyles (theDoc) {

var parStyles = {
"styles":[
{"name":"h1" ,"appliedFont":app.fonts.item(0)/* bold */ , "pointSize":23},
{"name":"h2" , "pointSize":17},
{"name":"h3" , "pointSize":16},
{"name":"h4" , "pointSize":15},
{"name":"h5" , "pointSize":15},
{"name":"h6" , "pointSize":15},
{"name":"body" ,"appliedFont":app.fonts.item(0) , "pointSize":13,"alignToBaseline":true},
{"name":"ul" , "pointSize":13, "basedOn":theDoc.paragraphStyles.item("body")},
{"name":"ol" ,"pointSize":13, "basedOn":theDoc.paragraphStyles.item("body")},
{"name":"blockquote" ,"pointSize":12 ,"leftIndent":5}
],
};



for(var i in parStyles.styles){
try{
theDoc.paragraphStyles.add(parStyles.styles[i]);
}catch(e){
alert(e + "\n" + i);
};
};
};

...
fabiantheblind
8. Mai 2012, 19:56
Objektebenenoptionen per Skript ändern (Optionen)
Hallo,
ich möchte mir einem Skript, welches bereits von allen in ein Indesign-Dokument verknüpfte Bilder (Illustrator) die Ebene ändert, auch die "Optionen für Verknüpfungsaktualisierung" verändern. Diese ist per Default auf "Ebenensichtbarkeit von PDF verwenden", ich möchte diese Optionen jedoch auf "Benutzerdefinierte Ebenensichtbarkeit beibehalten" schalten. Jedoch habe ich keine Ahnung wie ich diese Option in dem Skript umsetzen soll. Anbei das Skript:
Code
var myLinks = app.activeDocument.links;   
var newLang = "DE";
avaiLangs = new Array("DE", "GB", "ES", "FR", "IT", "NL", "DK", "FI", "SE");
for ( var i = 0; i < myLinks.length; i++ )
{
if ( myLinks[i].parent.hasOwnProperty('graphicLayerOptions') ) {
checkLayers( myLinks[i], newLang);
}

}
alert("Sprachumstellung abgeschlossen!");
function checkLayers( oneLink, newLang)
{
for ( var n = 0; n < avaiLangs.length; n++ ){
var myObjectLayers = oneLink.parent.graphicLayerOptions.graphicLayers;
if ( myObjectLayers.itemByName(avaiLangs[n]).isValid)
{ myObjectLayers.itemByName(avaiLangs[n]).currentVisibility = false;


}

}
if ( myObjectLayers.itemByName(newLang).isValid){
myObjectLayers.itemByName(newLang).currentVisibility = true;
}

}


Ich hoffe mir kann jemand helfen.
Danke!

LG
Sebastian
...
hansmaulwurf90
9. Mär 2011, 15:45
Zeichen zählen
In http://www.adobeforums.com/webx?14@@.3c063846/5 hat Harbs heute ein erweitertes Skript zum Zählen von Zeichen, Wörtern, Zeilen und Absätzen in der Auswahl, dem ausgewählten Textabschnitt oder in allen Textabschnitten veröffentlicht:

Code
//TextCounter 
//An InDesign 3 JavaScript
//
//Counts text objects in the selection, in the selected story, or in all stories in a document.
//
//For more on InDesign scripting, go to http://www.adobe.com/products/indesign/scripting.html
//or visit the InDesign Scripting User to User forum at http://www.adobeforums.com
//
if(app.documents.length != 0){
if(app.activeDocument.stories.length > 0){
myDisplayDialog();
}
else{
alert("The current document does not contain any text.");
}
}
else{
alert("No documents are open. Please open a document and try again.");
}

function myDisplayDialog(){
var myCountButtons, myRangeButtons;
var myDialog = app.dialogs.add({name:"TextCounter"});
with(myDialog.dialogColumns.add()){ with(borderPanels.add()){
staticTexts.add({staticLabel:"Count:"});
with(myCountButtons = radiobuttonGroups.add()){
radiobuttonControls.add({staticLabel:"Characters"});
radiobuttonControls.add({staticLabel:"Words", checkedState:true});
radiobuttonControls.add({staticLabel:"Lines"});
radiobuttonControls.add({staticLabel:"Paragraphs"});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"Range:"});
with(myRangeButtons = radiobuttonGroups.add()){
radiobuttonControls.add({staticLabel:"Selection", checkedState:true});
radiobuttonControls.add({staticLabel:"Selected Story"});
radiobuttonControls.add({staticLabel:"All Stories"});
}
}
}
var myReturn = myDialog.show();
if (myReturn == true){
//Get the values from the dialog box.
var myRangeType = myRangeButtons.selectedButton;
var myCountType = myCountButtons.selectedButton;
myDialog.destroy();
myTextCounter(myRangeType, myCountType);
}
else{
myDialog.destroy();
}
}
function myTextCounter(myRangeType, myCountType){
var myDocument, myTextCount, mySelection, myCountingUnit;
with (myDocument = app.activeDocument){
//Set the AlreadyCounted key of any stories in the document to false.
for (var myStoryCounter = 0; myStoryCounter < myDocument.stories.length; myStoryCounter ++){
myDocument.stories.item(myStoryCounter).insertLabel("AlreadyCounted", "False")
}
switch (myRangeType){
case 0:
//Count the text in the selection.
//If multiple text frames are selected, all of the
//text in the frames will be counted.
mySelection = selection;
if (mySelection.length == 1){
myTextCount = mySelectionSorter(mySelection[0], myRangeType, myCountType); }
else{
myTextCount = 0;
for (var myCounter = 0; myCounter < mySelection.length; myCounter++){
myTextCount = myTextCount + mySelectionSorter(mySelection[myCounter], myRangeType, myCountType);
}
}
break;
case 1:
//Count the text in the parent story (or stories) of the selection)
mySelection = selection;
if (mySelection.length == 1){
myTextCount = mySelectionSorter(mySelection[0], myRangeType, myCountType);
}
else{
myTextCount = 0;
//Now iterate through the items and count the text.
for (var myCounter = 0; myCounter < mySelection.length; myCounter++){
myTextCount = myTextCount + mySelectionSorter(mySelection[myCounter], myRangeType, myCountType);
}
}
break;
case 2:
//Count the text in all stories of the active document.
myTextCount = 0;
for(var myStoryCounter = 0; myStoryCounter < myDocument.stories.length; myStoryCounter ++){
myTextCount = myTextCount + myCountText(myDocument.stories.item(myStoryCounter), myCountType);
}
break;
}
switch(myCountType){
case 0:
if (myTextCount == 1){
myCountingUnit = "character";
}
else {
myCountingUnit = "characters";
}
break;
case 1:
if (myTextCount == 1){
myCountingUnit = "word";
}
else {
myCountingUnit = "words";
}
break;
case 2:
if (myTextCount == 1){
myCountingUnit = "line";
}
else {
myCountingUnit = "lines";
}
break;
case 3:
if (myTextCount == 1){
myCountingUnit = "paragraph";
}
else {
myCountingUnit = "paragraphs";
}
break;
}
var myDialog = app.dialogs.add({name:"TextCounter", canCancel:false});
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
with(borderPanels.add()){
staticTexts.add({staticLabel:"InDesign found "});
with(dialogColumns.add()){
textEditboxes.add({editContents:myTextCount+""});
}
with(dialogColumns.add()){
staticTexts.add({staticLabel:myCountingUnit});
}
}
}
}
myDialog.show();
myDialog.destroy();
}
}
function mySelectionSorter(myObject, myRangeType, myCountType){
var myTextCount;
switch (myObject.constructor.name){
case "Text":
case "InsertionPoint":
switch (myRangeType){
case 0:
myTextCount = myCountText(myObject, myCountType);
break;
case 1:
myTextCount = myCountText(myObject.parentStory, myCountType);
break;
}
break;
case "TextFrame":
switch (myRangeType){
case 0:
myTextCount = myCountText(myObject.texts.item(0), myCountType);
break;
case 1:
//Has the parent story already been counted?
myStory = myObject.parentStory;
myCountedState = myStory.extractLabel("AlreadyCounted");
if (myCountedState != "True"){
myTextCount = myCountText(myStory, myCountType);
myStory.insertLabel("AlreadyCounted", "True");
}
else {
myTextCount = 0;
}
break;
}
break;
default:
//Selection is a not a text object.
//There's still a chance it could be a textPath object.
if (myObject.textPaths.length !=0){
myTextCount = 0;
if (myRangeType == 1){
for (myTextPathCounter = 0; myTextPathCounter < myObject.textPaths.length; myTextPathCounter ++){
myStory = myObject.textPaths.item(myTextPathCounter).parentStory;
myCountedState = myStory.extractLabel("AlreadyCounted");
if (myCountedState != "True"){
myTextCount = myTextCount + myCountText(myObject.textPaths.item(myTextPathCounter).parentStory, myCountType);
myObject.textPaths.item(myTextPathCounter).parentStory.insertLabel("AlreadyCounted","True");
}
else{
myTextCount = 0;
}
}
}
else {
for (myTextPathCounter = 0; myTextPathCounter < myObject.textPaths.length; myTextPathCounter ++){
myTextCount = myTextCount + myCountText(myObject.textPaths.item(myTextPathCounter).texts.item(0), myCountType);
}
}
}
else {
myTextCount = 0;
}
break; }
return myTextCount;
}
function myCountText(myTextObject, myCountType){
var myTextCount;
switch(myCountType){
case 0:
//count characters
myTextCount = myTextObject.characters.length;
break;
case 1:
//count words
myTextCount = myTextObject.words.length;
break;
case 2:
//count lines
myTextCount = myTextObject.lines.length;
break;
case 3:
//count paragraphs
myTextCount = myTextObject.paragraphs.length;
break;
}
return myTextCount;
}

...
Martin Fischer
27. Feb 2008, 23:36
Absatzformate die sich automatisch gemäss Voreinstellungen ändern
Weil's ohnehin aktualisiert werden mußte (http://www.adobeforums.com/webx/.3c05c1b8/5), hier die CS3-Version des Skript zum Wechsel der Sprache in Absatz- und Zeichenformaten:

Code
// changeLanguageOfStyles_CS3.jsx   
//
myDoc=app.documents[0];
var theResult = myDisplayDialog();
var myLanguage= theResult[0];

// Absatzformate
if ( theResult[1] == true )
{
var myStyles=myDoc.paragraphStyles;
for ( var oneStyle=1; oneStyle < myStyles.length; oneStyle++ )
{
myStyles[oneStyle].appliedLanguage=myLanguage;
}
}

// Zeichenformate
if ( theResult[2] == true )
{
var myStyles=myDoc.characterStyles;
for ( var oneStyle=1; oneStyle < myStyles.length; oneStyle++ )
{
myStyles[oneStyle].appliedLanguage=myLanguage;
}
}

function myDisplayDialog()
{
var theLanguages = app.languagesWithVendors.everyItem().name;
var allLang = app.languagesWithVendors;

var myDialog = app.dialogs.add( {name:"Ändere die Sprache aller Absatzformate"} );
with( myDialog.dialogColumns.add() )
{
with( dialogRows.add() )
{
with( dialogColumns.add() )
{
staticTexts.add( {staticLabel:"Sprache:", minWidth:120} );
}
with( dialogColumns.add() )
{
var myLanguagesDropdown = dropdowns.add( {stringList:theLanguages, selectedIndex:1} );
}
}
with( dialogRows.add() )
{
with( dialogColumns.add() )
{
staticTexts.add( {staticLabel:"anwenden auf:", minWidth:120} );
}
with( dialogColumns.add() )
{
var myParacheckbox = checkboxControls.add( {staticLabel:"Absatzformate", checkedState:true} );
var myCharcheckbox = checkboxControls.add( {staticLabel:"Zeichenformate", checkedState:false} );
}
}
}
var theResult = myDialog.show();
if ( theResult == true )
{
var theLan = allLang[myLanguagesDropdown.selectedIndex]
var theParaSt = myParacheckbox.checkedState;
var theCharSt = myCharcheckbox.checkedState;
myDialog.destroy();
}
else
{
myDialog.destroy();
exit();
}
return [theLan, theParaSt, theCharSt];
}

...
Martin Fischer
10. Jan 2008, 00:54
Textrahmen, die ein bestimmtes Absatzformat enthalten, auf andere Ebene kopieren per Skript
Damit?

Code
// Adobe InDesign CS3 Script 

Absatzformat = app.activeDocument.paragraphStyles.item( 'Normal' );
Ebene = app.activeDocument.layers.item( 'Ebene 1' );

app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
try { app.findTextPreferences.appliedParagraphStyle = Absatzformat; } catch(e) { alert( 'Fehler\rAbsatzformat ok?' )}

f = app.activeDocument.findText();
for ( i = 0; i < f.length; i++ )
try { f[i].parentTextFrames[0].itemLayer = Ebene; } catch(e) { alert('Fehler\rEbene ok?\rEventuell steckt der Absatz im Überlauf.' )}


Mist, Du brauchtest es für CS2.
Damit?

Code
// Adobe InDesign CS2 Script 

Absatzformat = app.activeDocument.paragraphStyles.item( 'Normal' );
Ebene = app.activeDocument.layers.item( 'Ebene 1' );

app.findPreferences = app.changePreferences = NothingEnum.nothing;
try { app.findPreferences.appliedParagraphStyle = Absatzformat;} catch(e) {alert('Fehler\rAbsatzformat ok?')}

f = app.activeDocument.search();
for (i = 0; i < f.length; i++)
try {f[i].parentTextFrames[0].itemLayer = Ebene;} catch(e) {alert('Fehler\rEbene ok?\rEventuell steckt der Absatz im Überlauf.')}

...
Martin Fischer
23. Jan 2008, 22:52
[JS] Barcode Generator Skript - TESTEN
 
Hallo,

im engl. Skripting-Forum wurde ein Skript zur Erstellung von EAN13/ISBN-Barcodes veröffentlicht.

Hat irgendjemand die Möglichkeit einen mit diesem Skript erzeugten Barcode mit einem Barcode-Leser zu prüfen?

Hier der Link:
http://www.adobeforums.com/...?14@581.kUhHholPQaO@
...
zaphodbeeblebroxx
26. Sep 2007, 14:33
[JS] Indexeinträge im Umbruch visualisieren
Peter Kahrel hat in den letzten Tagen im Adobe Scripting-Forum zwei interessante CS3-Skripte zur Visualisierung von Indexeinträgen veröffentlicht, die ich hier festhalten möchte:

1. Taggen
Mit diesem Skript werden die Indexeinträge an Ort und Stelle in Tags dargestellt:
'<ix>Indexeintrag</ix>'. Untereinträge werden durch '#' separiert.

Code
index2text (app.activeDocument);  
//delete_index (app.activeDocument);

function index2text (doc)
{
var tops = doc.indexes[0].allTopics;
for (var i = 0; i < tops.length; i++)
for (var j = tops[i].pageReferences.length-1; j > -1; j--)
tops[i].pageReferences[j].sourceText.contents =
'<ix>' + topic_path (tops[i], tops[i].name) + '</ix>';
}

// create topic string. Subtopics are separated by '#'
function topic_path (top, str)
{
if (top.parent.constructor.name == 'Index')
return str;
else
return topic_path (top.parent, top.parent.name + '#' + str)
}

function delete_index (doc)
{
// delete page references and topics
doc.indexes[0].topics.everyItem().pageReferences.everyItem().remove();
doc.indexes[0].topics.everyItem().remove();
}


2. Inline-Graphiken
Im Unterschied zum o.g. Skript erscheinen die Indexeinträge nicht zwischen Tags, sondern werden in einen verankerten Textrahmen, der mit dem Objektstil 'sidebar' (muss vor Ausführung des Skripts angelegt sein) ausgezeichnet wird, eingefügt. Sie laufen damit im Text mit.

Code
index2text (app.activeDocument);  
//delete_index (app.activeDocument);

function index2text (doc)
{
var tops = doc.indexes[0].allTopics;
for (var i = 0; i < tops.length; i++)
for (var j = tops[i].pageReferences.length-1; j > -1; j--)
{
var ip = tops[i].pageReferences[j].sourceText;
var p_ref = topic_path (tops[i], tops[i].name);
side_note (ip, p_ref)
}
}

// create topic string. Subtopics are separated by '#'
function topic_path (top, str)
{
if (top.parent.constructor.name == 'Index')
return str;
else
return topic_path (top.parent, top.parent.name + '#' + str)
}

function delete_index (doc)
{
// delete page references and topics
doc.indexes[0].topics.everyItem().pageReferences.everyItem().remove();
doc.indexes[0].topics.everyItem().remove();
}

function side_note (ins_point, s)
{
var sidebar = ins_point.textFrames.add ();
sidebar.geometricBounds = [0,0,10,70];
sidebar.appliedObjectStyle = app.activeDocument.objectStyles.item ('sidebar');
sidebar.contents = s;
sidebar.fit (FitOptions.frameToContent);
}


Diese beiden Skriptversionen haben mir so gut gefallen, dass ich gleich noch eine kleine Änderung für InDesign CS4 vorgenommen habe. Die Indexeinträge werden hier an Ort und Stelle in bedingten Text ('Index') umgesetzt und können damit ein- und ausgeblendet werden.

Code
// index2conditionalText.jsx 
// Original by Peter Kahrel
// modified by Martin Fischer to take use of InDesign CS4 conditional text
// 04.12.2008

Object.prototype.get = function( )
{
try {
var myObject = this.item( arguments[0].name );
myObject.name;
}
catch (e) {
var myObject = this.add( arguments[0] );
}
return myObject;
}

index2text (app.activeDocument);
//delete_index (app.activeDocument);

function index2text (doc)
{
var myConditionSet = app.activeDocument.conditions.get( {name:'Index', indicatorMethod:ConditionIndicatorMethod.USE_HIGHLIGHT} )
var tops = doc.indexes[0].allTopics;
for (var i = 0; i < tops.length; i++)
for (var j = tops[i].pageReferences.length-1; j > -1; j--)
{
var ip = tops[i].pageReferences[j].sourceText;
var p_ref = topic_path (tops[i], tops[i].name);
conditional_note (ip, p_ref, myConditionSet)
}
myConditionSet.visible = false;
}

// create topic string. Subtopics are separated by '#'
function topic_path (top, str)
{
if (top.parent.constructor.name == 'Index')
return str;
else
return topic_path (top.parent, top.parent.name + '#' + str)
}

function delete_index (doc)
{
// delete page references and topics
doc.indexes[0].topics.everyItem().pageReferences.everyItem().remove();
doc.indexes[0].topics.everyItem().remove();
}

function conditional_note (ins_point, s, c)
{
ins_point.appliedConditions = c;
ins_point.contents = s;
}


Nach Ausführung des Skripts ist der bedingte Text 'Index' ausgeblendet.
Bei Bedarf kann der bedingte Text über die Suche-Ersetze Funktion wieder gelöscht werden (etwa für eine erneute Visualisierung der Indexeinträge nach einer Erweiterung derselben).
...
Martin Fischer
5. Dez 2008, 08:07
AutoFormat in InDesingn CS3
> Mit app.documents[0] läuft das eventScript mit dem event 'afterOpen'.

Aber Achtung:
Ist bereits ein Dokument geöffnet, dann wird mit app.documents[0] das zuletzt aktive (also das, welches vor dem Öffnen des neuen Dokuments aktiv war) adressiert.

Das gerade geöffnete Dokument kann sicherer mit app.documents[-1] adressiert werden. Nur wenige Sekunden später, wenn es angezeigt wird, stimmt diese Behauptung nicht mehr. ;-)
...
Martin Fischer
8. Jul 2008, 17:33
Druckordner erstellen mit InDesign CS
Mit dem Thema habe ich gerade auch rumgespielt, weil ein Kunde in CS3 ein Problem mit einem CS1-Skript hat, das die im Dokument verwendeten Schriften in einen bestimmten Ordner kopieren soll.

Das folgende kleine Skript hat den Vorteil, daß es auch auf dem Mac läuft.
Allerdings ist es wg. dem Preflight, der nicht zu unterdrücken ist, etwas langsam.
Immerhin lassen sich die Übertragung der verknüpften Graphiken, Preflight-Fehlermeldungen und ein Report verhindern.

Das Skript fragt nach einem Zielordner.
In diesen Zielordner wird die aktuelle Datei verpackt - und nimmt die (kopierberechtigten) Schriften in den Unterordner "Fonts" mit.
Im Zielordner wird die kopierte InDesign-Datei gelöscht und der Fonts-Ordner bekommt den Namen der InDesign-Datei + '.fonts'. Dort liegen die im Dokument verwendeten Fonts.
Also bei einer "haeberle.indd' bleibt ein Ordner "haeberle.fonts" übrig.

Code
//fontsPackage.jsx  
//DESCRIPTION: Kopiert die im Dokument verwendeten Schriften in einen auszuwählenden Ordner

var d = app.activeDocument;
var f = Folder.selectDialog( 'Verzeichnis für die Ablage der Schriften', new Folder() );
if ( f == null ) exit();

if (f.toString() == d.filePath)
{
var f = new Folder (f + '/Fonts');
f.create();
}
d.packageForPrint( f, true, false, false, false, true, false, 'Fonts', false );
File( f + '/' + d.name ).remove();
var fName = d.name.replace( /.indd/g, '.fonts' );
var renF = Folder( f + '/Fonts' ).rename( fName );
if (renF == false) // Fonts-Ordner mit Dateinamen bereits vorhanden
{
var r = confirm ( 'Achtung!\rAlten Fonts-Ordner \"' + fName + '\" löschen?');
if (r == false)
exit();
// Löschen der Fonts im alten Fonts-Ordner
var s = Folder( f + '/' + fName).getFiles();
for ( i = s.length-1; i >= 0; i--)
s[i].remove();
// Löschen des alten Fonts-Ordners
Folder( f + '/' + fName).remove();
var renF = Folder( f + '/Fonts' ).rename( fName );
}

Vielleicht kann's die eine oder der andere mal brauchen.
...
Martin Fischer
1. Feb 2008, 21:41
Indesign Farbeinstellungen vorgeben
Das auskommentieren ist absicht gewesen. habs mal hier im Forum auskommentiert - nicht das irgendwas komische passiert.

ich hab jetzt mal dran weitergebastelt aber er aktiviertmir nicht das "TIP Zeitung" - es bleibt immer "Benutzerdefiniert" bei Farbprofil stehen!

Hier das momentane Script:

// Farbmanagement - Einstellungen (c) alex rath

with (app.colorSettings)
{

enableColorManagement = true;
//cmsSettingsPath = "W:\Allgem\Color\Settings";
//cmsSettingsPath = "C:\Dokumente und Einstellungen\tipdvs\anwendungsdaten\Adobe\Color\Settings";
cmsSettings = "TIP Zeitung";
rgbPolicy = ColorSettingsPolicy.convertToWorkingSpace;
cmykPolicy = ColorSettingsPolicy.preserveEmbeddedProfiles;
workingSpaceRGB = "Adobe RGB (1998)";
workingSpaceCMYK = "ISOnewspaper26v4";

alert("Voreinstellungen LAYOUT eingerichtet!");
}


Danke für die hilfe....

alex
...
alex77
15. Jan 2008, 10:03
Scripting Hilfe? - Smartes Ankerpunkt wählen
Hallo Scripter,

Ich bin faul, und darum möcht ich den Ankerpunkt per Tastaturkürzel wählen können. Darum habe ich mir 9 Scripts gemacht die jeweils aus einer dieser Zeilen bestehen.
Die Zeile habe ich mir übrigens aus dem Forum gefischt. (Singelmann sei wiedermal dank - muss mir mal sein Buch kaufen) ;)

Code
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR; 
app.layoutWindows[0].transformReferencePoint = AnchorPoint.RIGHT_CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.BOTTOM_RIGHT_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.BOTTOM_LEFT_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_LEFT_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.LEFT_CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR;


Die 9 Skripte habe ich mir auf 9 Tasten gelegt und nun kann ich bequem den Ankerpunkt ändern.

Nun gibt es aber ein zwar logisches aber unbequemes Verhalten beim Ankerpunkt wechseln. Unzwar wenn der gerade angewählte Gegenstand ein horizontal oder vertikal gespiegelter Gegenstand ist. Wenn er -100% bei der Skalierung hat, oder 180 gedreht ist, oder beides. Dann wählt das Skript den zwar für das Objekt korrekten Anker, aber im Kopf erwartet man beim Tastendruck "Anker oben links" auch "oben links" und will nicht erst umdenken wie das Objekt gespiegelt ist. Smart ist das Skript, das einem das denken erspart. :)

Als Lösung könnte das Script vielleicht kurz die Auswahl aufheben, den Ankerpunkt wechseln und wieder das zuvor gehabte Objekt zurückanwählen?

Als andere Lösung stelle ich mir ein WENN/DANN Weiche vor. Zum beispiel für OBEN-LINKS:

IF (VERT_SKALIERUNG > 0%) dann wähle TOP_LEFT_ANCHOR;
IF (VERT_SKALIERUNG < 0%) dann wähle TOP_RIGHT_ANCHOR;
IF (VERT_SKALIERUNG < 0%) UND (ROTATION = 180) dann wähle BOTTOM_RIGHT

Schlimm kompliziert wird es für mich als Nichtmathematiker, wenn man das Skript perfekt haben will. Denn es müste für Rotationsbereiche und für Skalierungsbereiche anders reagieren - sich bei 45° und 225° rotation anders verhalten.

Mag mir jemand helfen? Das resultierende Script wäre doch sehr praktisch. Gibt's des schon? Ich hab schon gesucht.
...
Stephan_M
23. Jan 2008, 18:56
Re: Didot-Punkt (Seitenzahlen in Literaturverweisen)
Antwort auf: Ach, hier gibts noch Leute die das Didot-System kennen. Ich hatte schon befürchtet ich wär' der Letzte dieser Gattung.


Übrigens:
Seit InDesign CS2 habe ich meinen Didot-Punkt wieder.

/InDesign/Voreinstellungen/Einheiten & Einteilungen/Punkt-/Pica-Größe = 67,553 Punkt/Zoll.


Per Script schalte ich bei Bedarf zwischen dem PostScript-Punkt und dem Didot-Punkt hin und her:
Code
// switchPointsPerInch.jsx 

with ( app.documents[0].viewPreferences )
{
pointsPerInch = (pointsPerInch == 72)
? 67.553
: 72;
alert( pointsPerInch + " Punkte/Zoll" );
}

...
Martin Fischer
17. Aug 2007, 16:04
lebende Kolumnentitel
Hallo Uli,

hier eine auf die Schnelle überarbeitete Version meines quick & dirty-Skripts zur Plazierung des rechten Kolumnentitels.

Voraussetzung
1. auf der/den Musterseite wird ein Textrahmen für die Kolumnentitel eingerichtet (Formatierung);
2. dieser Textrahmen bekommt die Skriptbezeichnung "HeaderR" (bei Bedarf im Skript die Bezeichnung ändern);
3. vor dem Start des Skripts muß sich der Cursor im Textfluß, in dem nach dem Absatzformat für die Quelle gesucht werden soll, befinden (oder ein Textrahmen ausgewählt sein).

Was macht das Skript
1. Das Skript fragt in einem Dialog nach einem Absatzformat für die Quelle (der Inhalt welcher Überschrift soll in den Kolumnentitel übernommen werden?)
2. das Skript sucht im ausgewählten Textfluß Textrahmen für Textrahmen nach dem Absatzformat.
3. es prüft, ob auf der aktuellen seite ein Textrahmen mit der Bezeichnung "HeaderR" gelöst ist.
a. wenn nein (Skript läuft zum ersten mal durch), dann sucht es bei den Musterseitenobjekten nach einem Textrahmen mit der Bezeichnung "HeaderR", löst diesen und ersetzt den Inhalt durch den Inhalt der Überschrift.
b. wenn ja (Skript ist schon einmal durchgelaufen), dann ersetzt es den Inhalt durch den Inhalt der Überschrift.

Bei mir ist das Skript zwei Skripte: eins für den ersten Durchlauf und eins für weitere Durchläufe.
Das vorliegende Skript erledigt beides, ist deswegen aber etwas langsamer. Vielleicht finde ich noch einen Weg, das Ganze zu beschleunigen.

Probiers mal aus:
Code
// HeaderR_mit_Loesen.jsx 
//

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.selection.length > 0) && (app.selection[0].isText()))
{
var myLabel = "HeaderR";
var myDoc = app.documents[0];
var myStory = app.selection[0].parentStory;

// Grundeinrichtung Inhalt rechter Kolumnentitel = 2. Absatz im Textfluß
var myKolText = myStory.paragraphs[1].contents;

var myKolParaName = myDisplayDialog();
var myKolPara = myDoc.paragraphStyles.item(myKolParaName);

for (oneFrame = 0; oneFrame < myStory.textFrames.length; oneFrame++){
for (onePara = 0; onePara < myStory.textFrames[oneFrame].paragraphs.length; onePara++){
if (myStory.textFrames[oneFrame].paragraphs[onePara].appliedParagraphStyle == myKolPara){
var myKolText = myStory.textFrames[oneFrame].paragraphs[onePara].contents;
}
}
var myPage = myStory.textFrames[oneFrame].parent.documentOffset -1
var myHeaderFrameFound = false;
for (oneF = 0; oneF < myDoc.pages[myPage].textFrames.length; oneF ++){
if (myDoc.pages[myPage].textFrames[oneF].label == myLabel){
myDoc.pages[myPage].textFrames[oneF].contents = myKolText;
myHeaderFrameFound = true;
}
}
if (myHeaderFrameFound == false)
{
var myObjects=myDoc.pages[myPage].masterPageItems;
for (oneObj=0; oneObj<myObjects.length; oneObj++)
{
if (myObjects[oneObj].label==myLabel)
{
myFrame = myObjects[oneObj].override(myDoc.pages[myPage]);
myFrame.contents = myKolText
}
}
}
}
alert("Ready!")
}
else
{
alert("Fehler!\rBitte Textrahmen auswählen oder Cursor in Text plazieren.")
}


function myDisplayDialog(){
var myFieldWidth = 80;

myParaStyles = myDoc.paragraphStyles.everyItem().name;
myParaStyles.splice(0,2);

var myDialog = app.dialogs.add({name:"Kolumnentitel"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Quellformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add()){
var mySourceDropdown = dropdowns.add({stringList:myParaStyles, selectedIndex:0});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var theParaStyle =myParaStyles[mySourceDropdown.selectedIndex];
myDialog.destroy();
}
else{
myDialog.destroy();
}
return theParaStyle;
}

...
Martin Fischer
11. Apr 2006, 14:09