Connect failed: Connection timed out

[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Ausgewählte Absatzabweichungen entfernen

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

Ausgewählte Absatzabweichungen entfernen

Peter Sauseng
Beiträge gesamt: 483

14. Mär 2023, 15:33
Beitrag # 1 von 3
Bewertung:
(3849 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen!

Nach dem Platzieren eines Word-Textes kommt es immer wieder vor, dass einige Formatierungen und Einstellungen abweichend vom Absatzformat sind.

Das kann absichtlich sein (fett, kursiv, besonderer Einzug, Abstand u.dgl.) oder nicht erwünscht.
Mit dem unten eingefügten Skript soll ausgewählt werden können, welche Abweichungen zu entfernen sind, also auf die Einstellung des jeweiligen Absatzformates zurückgesetzt werden.

Code
// Absatz-Abweichungen entfernen.jsx 

if (app.documents.length == 0) {
alert("Kein Dokument geöffnet");
exit();
}

main();

function main() {

var myDoc = app.documents[0];
var _wholeDoc = 0;

// Etwas ausgewählt?
if (app.selection.length > 0) {
switch (app.selection[0].constructor.name) { // Abfrage, was ausgewählt ist
case "Text":
case "Character":
case "Word":
case "Line":
case "TextColumn":
case "Paragraph":
case "TextStyleRange":
case "InsertionPoint":
break;
default:
// Es ist etwas ausgewählt, aber kein Textobjekt, daher wird das gesamte Dokument berücksichtigt
_wholeDoc = 1;
}
} else {
// Nichts ausgewählt, gesamtes Dokument wird berücksichtigt.
_wholeDoc = 1;
}

var theOptions = (myDisplayDialog(_wholeDoc)); //in _wholeDoc wird übergeben, ob das gesamte Dokument berücksichtigt werden muss (=1)
var myMasterPageSelection = theOptions[16]; // (true/false)
var myStorySelection = theOptions[15];
//alert(myStorySelection, "myStorySelection");

switch (myStorySelection) {
case 0: // gesamtes Dokument wird berücksichtigt
var myObject = myDoc.stories;
break;
case 1: // aktueller Textfluss wird berücksichtigt
var myObject = [app.selection[0].parentStory];
break;
default:
var myObject = app.selection;
//alert(myObject, "myObject");
}
for (i = 0; i < myObject.length; i++) {
if (myObject[i].paragraphs[0].parentTextFrames[0].parent.constructor.name == 'Spread') {
RemoveOverrides(myObject[i].paragraphs, myObject[i].footnotes, myObject[i].tables, theOptions);
}
// wenn der erste Absatz des Textflusses in einem Rahmen auf der Musterseite steht und die Option 14 (MasterPageSelection) aktiviert ist,
// wird die Funktion ausgeführt
if (myObject[i].paragraphs[0].parentTextFrames[0].parent.constructor.name == 'MasterSpread' && myMasterPageSelection == true) {
RemoveOverrides(myObject[i].paragraphs, myObject[i].footnotes, myObject[i].tables, theOptions);
}
}
alert("Abweichungen lt. Eingaben im Dialogfeld entfernt!", "Fertig!");
}

function RemoveOverrides(myParagraphs, myFootnotes, myTables, theOptions) {

//alert(myParagraphs + ", " + myFootnotes + ", " + myTables, "RemoveOverrides:");
alert(myParagraphs.length + " Absätze, " + myFootnotes.length + " Fußnoten und " + myTables.length + " Tabellen berücksichtigt!", "Anzahl der Objekte:");

var myHyphenation = theOptions[0]; // (true/false)
var myLanguage = theOptions[1]; // (true/false)
var myFontfamily = theOptions[2]; // (true/false)
var myFontstyle = theOptions[3]; // (true/false)
var myPointsize = theOptions[4]; // (true/false)
var myLeading = theOptions[5]; // (true/false)
var myTracking = theOptions[6]; // (true/false)
var myJustification = theOptions[7]; // (true/false)
var myColor = theOptions[8]; // (true/false)
var myIndents = theOptions[9]; // (true/false)
var mySpace = theOptions[10]; // (true/false)
var myKeeplines = theOptions[11]; // (true/false)
var myTablist = theOptions[12]; // (true/false)
var myDirection = theOptions[13]; // (true/false)
var myKinsoku = theOptions[14]; // (true/false)
var myStorySelection = theOptions[15]; // (0=Dokument, 1=Textfluss, 2=Auswahl)

// Alle Absätze im jeweiligen Textfluss durchgehen und Einstellungen je nach Auswahl im Dialogfeld zurücksetzen
for (j = 0; j < myParagraphs.length; j++) {
if (myHyphenation == true) { // Silbentrennung
RemoveHyphenation(myParagraphs[j]);
}
if (myLanguage == true) { // Sprache
RemoveLanguage(myParagraphs[j]);
}
if (myFontfamily == true) { // Font, Achtung: Schriftschnitt wird auch zurückgesetzt
RemoveFontfamily(myParagraphs[j]);
}
if (myFontstyle == true) { // Schriftschnitt
RemoveFontstyle(myParagraphs[j]);
}
if (myPointsize == true) { // Schriftgröße
RemovePointsize(myParagraphs[j]);
}
if (myLeading == true) { // Zeilenabstand
RemoveLeading(myParagraphs[j]);
}
if (myTracking == true) { // Laufweite
RemoveTracking(myParagraphs[j]);
}
if (myJustification == true) { // Ausrichtung
RemoveJustification(myParagraphs[j]);
}
if (myColor == true) { // Schriftfarbe
RemoveColor(myParagraphs[j]);
}
if (myIndents == true) { // Einzüge
RemoveIndents(myParagraphs[j]);
}
if (mySpace == true) { // Abstände
RemoveSpace(myParagraphs[j]);
}
if (myKeeplines == true) { // Absatzkontrolle
RemoveKeeplines(myParagraphs[j]);
}
if (myTablist == true) { // Tabulatoren
RemoveTablist(myParagraphs[j]);
}
if (myDirection == true) { // Links-Rechts-Ausrichtung
RemoveDirection(myParagraphs[j]);
}
if (myKinsoku == true) { // Kinsoku-Einstellung
RemoveKinsoku(myParagraphs[j]);
}
}
// Alle Fußnoten im jeweiligen Textfluss durchgehen und in allen Absätzen der Fußnoten Einstellungen je nach Auswahl im Dialogfeld zurücksetzen
for (j = 0; j < myFootnotes.length; j++) {
for (k = 0; k < myFootnotes[j].paragraphs.length; k++) {
if (myHyphenation == true) { // Silbentrennung
RemoveHyphenation(myFootnotes[j].paragraphs[k]);
}
if (myLanguage == true) { // Sprache
RemoveLanguage(myFootnotes[j].paragraphs[k]);
}
if (myFontfamily == true) { // Font, Achtung: Schriftschnitt wird auch zurückgesetzt
RemoveFontfamily(myFootnotes[j].paragraphs[k]);
}
if (myFontstyle == true) { // Schriftschnitt
RemoveFontstyle(myFootnotes[j].paragraphs[k]);
}
if (myPointsize == true) { // Schriftgröße
RemovePointsize(myFootnotes[j].paragraphs[k]);
}
if (myLeading == true) { // Zeilenabstand
RemoveLeading(myFootnotes[j].paragraphs[k]);
}
if (myTracking == true) { // Laufweite
RemoveTracking(myFootnotes[j].paragraphs[k]);
}
if (myJustification == true) { // Ausrichtung
RemoveJustification(myFootnotes[j].paragraphs[k]);
}
if (myColor == true) { // Schriftfarbe
RemoveColor(myFootnotes[j].paragraphs[k]);
}
if (myIndents == true) { // Einzüge
RemoveIndents(myFootnotes[j].paragraphs[k]);
}
if (mySpace == true) { // Abstände
RemoveSpace(myFootnotes[j].paragraphs[k]);
}
if (myKeeplines == true) { // Absatzkontrolle
RemoveKeeplines(myFootnotes[j].paragraphs[k]);
}
if (myTablist == true) { // Tabulatoren
RemoveTablist(myFootnotes[j].paragraphs[k]);
}
if (myDirection == true) { // Links-Rechts-Ausrichtung
RemoveDirection(myFootnotes[j].paragraphs[k]);
}
if (myKinsoku == true) { // Kinsoku-Einstellung
RemoveKinsoku(myFootnotes[j].paragraphs[k]);
}
}
}

// Alle Tabellen im jeweiligen Textfluss durchgehen und in allen Absätzen in allen Zellen der Tabellen Einstellungen je nach Auswahl im Dialogfeld zurücksetzen
for (j = 0; j < myTables.length; j++) {
for (k = 0; k < myTables[j].cells.length; k++) {
for (l = 0; l < myTables[j].cells[k].paragraphs.length; l++) {
if (myHyphenation == true) { // Silbentrennung
RemoveHyphenation(myTables[j].cells[k].paragraphs[l]);
}
if (myLanguage == true) { // Sprache
RemoveLanguage(myTables[j].cells[k].paragraphs[l]);
}
if (myFontfamily == true) { // Font, Achtung: Schriftschnitt wird auch zurückgesetzt
RemoveFontfamily(myTables[j].cells[k].paragraphs[l]);
}
if (myFontstyle == true) { // Schriftschnitt
RemoveFontstyle(myTables[j].cells[k].paragraphs[l]);
}
if (myPointsize == true) { // Schriftgröße
RemovePointsize(myTables[j].cells[k].paragraphs[l]);
}
if (myLeading == true) { // Zeilenabstand
RemoveLeading(myTables[j].cells[k].paragraphs[l]);
}
if (myTracking == true) { // Laufweite
RemoveTracking(myTables[j].cells[k].paragraphs[l]);
}
if (myJustification == true) { // Ausrichtung
RemoveJustification(myTables[j].cells[k].paragraphs[l]);
}
if (myColor == true) { // Schriftfarbe
RemoveColor(myTables[j].cells[k].paragraphs[l]);
}
if (myIndents == true) { // Einzüge
RemoveIndents(myTables[j].cells[k].paragraphs[l]);
}
if (mySpace == true) { // Abstände
RemoveSpace(myTables[j].cells[k].paragraphs[l]);
}
if (myKeeplines == true) { // Absatzkontrolle
RemoveKeeplines(myTables[j].cells[k].paragraphs[l]);
}
if (myTablist == true) { // Tabulatoren
RemoveTablist(myTables[j].cells[k].paragraphs[l]);
}
if (myDirection == true) { // Links-Rechts-Ausrichtung
RemoveDirection(myTables[j].cells[k].paragraphs[l]);
}
if (myKinsoku == true) { // Kinsoku-Einstellung
RemoveKinsoku(myTables[j].cells[k].paragraphs[l]);
}
}
}
}
}

function RemoveHyphenation(myObject) {
myObject.hyphenation = myObject.appliedParagraphStyle.hyphenation;
myObject.hyphenWeight = myObject.appliedParagraphStyle.hyphenWeight;
myObject.hyphenateAcrossColumns = myObject.appliedParagraphStyle.hyphenateAcrossColumns;
myObject.hyphenateAfterFirst = myObject.appliedParagraphStyle.hyphenateAfterFirst;
myObject.hyphenateBeforeLast = myObject.appliedParagraphStyle.hyphenateBeforeLast;
myObject.hyphenateCapitalizedWords = myObject.appliedParagraphStyle.hyphenateCapitalizedWords;
myObject.hyphenateLadderLimit = myObject.appliedParagraphStyle.hyphenateLadderLimit;
myObject.hyphenateLastWord = myObject.appliedParagraphStyle.hyphenateLastWord;
myObject.hyphenateWordsLongerThan = myObject.appliedParagraphStyle.hyphenateWordsLongerThan;
myObject.hyphenationZone = myObject.appliedParagraphStyle.hyphenationZone;
myObject.providerHyphenationStyle = myObject.appliedParagraphStyle.providerHyphenationStyle;
}

function RemoveLanguage(myObject) {
myObject.appliedLanguage = myObject.appliedParagraphStyle.appliedLanguage;
}

function RemoveFontfamily(myObject) {
myObject.appliedFont = myObject.appliedParagraphStyle.appliedFont;
}

function RemoveFontstyle(myObject) {
myObject.fontStyle = myObject.appliedParagraphStyle.fontStyle;
}

function RemovePointsize(myObject) {
myObject.pointSize = myObject.appliedParagraphStyle.pointSize;
}

function RemoveLeading(myObject) {
myObject.leading = myObject.appliedParagraphStyle.leading;
myObject.autoLeading = myObject.appliedParagraphStyle.autoLeading;
}

function RemoveTracking(myObject) {
myObject.tracking = myObject.appliedParagraphStyle.tracking;
}

function RemoveJustification(myObject) {
myObject.justification = myObject.appliedParagraphStyle.justification;
}

function RemoveColor(myObject) {
myObject.fillColor = myObject.appliedParagraphStyle.fillColor;
myObject.fillTint = myObject.appliedParagraphStyle.fillTint;
}

function RemoveIndents(myObject) {
myObject.firstLineIndent = myObject.appliedParagraphStyle.firstLineIndent;
myObject.lastLineIndent = myObject.appliedParagraphStyle.lastLineIndent;
myObject.leftIndent = myObject.appliedParagraphStyle.leftIndent;
myObject.rightIndent = myObject.appliedParagraphStyle.rightIndent;
}

function RemoveSpace(myObject) {
myObject.spaceAfter = myObject.appliedParagraphStyle.spaceAfter;
myObject.spaceBefore = myObject.appliedParagraphStyle.spaceBefore;
myObject.sameParaStyleSpacing = myObject.appliedParagraphStyle.sameParaStyleSpacing;
}

function RemoveKeeplines(myObject) {
myObject.keepAllLinesTogether = myObject.appliedParagraphStyle.keepAllLinesTogether;
myObject.keepFirstLines = myObject.appliedParagraphStyle.keepFirstLines;
myObject.keepLastLines = myObject.appliedParagraphStyle.keepLastLines;
myObject.keepLinesTogether = myObject.appliedParagraphStyle.keepLinesTogether;
myObject.keepWithNext = myObject.appliedParagraphStyle.keepWithNext;
myObject.keepWithPrevious = myObject.appliedParagraphStyle.keepWithPrevious;
}

function RemoveTablist(myObject) {
myObject.tabList = myObject.appliedParagraphStyle.tabList;
}

function RemoveDirection(myObject) {
myObject.characterDirection = myObject.appliedParagraphStyle.characterDirection;
}

function RemoveKinsoku(myObject) {
myObject.kinsokuSet = myObject.appliedParagraphStyle.kinsokuSet;
}

function myDisplayDialog(_wholeDoc) {
var myDialog = app.dialogs.add({
name: "Absatz-Abweichungen entfernen"
});
with (myDialog.dialogColumns.add()) {
with (dialogRows.add()) {
staticTexts.add({
staticLabel: "Welche Attribute sollen berücksichtigt werden?"
});
}
with (dialogRows.add()) {
staticTexts.add({
staticLabel: "ACHTUNG: Möglicherweise bestehen manche Abweichungen absichtlich, z.B. Schriftschnitt, Schriftgröße, Schriftfarbe, Laufweite, Einzüge!"
});
}
with (dialogRows.add()) {
staticTexts.add({
staticLabel: "ACHTUNG: Zeichenformate werden ignoriert! Betroffene Zeichen werden trotzdem auf Absatzstandard zurückgesetzt!"
});
}
with (dialogRows.add()) {
with (borderPanels.add()) {
with (dialogColumns.add()) {
var myHyphenationCheckbox = checkboxControls.add({
staticLabel: "Silbentrennung",
checkedState: true
});
var myLanguageCheckbox = checkboxControls.add({
staticLabel: "Sprache",
checkedState: true
});
var myFontfamilyCheckbox = checkboxControls.add({
staticLabel: "Schriftart*"
});
var myFontstyleCheckbox = checkboxControls.add({
staticLabel: "Schriftschnitt"
});
}
with (dialogColumns.add()) {
var myPointsizeCheckbox = checkboxControls.add({
staticLabel: "Schriftgröße"
});
var myLeadingCheckbox = checkboxControls.add({
staticLabel: "Zeilenabstand"
});
var myTrackingCheckbox = checkboxControls.add({
staticLabel: "Laufweite"
});
var myJustificationCheckbox = checkboxControls.add({
staticLabel: "Ausrichtung"
});
}
with (dialogColumns.add()) {
var myColorCheckbox = checkboxControls.add({
staticLabel: "Schriftfarbe"
});
var myIndentsCheckbox = checkboxControls.add({
staticLabel: "Einzüge"
});
var mySpaceCheckbox = checkboxControls.add({
staticLabel: "Abstand oben/unten"
});
var myKeeplinesCheckbox = checkboxControls.add({
staticLabel: "Umbruchoptionen",
checkedState: true
});

}
with (dialogColumns.add()) {
var myTablistCheckbox = checkboxControls.add({
staticLabel: "Tabulatoren"
});
var myDirectionCheckbox = checkboxControls.add({
staticLabel: "Links-Rechts-Ausrichtung",
checkedState: true
});
var myKinsokuCheckbox = checkboxControls.add({
staticLabel: "Kinsoku",
checkedState: true
});
}
}
}
with (dialogRows.add()) {
staticTexts.add({
staticLabel: "* ACHTUNG: Auch der Schriftschnitt wird zurückgesetzt, wenn das Kontrollfeld aktiviert wird."
});
}
with (dialogRows.add()) {
staticTexts.add({
staticLabel: ""
});
}
with (dialogRows.add()) {
staticTexts.add({
staticLabel: "In welchem Bereich sollen die Abweichungen entfernt werden?"
});
}
with (dialogRows.add()) {
with (borderPanels.add()) {
var myStoryButtons = radiobuttonGroups.add();
with (myStoryButtons) {
radiobuttonControls.add({
staticLabel: "Im gesamten Dokument",
checkedState: true
});
if (_wholeDoc == 0) {
radiobuttonControls.add({
staticLabel: "Im (gesamten) ausgewählten Textfluss",
checkedState: true
});
radiobuttonControls.add({
staticLabel: "Im ausgewählten Absatz"
});
}
}
}
}
with (dialogRows.add()) {
staticTexts.add({
staticLabel: ""
});
with (dialogRows.add()) {
var myMasterPageCheckbox = checkboxControls.add({
staticLabel: "Musterseitenelemente einbeziehen?",
checkedState: false
});
}
}
}
var myResult = myDialog.show();
if (myResult == true) {
var myHyphenation = myHyphenationCheckbox.checkedState;
var myLanguage = myLanguageCheckbox.checkedState;
var myFontfamily = myFontfamilyCheckbox.checkedState;
var myFontstyle = myFontstyleCheckbox.checkedState;
var myPointsize = myPointsizeCheckbox.checkedState;
var myLeading = myLeadingCheckbox.checkedState;
var myTracking = myTrackingCheckbox.checkedState;
var myJustification = myJustificationCheckbox.checkedState;
var myColor = myColorCheckbox.checkedState;
var myIndents = myIndentsCheckbox.checkedState;
var mySpace = mySpaceCheckbox.checkedState;
var myKeeplines = myKeeplinesCheckbox.checkedState;
var myTablist = myTablistCheckbox.checkedState;
var myDirection = myDirectionCheckbox.checkedState;
var myKinsoku = myKinsokuCheckbox.checkedState;
var myStorySelection = myStoryButtons.selectedButton;
var myMasterPageSelection = myMasterPageCheckbox.checkedState;
myDialog.destroy();

} else {
myDialog.destroy();
alert("Skript abgebrochen!");
exit();
}
return [myHyphenation, myLanguage, myFontfamily, myFontstyle, myPointsize, myLeading, myTracking, myJustification, myColor, myIndents, mySpace, myKeeplines, myTablist, myDirection, myKinsoku, myStorySelection, myMasterPageSelection];
}


Grundsätzlich funktioniert das Skript sehr gut. Bei längeren Dokumenten dauert die Bearbeitungszeit aber sehr lange.
Hat jemand einen Tipp, wie man das Skript beschleunigen könnte?

Gruß, Peter
X

Ausgewählte Absatzabweichungen entfernen

Dirk Becker
Beiträge gesamt: 193

22. Mär 2023, 13:06
Beitrag # 2 von 3
Beitrag ID: #585788
Bewertung:
(3498 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ob es schneller läuft weiss ich nicht:

Nach jedem Absatzformat suchen (wie im Suchen-Ersetzen Dialog) und die zu ändernden Werte gemeinsam ersetzen.

Je nach Struktur des Dokuments: die TextStyleRanges durchlaufen. Das kann schneller sein wenn viele Paragraphs in einem Durchgang getroffen werden, oder auch langsamer (wenn viele einzelne Änderung viele TSRs verursachen).

Oder, den kompletten Text ändern, etwa wenn alle CJK Eigenschaften etc. letztendlich unabhängig vom Absatzformat auf den gleichen Wert gesetzt werden sollen.

Man kann bei Text wie bei anderen Objekten mehrere Eigenschaften gleichzeitig setzen:
myParaProps = {
keepAllLinesTogether: …,
keepFirstLines: …
}
myText.properties = myParaProps;

Dieses Objekt muss man auch nicht unbedingt für jedes Absatzformat immer wieder aufbauen.

Man kann Absätze zusammenfassen - wenn die das selbe Format haben:
myText = selRange.paragraphs.itemByRange(1,3);
myText.properties = myParaProps;

Evtl. schluckt itemByRange auch die von-bis Objekte, muss man probieren.


Am Script irritiert mich etwas, dass auch viele Zeichenattribute gesetzt werden. Wenn auch kollidierende Zeichenformate verwendet sind, werden dadurch gerade erst Abweichungen erzeugt.


als Antwort auf: [#585717]

Ausgewählte Absatzabweichungen entfernen

Peter Sauseng
Beiträge gesamt: 483

22. Mär 2023, 14:13
Beitrag # 3 von 3
Beitrag ID: #585789
Bewertung:
(3455 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk!

Vielen Dank für die Hinweise!

Ich könnte mir gut vorstellen, dass das gemeinsame Ersetzen nach der Suche nach jedem Absatzformat um einiges schneller ist.
Bei der Suche nach dem jeweiligen Absatzformat müsste man auch gar nicht unterschieden zwischen Fließtext, Text in Tabellen oder Text in Fußnoten.

Den kompletten Text zu ändern, könnte für manche Eigenschaften auch sinnvoll sein.

Auch das Setzen mehrerer Eigenschaften gleichzeitig mit Hilfe der Properties wird etwas bringen.

Ich werde jedenfalls ausprobieren, was die verschiedenen Tipps bringen.

Stimmt, Zeichenformate werden bei diesem Skript nicht berücksichtigt. Bei den Projekten, für welche das Skript geschrieben wurde, werden die Daten selten bis nie mit Zeichenformaten geliefert. Deshalb ist das hier kein Thema.

Gruß, Peter


als Antwort auf: [#585788]