[GastForen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Forenindex -- Lesezeichen

15 Lesezeichen für skript

Tabellenbreite proportional skalieren
Das Script habe ich grade für eine (eigentlich unsympatische) Anfrage im englischen Forum erstellt.
War eh halb fertig ;)
Ich, nicht das Script.
Das war dreiviertelfertig.
Jetzt ist es ganz fertig.

Also dachte ich, hier hat vielleicht auch einer Freude daran:
Es rechnet die Breite einer Tabelle aus (ohne Konturen am Rand) und zeigt diese in einem Dialog an, so dass ich eine neue Breite eingeben kann. Alle Spalten werden dann proportional verbreitert oder -schmälert, um die neue Breite zu erreichen.

Code
tell application "Adobe InDesign CS3" 
set ms to selection
set aTable to parent of item 1 of ms
if class of aTable ? table then
set aTable to parent of aTable
if class of aTable ? table then
display dialog "no table selected"
return
end if
end if

set nC to count columns in aTable
set tWidth to 0.0
repeat with n from 1 to nC
set aWidth to (width of (column n of aTable))
set tWidth to tWidth + aWidth
end repeat

set myDialog to make dialog with properties {name:"Set Width of Table"}
tell myDialog
make dialog column
tell the result
set tNuWidth to make measurement editbox with properties {edit value:(tWidth * 2.83465), edit units:millimeters}
end tell
end tell
set nu to show myDialog
if nu is true then
set nuWidth to (edit value of tNuWidth) * 0.35278
set scaleClm to nuWidth / tWidth
repeat with n from 1 to nC
set aWidth to (width of (column n of aTable))
set width of column n of aTable to (scaleClm * aWidth)
end repeat
else
destroy myDialog
return
end if
end tell

...
Gerald Singelmann
11. Sep 2007, 19:13
Neues Fußnotenproblem CS5
Beim Synchronisieren der Einstellungen der Linie bei 'fortgesetzten Fußnoten' mit der Linie über der 'ersten Fußnote in der Spalte' hilft das Skript continuingRule_Sync.jsx.


Ein ganzes Set mit Einstellungen zu den Fußnotenoptionen lässt sich mit dem Skript footnoteOptionsSet.jsx einrichten.
...
Martin Fischer
9. Mär 2011, 09:24
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
for-Schleife einmal ohne, einmal mit geschweiften Klammern
Hallo, miteinander!
Kai und ich rätseln schon ein paar Tage. Weshalb funktioniert das folgende Script. Es soll abfragen, ob im Dokument die Farbe "Test" bereits vorkommt. Falls NEIN, die Farbe anlegen, falls JA, nichts weiter tun. Daß dieses (erfolgreich auszuführende) Script zustande kam, beruht übrigens auf einem Schreibfehler. Wir hatten schlicht und ergreifend die geschweiften Klammern zu setzen vergessen ;-)
Code
for (var n=0; n< app.activeDocument.swatches.length; n++) 
if(app.activeDocument.swatches[n].name == "Test"){
exit ();
}
else (app.activeDocument.swatches[n].name != "Test")
{app.activeDocument.colors.add({name:"Test", model:ColorModel.PROCESS, colorValue:[0, 100, 100, 0]});
};


Im folgenden Script hingegen wird ein Fehler geworfen: "Dieser Farbfeldname wird bereits verwendet. Wählen Sie einen anderen Namen." Logisch (jedenfalls denke ich mir das so), da das Script mehrmals versucht eine Farbe mit gleichem Farbfeldnamen anzulegen.
Code
//JS soll prüfen, ob ein Farbname im Dokument enthalten ist. 
//Falls JA, nichts weiter tun
//Falls NEIN eine Farbe mit dem geprüften Namen anlegen:

//DIES FUNKTIONIERT NICHT, DA DAS SCRIPT VERSUCHT DIE FARBE "Test" MEHRMALS ANZULEGEN.

for (var n=0; n< app.activeDocument.swatches.length; n++){
if(app.activeDocument.swatches[n].name == "Test"){
exit ();
}
else (app.activeDocument.swatches[n].name != "Test")
{app.activeDocument.colors.add({name:"Test", model:ColorModel.PROCESS, colorValue:[0, 100, 100, 0]})
};
};

