[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Texte einer bestimmten Ebene als .txt exportieren

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

Texte einer bestimmten Ebene als .txt exportieren

Echsenauge
Beiträge gesamt: 4

31. Okt 2018, 17:44
Beitrag # 1 von 6
Bewertung:
(5596 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Abend!

Ich bastle gerade mehr schlecht als recht an einem Skript, bei dem der Nutzer per Dropdown eine der im Dokument vorhandenen Sprachebenen auswählen kann.
Daraufhin sollen alle Texte dieser gewählten Ebene gesammelt in einer Textdatei gespeichert werden.

Ich habe es hinbekommen, dass die Ebenen aus dem Dokument in die Dropdownliste übernommen werden, sodass man die Ebene auswählen kann.

Beim Export der Texte dieser gewählten Ebene (z.B. "de") scheitere ich allerdings bislang und finde einfach nichts, das mir weiterhilft.
Denn weiterhin werden alle Texte sämtlicher Ebenen exportiert.

Irgendwie bekomme ich den logischen Bogen nicht geschlagen - könnt ihr mir bitte weiterhelfen?

Liebe Grüße und einen schönen Abend

Echsenauge
X

Texte einer bestimmten Ebene als .txt exportieren

Gerald Singelmann
  
Beiträge gesamt: 6269

1. Nov 2018, 08:09
Beitrag # 2 von 6
Beitrag ID: #567283
Bewertung:
(5514 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Wie sieht denn das Script bisher aus?


als Antwort auf: [#567279]

Texte einer bestimmten Ebene als .txt exportieren

Echsenauge
Beiträge gesamt: 4

2. Nov 2018, 15:42
Beitrag # 3 von 6
Beitrag ID: #567327
Bewertung:
(5423 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

so, jetzt komme ich endlich wieder an den Computer.

Ich muss vorher noch dazu sagen, dass ich das folgende Skript auch nur versucht habe zu modifizieren, da meine Kenntnisse in dem Bereich noch recht spärlich und sozusagen zusammengestückelt sind.
Daher sind zB auch noch die Kommentare zweisprachig etc.

So sieht das Skript bisher aus:

Code
  
// Vorsichtshalber die Dialoge einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
// Testen, ob mind. 1 Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument geöffnet");
exit();
}
if (app.documents.length != 0) {
if (app.documents.item(0).stories.length != 0) {
myGetFileName(app.documents.item(0).name);
}
}
// Funktion zum Speichern der Datei
function myGetFileName(_DocumentName) {
var _FilePath = File.saveDialog ("Exportierten Text in einer Datei speichern");
if (_FilePath != null) {
myDisplayDialog(_DocumentName, _FilePath);
}
}

// Funktion für das Dialogfenster zur Auswahl der Parameter
function myDisplayDialog(_DocumentName, _FilePath) {
// Auswahl des Exportformats, der Trennlinie und der Ebene
var _ExportFormats = ["Text", "RTF"];
var _Dialog = app.dialogs.add({name:"Sämtliche Texte exportieren", canCancel:true});
with (_Dialog) {

// Erster Dialogbereich
with (dialogColumns.add()) {
with(borderPanels.add()){
staticTexts.add({staticLabel:"Ausgabeformat:"});
var _ExportFormatDropdown = dropdowns.add({stringList:_ExportFormats, selectedIndex:0});
}

// Zweiter Dialogbereich
with(borderPanels.add()){
with (dialogColumns.add()) {
var _AddSeparatorCheckbox = checkboxControls.add({staticLabel:"Trennlinie zwischen Textabschnitten hinzufügen", checkedState:true});
with(dialogRows.add()){
with (dialogColumns.add()) {
var _AddFileOpen = checkboxControls.add({staticLabel:"Sammeldatei nach Export öffnen?", checkedState:true});
}
}
}
}

// Dritter Dialogbereich
var doc = app.activeDocument; // get the current active doc
var _LayerNames = [];
// loop the layer array
for (var i = 0; i < doc.layers.length; i++) {
_LayerNames.push(doc.layers[i].name);// get the name
}
//var _LayerNames = app.activeDocument.layers.everyItem().name;
with(borderPanels.add()){
staticTexts.add({staticLabel:"Gewünschte Ebene:"});
var _ExportLayerDropdowns = dropdowns.add({stringList:_LayerNames});
}
}

var _Result = _Dialog.show();
if (_Result == true) {
var _ExportFormat = _ExportFormats[_ExportFormatDropdown.selectedIndex];
var _AddSeparator = _AddSeparatorCheckbox.checkedState;
var _ExportLayer = _ExportLayerDropdowns.selectedIndex;
_Dialog.destroy();
_ExportAllText(_DocumentName, _FilePath, _ExportFormat, _AddSeparator, _ExportLayer);
}
else {
_Dialog.destroy();
}
}
}
function _ExportAllText (_DocumentName, _FilePath, _ExportFormat, _AddSeparator, _ExportLayer) {
var _Story;
var _TempFolder = Folder.temp;
var _TempFile = File(_TempFolder + "/tempTextFile.txt");
var _NewDocument = app.documents.add();
var _Document = app.documents.item(_DocumentName);
var _TextFrame = _NewDocument.pages.item(0).textFrames.add({geometricBounds:myGetBounds(_NewDocument, _NewDocument.pages.item(0))});
var _NewStory = _TextFrame.parentStory;
for (myCounter = 0; myCounter < _Document.stories.length; myCounter++) {
_Story = _Document.stories.item(myCounter);
//Export the stories as tagged text
_Story.exportFile(ExportFormat.taggedText, _TempFile);
//Import (place) the file at the end of the temporary story
_NewStory.insertionPoints.item(-1).place(_TempFile);
//If the imported text did not end with a return, enter a return to keep the stories from running together
if (myCounter != _Document.stories.length -1) {
if (_NewStory.characters.item(-1).contents != "\r") {
_NewStory.insertionPoints.item(-1).contents = "\r";
}
if (_AddSeparator == true) {
_NewStory.insertionPoints.item(-1).contents = "----------------------------------------\r";
}

}
}

switch (_ExportFormat) {
case "Text":
myFormat = ExportFormat.textType;
myExtension = ".txt"
break;
case "RTF":
myFormat = ExportFormat.RTF;
myExtension = ".rtf"
break;
}

_NewStory.exportFile(myFormat, File(_FilePath));
_NewDocument.close(SaveOptions.no);
_TempFile.remove();
}


function myGetBounds(_Document, myPage) {
var _PageWidth = _Document.documentPreferences.pageWidth;
var _PageHeight = _Document.documentPreferences.pageHeight;
if (myPage.side == PageSideOptions.leftHand) {
var _X2 = myPage.marginPreferences.left;
var _X1 = myPage.marginPreferences.right;
}
else {
var _X1 = myPage.marginPreferences.left;
var _X2 = myPage.marginPreferences.right;
}
var _Y1 = myPage.marginPreferences.top;
var _X2 = _PageWidth - _X2;
var _Y2 = _PageHeight - myPage.marginPreferences.bottom;
return [_Y1, _X1, _Y2, _X2];
}



Wahrscheinlich bekommt ihr graue Haare bei dem Anblick...^^;
Danke euch im Voraus für eure Hilfe!

Liebe Grüße
Echsenauge


als Antwort auf: [#567283]

Texte einer bestimmten Ebene als .txt exportieren

Echsenauge
Beiträge gesamt: 4

13. Nov 2018, 17:43
Beitrag # 4 von 6
Beitrag ID: #567558
Bewertung:
(5207 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hat keiner einen Rat für mich?
Ich komme einfach nicht weiter; ich bekomme nicht heraus wie ich die gewählte Ebene und die Texte, die darauf liegen, als eine Textdatei exportiert bekomme.

Habe ich mir für den Anfang gleich etwas unlösbares/enorm schwieriges ausgesucht?

Mittlerweile würde es mir auch schon reichen, wenn die Texte einer festgelegten Ebene (z.B. "de", ohne dass die anderen wählbar sind) exportiert werden könnten.
Aber irgendwie ist der Knoten noch nicht aufgegangen.


Liebe Grüße


als Antwort auf: [#567327]

Texte einer bestimmten Ebene als .txt exportieren

Uwe Laubender
Beiträge gesamt: 5314

13. Nov 2018, 20:31
Beitrag # 5 von 6
Beitrag ID: #567560
Bewertung:
(5185 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Echsenauge,

Du kommst an alle Texte eines Dokuments über dessen stories (Textabschnitte).
Stories können textFrames und textPaths enthalten. Plus Übersatztext im Falle des Falles. textFrames und textPaths werden zusammengefasst als array in der Eigenschaft textContainers. Eine Eigenschaft des Objekts story.

Die einzelnen Einträge im textContainers-Array prüfst Du nach der Eigenschaft itemLayer, das ist die Ebene auf der diese liegen. Nicht alle Textrahmen einer Story müssen auf der gleichen Ebene liegen. Und Du prüfst natürlich, ob überhaupt Inhalt vorliegt. Ein Textrahmen kann ja auch leer sein.

Als Start dieser Code-Schnipsel:

Code
( function() 
{
var layerName = "Ebene 1";

// No document, no script run:
if( app.documents.length == 0 ){ return };
// No stories, no text, no script run:
if( app.documents[0].stories.length == 0 ){ return };

var doc = app.documents[0];

// Target layer definition:
var targetLayer = doc.layers.itemByName( layerName );
if( !targetLayer.isValid ){ return };

// Result array for all formatted texts:
var textsArray = [];

// All stories of the document:
var storiesArray = doc.stories.everyItem().getElements();
var storiesArrayLength = storiesArray.length;

// Loop all stories of the document:
for( var n=0; n<storiesArrayLength; n++ )
{
// A story consists of text containers that can reside on any layer:
var textContainers = storiesArray[n].textContainers ;
var textContainersLength = textContainers.length;

// Check every item of a text container if it is on the target layer:
for( var t=0;t<textContainersLength; t++ )
{
// We will not collect anything from an empty text container:
if( textContainers[t].contents == "" ){ continue };

// Collect all formatted text of a text container in our textsArray.
// This will not look for overset text!!
if( textContainers[t].itemLayer == targetLayer )
{
textsArray[ textsArray.length++ ] = textContainers[t].texts[0] ;

//Or collect all not formatted contents:
//textsArray[ textsArray.length++ ] = textContainers[t].texts[0].contents ;
};
};
};

// Array written to the JavaScript Console of the ESTK:

$.writeln( textsArray );

// Formatted text will result like that: [object Text],[object Text],[object Text],…
// Contents will result this way: blablabla,blabla,blablabla,…

// Now loop the textsArray and do something with it. E.g. duplicate formatted text to a new InDesign document.

}() )


Da kann noch viel optimiert oder ergänzt werden. Übersatztext ist nicht bedacht. Auch keine Sortierung nach beispielsweise Seiten oder geometrischer Zuordnung innerhalb einer Seite. Oder Trennung Musterseite, Dokumentseite.

Du sprichst als Ergebnis von einer Textdatei. Also unformatierter Text. Keine verankerten Objekte wie Abbildungen im Text. Keine Tabellen.
Also wirst Du doch textContainers[t].texts[0].contents sammeln. Überdenke das noch einmal!


als Antwort auf: [#567558]

Texte einer bestimmten Ebene als .txt exportieren

Echsenauge
Beiträge gesamt: 4

14. Nov 2018, 09:42
Beitrag # 6 von 6
Beitrag ID: #567567
Bewertung:
(5129 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

vielen dank für deine umfangreiche Hilfestellung, das schau ich mir gleich mal an!

Textdatei und unformatierter Text ist schon richtig - ich brauche nur die reinen Textinhalte aus den (vielen, vielen) InDesign-Dateien und von einer bestimmten Ebene, damit mit diesen Texten woanders weiter gearbeitet werden kann.

Liebe Grüße
Echsenauge


als Antwort auf: [#567560]
X