[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:
(5626 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:
(5544 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:
(5453 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:
(5237 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: 5319

13. Nov 2018, 20:31
Beitrag # 5 von 6
Beitrag ID: #567560
Bewertung:
(5215 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:
(5159 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

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
14.05.2024

Online
Dienstag, 14. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Prozessoptimierung ist ein Teamsport! Keine Software und keine Maschine allein kann Ihnen helfen, die Effizienzpotenziale Ihres Betriebes maximal auszuschöpfen. Von der Auftragsannahme über die Vorstufe und den Druck bis hin zur Weiterverarbeitung – alles muss optimal ineinandergreifen. Apropos Weiterverarbeitung – in vielen Druckbetrieben fristet sie in Sachen Prozessoptimierung immer noch ein Schattendasein. Dabei liegen hier mittlerweile die größten Einsparpotenziale! In einem Webinar von Horizon und Impressed erfahren Sie, wie Sie diese Einsparungen realisieren können. Horizon, bekannt für innovative Lösungen in der Druckweiterverarbeitung, bietet mit iCE LiNK eine Workflowlösung für die Weiterverarbeitung. iCE LiNK überwacht, visualisiert und analysiert Produktionsabläufe und unterstützt bei der Wartung – damit immer alles reibungslos läuft. Den gleichen Anspruch hat der von Impressed entwickelte Impressed Workflow Server – er ist die smarte PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt. Im Webinar zeigen Ihnen die Experten von Horizon und Impressed, wie beide Lösungen im Team die Effizienz und Produktivität Ihres Betriebes steigern können. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Ja

Organisator: Impressed / Horizon

https://www.impressed.de/schulung.php?c=sDetail&sid=327

Einsparpotenziale in der Weiterverarbeitung
Veranstaltungen
16.05.2024

Online
Donnerstag, 16. Mai 2024, 10.00 - 10.30 Uhr

Webinar

Komplizierte, kleinteilige Aufträge; alles sehr speziell; seit Jahren bewährte Prozesse – da können wir nichts standardisieren und automatisieren! Das sagen viele Großformatdrucker – aber stimmt das wirklich, ist dem tatsächlich so? Günther Business Solutions und Impressed treten in einem Webinar den Gegenbeweis an. Experten beider Unternehmen zeigen, wie Großformatdrucker vom Einsatz zweier bewährter Lösungen profitieren können: • von advanter print+sign von Günther Business Solutions, dem ERP-System für den Großformatdruck, dass alle Phasen der Wertschöpfung im Large Format Printing abdeckt • von Impressed Workflow Server, der smarten PDF-Workflow-Lösung für Druckereien, die Datenmanagement, Preflight und Produktionssteuerung übernimmt Über die Kombination beider Lösungen können Großformatdrucker ihre Prozesse mit modernen Workflows Schritt für Schritt automatisieren – und so zügig deutliche Zeit- und Kosteneinsparungen realisieren. Das Webinar sollten Sie sich nicht entgehen lassen – damit Sie keine Effizienzpotenziale mehr liegen lassen. Melden Sie sich am besten gleich an, wir freuen uns auf Sie! PS: Melden Sie sich in jedem Fall an – sollten Sie zum Termin verhindert sein, erhalten Sie die Aufzeichnung.

kostenlos

Nein

Organisator: Impressed / Günther Business Solutions

https://www.impressed.de/schulung.php?c=sDetail&sid=326

Und es geht doch: Automatisierung im Großformatdruck!