Aber weshalb funktioniert die obere Version des Scripts ohne die geschweiften Klammern um die Anweisungen der for-Schleife herum?
...
Uwe Laubender
23. Sep 2009, 21:18
[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
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
automatischer Textfluss
Hier die CS3-Version des obigen Skripts 'AppendPagesIfStoryOverflows.jsx':

Code
//AppendPagesIfStoryOverflows_CS3.jsx  
//
// thanks to Dave Saunders for the functions isText() and DumbRunPages()
// http://jsid.blogspot.com/2005/10/standard-methods-and-functions.html

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.documents.length> 0) && (app.selection.length > 0) && (app.selection[0].isText())) {
var aStory = app.selection[0].parentStory;
var aDoc = app.documents[0];

DumbRunPages(aDoc, aStory)
}
else {
alert("Fehler\rBitte Text auswählen.")
}

function DumbRunPages(theDoc, theStory) {
// What makes this "dumb" is that default master pages are used.
var uRuler = theDoc.viewPreferences.rulerOrigin;
theDoc.viewPreferences.rulerOrigin = RulerOrigin.spreadOrigin;
while (theStory.textContainers[theStory.textContainers.length-1].overflows) {
//Seite nach der letzten Textrahmenseite einfügen
var backPage = aDoc.pages.add(LocationOptions.after, aStory.textContainers[theStory.textContainers.length-1].parent)

app.activeWindow.activePage = backPage;
backPage.appliedMaster = theDoc.pages[-2].appliedMaster;
var myPbounds = backPage.bounds;
var myNewTF = backPage.textFrames.add();
if ( (!theDoc.documentPreferences.facingPages) || (backPage.side == PageSideOptions.rightHand) ) {
myNewTF.geometricBounds =
[myPbounds[0] + backPage.marginPreferences.top,
myPbounds[1] + backPage.marginPreferences.left,
myPbounds[2] - backPage.marginPreferences.bottom,
myPbounds[3] - backPage.marginPreferences.right];
} else {
myNewTF.geometricBounds =
[myPbounds[0] + backPage.marginPreferences.top,
myPbounds[1] + backPage.marginPreferences.right,
myPbounds[2] - backPage.marginPreferences.bottom,
myPbounds[3] - backPage.marginPreferences.left];
}
myNewTF.itemLayer = theStory.textContainers[theStory.textContainers.length-1].itemLayer;
myNewTF.previousTextFrame = theStory.textContainers[theStory.textContainers.length-1];
myNewTF.textFramePreferences.textColumnCount = backPage.marginPreferences.columnCount;
myNewTF.textFramePreferences.textColumnGutter = backPage.marginPreferences.columnGutter;
if (myNewTF.characters.length == 0){
theDoc.viewPreferences.rulerOrigin = uRuler;
alert("Permanently overset"); // This indicates a permanent overset condition so break out of loop
}
}
theDoc.viewPreferences.rulerOrigin = uRuler;
}

...
Martin Fischer
22. Jan 2008, 05:38
Objekt als EPS exportieren
Antwort auf: Kann ich es erreichen, dass das exportierte EPS, den alten Namen
behält und am alten Speicherort das alte EPS überschreibt?
Oder mit dem alten Namen auf den Desktop speichert


Was ist "der alte Namen"?

Immer noch schmutzig (copy & paste), aber bereits mit etwas mehr Komfort:
Code
// exportSelection2EPS.jsx  

if ((app.documents.length == 0) || (app.selection.length == 0))
exit();

var mySel = app.selection;
var myPage = getPage(mySel[0]);
var myPageDigit = makeDigits(myPage.name,3) + "";
var myDocName = app.activeDocument.name;

if (app.activeDocument.saved == true) {
try {
Folder(app.activeDocument.filePath + "/eps").create()
}
catch (e){}
var myFilePath = app.activeDocument.filePath + "/eps"
}
else {
var myFilePath = "~/Desktop";
}

for (k = 0; k < mySel.length; k++)
epsExport( mySel[k], k);

function epsExport(o, c)
{
o.select( SelectionOptions.replaceWith );
oGB = o.visibleBounds;
app.copy();
newDoc = app.documents.add() ;
for (s = 0; s < newDoc.masterSpreads.length; s++)
for (p = 0; p < newDoc.masterSpreads[s].pages.length; p++)
with (newDoc.masterSpreads[s].pages[p].marginPreferences)
{
left = right = top = bottom = 0;
}

with (newDoc.pages[0].marginPreferences)
{
left = right = top = bottom = 0;
}
pH = oGB[2] - oGB[0];
pW = oGB[3] - oGB[1];
try {
with ( newDoc.documentPreferences)
{
pagesPerDocument = 1;
pageHeight = pH;
pageWidth = pW;
}
}
catch (e)
{
alert ( 'Unzulässige Seitengröße:\r' + pW + ' x ' + pH);
}
app.paste();
newDoc.pages[0].pageItems[0].move([0, 0]);
app.epsExportPreferences.pageRange = newDoc.pages[0].name;
var myFileName = myDocName + '_' + myPageDigit + '_' + c + '.eps';
var myFile = File(myFilePath + "/" + myFileName);
newDoc.pages[0].pageItems[0].exportFile(ExportFormat.epsType, myFile);
newDoc.close(SaveOptions.no);
}

function getPage(myObject) {
if (!myObject) {
alert("Overflow!")
exit();
}
if ((myObject.constructor.name == "Page") || (myObject.constructor.name == "Spread"))
return myObject

if ((myObject.constructor.name == "Character")
|| (myObject.constructor.name == "InsertionPoint")
|| (myObject.constructor.name == "Word")
|| (myObject.constructor.name == "Line")
|| (myObject.constructor.name == "TextRange"))
{
if ((app.version +"").substr(0,1) == "4") return getPage(myObject.parentTextFrames[0])
else if ((app.version +"").substr(0,1) == "3") return getPage(myObject.parentTextFrame)
}
return getPage(myObject.parent)
}

function makeDigits(theName, theDigits) {
var theFills = theDigits - (theName + "").length;
for (oneDigit = 0; oneDigit < theFills; oneDigit++) {
theName = "0" + theName;
}
return theName;
}


Antwort auf: Gibt es online eine Liste mit einfachen (für Anfänger) Script Codes?

Gerald Singelmann hat Quellen zum Skripten-Lernen zusammengestellt: http://indesign-faq.de/...scripting-lernen-wo/
...
Martin Fischer
21. Jan 2008, 08:39
Alle offenen Dateien speichern... Skript?
Hallo Gerald,

Um alle offenen Dokumente mit "sichern unter" zu sichern und dabei durch Löschen der History ihre Dateigröße zu verringern, verwende ich folgendes Skript. Wink

Code
// saveOpenDocs.jsx 
//DESCRIPTION: Sichert alle geöffneten Dokumente und reduziert ihre Dateigröße

var myDocs = app.documents;
var unsavedDocs = 0;
for (oneDoc = 0; oneDoc < myDocs.length; oneDoc++)
(myDocs[oneDoc].saved == true)
? myDocs[oneDoc].save(myDocs[oneDoc].fullName)
: unsavedDocs++;

if (unsavedDocs > 0)
alert (unsavedDocs + " Dokument(e) nicht gesichert!")


Es sichert nur die Dokumente, die bereits einmal gesichert worden sind (also ihre pysikalische Heimat auf dem Datenträger gefunden haben).
...
Martin Fischer
11. Jan 2008, 15:50
Zeichen interaktiv finden
Hi all,

mal wieder etwas aus Onkel Geralds großem Gruselkabinett... Ich gehe gerade einen Text durch, in dem der Autor nach dem Doppelpunkt immer klein weitergeschrieben hat.

Per grep kann ich das nicht beheben, da ich beim Ersetzten in InDesign keinen case-modifier habe (Die Diskussion hatten wir kürzlich. Da fiel mir kein Beispiel ein, dies ist eins).

Ich könnte nach einem Doppelpunkt suchen, aber dann ist ja der Doppelpunkt markiert und nicht das Zeichen, das ich eigentlich ändern will.

Also gibt es dieses Script, das sich leicht an andere Bedürfnisse anpassen lassen sollte:
Code
set findThese to {":"} 
tell application "Adobe InDesign CS3"
set allSel to selection
try
set aSel to item 1 of allSel
on error
return
end try
if class of aSel is character or class of aSel is insertion point then
set aStory to parent story of aSel
set n to index of aSel
set myC to ""
repeat
set n to n + 1
set myC to contents of character n of aStory
try
if myC is in findThese then exit repeat
end try
--select character n of aStory
--my showCharacter
end repeat
if contents of character (n + 1) of aStory is " " then
select character (n + 2) of aStory
else
select character (n + 1) of aStory
end if
my showCharacter()
end if
end tell

on showCharacter()
tell application "Adobe InDesign CS3"
set aSel to a reference to item 1 of selection
set aFrame to item 1 of parent text frames of aSel
if class of parent of aFrame is text then
set aFrame to first item of parent text frames of parent of aFrame
end if
repeat until class of aFrame is page or class of aFrame is document
set aFrame to parent of aFrame
end repeat
if class of aFrame is page then
set active page of layout window 1 to aFrame
set zoom percentage of layout window 1 to 200
end if
end tell
end showCharacter


Und jetzt die Frage: Wenn ich diese Zeile
Code
			try 
if myC is in findThese then exit repeat
end try

nicht in einem try-Block einfasse, bricht das Script bei jeder verankerten Grafik mit "can't turn '?' into string" ab. Klar, der content ist ja auch kein ?, sondern ein Rahmen, aber wie bekomme ich raus (wenn ichs nicht weiß), ob das wirklich ein ? ist oder ein Rahmen? Bug in der Scripting Schnittstelle?

Schönes Wochenende wünscht

Onkel Gerald :)...
Gerald Singelmann
18. Sep 2007, 20:28
Tabellenbreite proportional skalieren
Hallo Gerald,

aus aktuellem Anlaß (weil ich's grad selbst so brauche), habe ich in Deinem Skript eine kleine Modifikation gemacht:

Wenn die Tabelle in einem Textrahmen platziert ist, wird im Dialogfeld die Breite des Textrahmens als Ziel für die Gesamtbreite der Tabelle vorgeschlagen.

Andernfalls (z.B. wenn die Tabelle in einer Tabellenzelle platziert ist) wird weiterhin, wie in Deinem Skript, die aktuelle Tabellenbreite eingeblendet.

Code
bGoOn = true; 
aTable = app.selection[0];
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
alert("Es muss ein Text in einer Zelle markiert sein");
bGoOn = false;
}
}
}
if (bGoOn) {
nc = aTable.columns.length;
tWidth = 0.0;
for (n=0; n < nc; n++) {
tWidth += aTable.columns[n].width;
}
// die Tabelle befindet sich in einem Textrahmen
if (aTable.parent.constructor.name == "TextFrame") {
tfBounds = aTable.parent.geometricBounds;
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = Breite des Textrahmens
myValue = tfBounds[3] - tfBounds[1];
}
else {
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = aktuelle Tabellenbreite
myValue = tWidth;
}
var myDialog = app.dialogs.add({name:"Tabellenbreite"});
with(myDialog.dialogColumns.add()){
var nuWidthField = measurementEditboxes.add({editValue:(2.83465 * myValue), editUnits:MeasurementUnits.millimeters, smallNudge:0.5});
}

var myResult = myDialog.show();
if(myResult == true){
var nuWidth = nuWidthField.editValue * 0.35278;
myDialog.destroy();
scaleClm = nuWidth / tWidth;
for (n=0; n < nc; n++) {
aTable.columns[n].width = scaleClm * aTable.columns[n].width;
}
}
else{
myDialog.destroy();
}
}

...
Martin Fischer
17. Sep 2007, 09:25
JSFindschange vereinfachen
Quarz,

fillColor ist schon richtig.
Aber Du bist einem Bug auf die Schliche gekommen.

Die Farbe, nach der Du im Dokument suchst, muß - für das Script - auch auf Programmebene vorhanden sein (also da, wo kein Dokument geöffnet ist).

Wenn sie auch dort vorhanden ist, kannst Du sie im Dokument suchen - wahrscheinlich auch mit JSFindChange.

Diesem Bug sind wir vor ca. 2 Wochen im InDesign Scripting-Forum auf die Schliche gekommen (Dave Saunders hat den workaround gefunden).
...
Martin Fischer
9. Aug 2007, 17:37
||| Scripte unter ID CS3
Hallo,

ich habe mir die deutsche DemoVersion von ID CS3 auf meinen Rechner installiert.

Die Scripte von ID CS2 laufen auch unter ID CS3.
Dazu muß nur, nach Information von Gerald, ein neuer Ordner angelegt werden:

\Dokumente und Einstellungen\Name\Anwendungsdaten\Adobe\InDesign\Version 5.0\Scripts\Scripts Panel\
Version 4.0 Scripts

und dorthin dann die alten Scripte kopieren.

Leider stürzt mir ID CS3 bei Änderung und Hinzufügen nach ca. 30 Tastaturkürzeln ab.
Ich hoffe, dass das später bei der regulären Version nicht mehr passiert.

Gruß
Quarz
...
Quarz
15. Mai 2007, 14:15
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

Aktuell

Diverses

| 14.02.2020

die-einstellungen_300

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
07.02.2020 - 11.09.2020

Digicomp Academy AG, 8005 Zürich
Freitag, 07. Feb. 2020, 13.00 Uhr - Freitag, 11. Sept. 2020, 12.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte. Mit dem Abschluss «Publisher Professional – Profil «Multimedia» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/publishing-lehrgaenge/lehrgang-publisher-professional-profil-multimedia

Veranstaltungen
22.02.2020 - 04.07.2020

Lehrgang zielgerichtet auf die Zertifizierung zum Publisher Basic

Schulungsraum PubliCollege, Kronenhalde 9d, 3400 Burgdorf
Samstag, 22. Feb. 2020, 13.14 Uhr - Samstag, 04. Juli 2020, 13.15 Uhr

Projektseminar/Lehrgang

Ziele In der Medienproduktion unter Einbezug der aktuellen Publishing-Programme mitarbeiten. Voraussetzungen Sie möchten gestalterisch tätig sein und eigene grafische Ideen kompetent entwickeln sowie umsetzen; Medienproduktionen professionell planen und ausführen. Kompetenzen Nach Abschluss dieses Lehrgangs können Sie Printpublikationen aller Art von der Gestaltung über die Umsetzung bis zu druckfertige PDFs erstellen. Sie sind fähig, CI/CD-Vorgaben umzusetzen. Sie lernen die Grundlagen der grafischen Gestaltung kennen und setzen diese mit Adobe Photoshop, InDesign und Illustrator effizient um.

15 Halbtage, jeweils am Samstag von 08.30 bis 14 Uhr im Kursraum des PubliCollege, 3400 Burgdorf


Daten
Samstag, 22.2., 29.2., 14.3., 21.3., 28.3., 4.4., 25.4., 2.5., 9.5., 16.5., 6.6., 13.6., 20.6., 27.6., 4.7. 2020
Reservedatum am 23.5. 2020

Ja

Organisator: PubliCollege GmbH, 3400 Burgdorf

Kontaktinformation: Beat Kipfer, E-Mailinfo AT publicollege DOT ch

https://www.publicollege.ch/kursangebote/20-publisher-basic

Neuste Foreneinträge


"Temporäre Aktivierung abgelaufen"

Script gesucht um Seiten als JPG zu exportieren und Dateinamen aus EXIF Information des Bildes

PDF: QR-Code mit Bild ersetzen

Acrobat Pro Textfarbe Javascript ändert sich erst nach Klick ins Formularfeld

Umstellung von Mac auf Windows verhindern

CMS-Linkliste

Schatten auf untere Textebenen nach 3D-Drehung

aufgerasteter Text bei Print on Demand

«Stile erstellen»

Schriftart in mehreren (auch nicht verwendeten) Absatzformaten ändern
medienjobs