[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Querverweis in Text umwandeln

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

Querverweis in Text umwandeln

Martin Fischer
  
Beiträge gesamt: 12783

31. Jan 2012, 17:28
Beitrag # 1 von 11
Bewertung:
(24217 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

wenn auf der Benutzeroberfläche ein Hyperlink gelöscht wird, dann wird dieser in Text umgewandelt. Ein Dialog weist ausdrücklich darauf hin.

Wenn hingegen per Skript ein Querverweis mit dem remove()-Befehl gelöscht wird, bleibt von ihm nichts mehr übrig.

Ferner ist es auf der Benutzeroberfläche möglich, auf einen ausgewählten Querverweis über das Kontextmenü oder über /Schrift/Textvariablen/Variablen in Text konvertieren den entsprechenden Befehl (Variable in Text konvertieren) anzuwenden. Die Quelle des Hyperlinks wird zu einer Art Twitter:
Sie ist nun einerseits Text (wird anders als ein Querverweis bei einer Suche nach den entsprechenden Zeichen per Textsuche oder GREP-Suche gefunden).
Auf der anderen Seite ist sie noch ein bißchen Querverweis. D.h. sie wird in der Querverweispalette noch angezeigt und per Skript kann diese Stelle als Querverweisquelle angesprochen werden.

Wird so ein Querverweis – halb Text, halb Querverweis – aktualisiert, verschwindet seine Text-Eigenschaft wieder; er ist wieder ganz und gar Querverweis.

Wende ich auf einen Querverweis, der mit dem Befehl 'Variable in Text konvertieren' behandelt worden ist, den remove()-Befehl an, dann bleibt richtiger Text übrig.



Ich hätte es gerne etwas einfacher, ohne die Benutzeroberfläche zu bemühen:
Gibt es eine Möglichkeit, einen Querverweis per Skript in Text umzuwandeln?



Mein Kontext:
Bekanntlich ist es nicht ohne Weiteres möglich, innerhalb einer Tabelle, die über mehrere verkettete Textrahmen über mehrere Seiten umbricht, festzustellen, auf welcher Seite sich Text bzw. eine bestimmte Zelle befindet.

Es ist möglich, die Seite über einen Umweg herauszubekommen:
verankere einen Textrahmen innerhalb der Zelle, deren Seitenposition ermittelt werden soll, löse diese Verankerung und ermittle die Seite, auf welcher sich der Textrahmen befindet (siehe auch Seitenzahl für Tabellenzelleninhalt ermitteln ).

Eine weitere Möglichkeit wäre, innerhalb einer Zelle einen Querverweis eines Einfügepunkts auf sich selbst erstellen mit der Seitenzahl <pageNum /> als Querverweisformat. Wenn es nun möglich wäre, diesen Querverweis per Skript in Text umzuwandeln und den konvertierten Text auszuwerten, dann könnte man darüber die entsprechende Seitenzahl ermitteln.

Code
// Vor Ausführung Einfügemarke in Tabellenzelle platzieren! 

var doc = app.documents.firstItem();
var s = app.selection[0].insertionPoints.firstItem();

var cr_name = 'Seite';
var cr_format = doc.crossReferenceFormats.itemByName(cr_name);
if (cr_format == null)
{
cr_format = doc.crossReferenceFormats.add({name:cr_name});
cr_format.buildingBlocks.add({blockType:BuildingBlockTypes.PAGE_NUMBER_BUILDING_BLOCK});
}

var cr_source = doc.crossReferenceSources.add ( {sourceText:s, appliedFormat: cr_format} );
var cr_destination = doc.hyperlinkTextDestinations.add ( {destinationText: s } );
var cr = doc.hyperlinks.add ( cr_source, cr_destination );
//cr.remove();


X

Querverweis in Text umwandeln

Martin Fischer
  
Beiträge gesamt: 12783

31. Jan 2012, 17:57
Beitrag # 2 von 11
Beitrag ID: #488835
Bewertung:
(24148 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Gibt es eine Möglichkeit, einen Querverweis per Skript in Text umzuwandeln?


Nun ist mir doch noch eine Idee gekommen, die zu funktionieren scheint.
Man darf nicht den Hyperlink löschen, sondern muss seine Quelle per remove()-Befehl beseitigen. Dann bleibt Text übrig.

Code
cr_source.remove(); 


Nun braucht man nur noch diesen Text auswerten und danach zu löschen und schon hat man damit die gewünschte Seitenzahl.


als Antwort auf: [#488831]
(Dieser Beitrag wurde von Martin Fischer am 31. Jan 2012, 17:57 geändert)

Querverweis in Text umwandeln

Peter Kahrel
Beiträge gesamt: 182

31. Jan 2012, 22:18
Beitrag # 3 von 11
Beitrag ID: #488844
Bewertung:
(24116 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Gibt es eine Möglichkeit, einen Querverweis per Skript in Text umzuwandeln?


Ja, gibt's, mit diesem Gehirnverdreher:

Code
cr = app.activeDocument.crossReferenceSources; 
for (i = cr.length-1; i > -1; i--)
{
cr[i].sourceText.textVariableInstances[0].convertToText();
cr[i].remove();
}


Peter


als Antwort auf: [#488831]

Querverweis in Text umwandeln

Martin Fischer
  
Beiträge gesamt: 12783

31. Jan 2012, 23:54
Beitrag # 4 von 11
Beitrag ID: #488846
Bewertung:
(24091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Peter,

wunderbar!

Das Ergebnis entspricht dem, was ich auf der Benutzeroberfläche (UI) entdeckt habe (s.o.): ein Querverweis lässt sich in Text konvertieren. Nach der Konvertierung funktioniert er einerseits als Text (läßt sich editieren, formatieren und suchen) und er bleibt andererseits auch Querverweis (lässt sich als solcher aktualisieren und ist danach nicht mehr als Text editierbar). Was ist das für ein seltsames Objekt?

Aber Dein Hinweis hat mich noch auf zwei weitere Lösungen gebracht.
convertToText() gibt ein Text-Objekt zurück, dessen Inhalt (contents) ermittelt werden kann; in dem hier diskutierten Fall also der Name der Seite, auf der sich die Tabellenzelle befindet.

Code
var str = cr_source.sourceText.textVariableInstances[0].convertToText().contents; 


Um dieses Ergebnis zu erhalten, ist es aber gar nicht notwendig, den Querverweis in Text zu konvertieren. Die Property resultText liefert das gewünschte Ergebnis.

Code
var str = cr_source.sourceText.textVariableInstances[0].resultText; 



Danke, Dein Hinweis hat mir sehr geholfen.

(Peter, verstehst Du meine Antwort oder soll ich sie Dir per email in englischer Übersetzung zukommen lassen?)


als Antwort auf: [#488844]
(Dieser Beitrag wurde von Martin Fischer am 31. Jan 2012, 23:55 geändert)

Querverweis in Text umwandeln

Martin Fischer
  
Beiträge gesamt: 12783

1. Feb 2012, 00:02
Beitrag # 5 von 11
Beitrag ID: #488847
Bewertung:
(24084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Der Name der Seite, auf der eine Tabellenzelle liegt, lässt sich also etwa mit folgendem Konstrukt ermitteln.

Code
// Vor Ausführung Einfügemarke in Tabellenzelle platzieren!  

var doc = app.documents.firstItem();
var s = app.selection[0].insertionPoints.firstItem();

var cr_name = 'Seite';
var cr_format = doc.crossReferenceFormats.itemByName(cr_name);
if (cr_format == null)
{
cr_format = doc.crossReferenceFormats.add({name:cr_name});
cr_format.buildingBlocks.add({blockType:BuildingBlockTypes.PAGE_NUMBER_BUILDING_BLOCK});
}

var cr_source = doc.crossReferenceSources.add ( {sourceText:s, appliedFormat: cr_format} );
var cr_destination = doc.hyperlinkTextDestinations.add ( {destinationText: s } );
var cr = doc.hyperlinks.add ( cr_source, cr_destination );

var str = cr_source.sourceText.textVariableInstances[0].resultText;

cr.remove();
cr_source.sourceText.remove();
cr_destination.remove();

alert('Seite: ' + str);



als Antwort auf: [#488846]
(Dieser Beitrag wurde von Martin Fischer am 1. Feb 2012, 00:02 geändert)

Querverweis in Text umwandeln

Peter Kahrel
Beiträge gesamt: 182

1. Feb 2012, 02:17
Beitrag # 6 von 11
Beitrag ID: #488850
Bewertung:
(24056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Alles klar ;)


als Antwort auf: [#488846]

Querverweis in Text umwandeln

mra
Beiträge gesamt: 7

3. Sep 2012, 17:22
Beitrag # 7 von 11
Beitrag ID: #500324
Bewertung:
(23507 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

wir setzen folgendes Skript ein, welches wir aus dem Forum haben, um die Querverweise aufzulösen:

try{
for(var i = 0; i < app.documents.length; i++){
app.activeDocument.stories.everyItem().textVariableInstances.everyItem().convertToText();}
}catch(e){alert("Da ist wohl was schief gelaufen!r" + e);};


D.h. hiermit wird der Text des Ziels bei der Quelle eingesetzt und der Hyperlink entfernt.
Allerdings funktioniert das nur bei gewöhnlichen Textrahmen und nicht innerhalb einer Tabellenzelle.
Wie müsste das Skript aussehen, wenn auch innerhalb der Tabellenzelle der Hyperlink aufgelöst werden soll? Optimalerweise sollte das Skript das gesamte Dokument durchlaufen ohne dass einzelne Rahmen angewählt werden müssen.

Hoffe auf schnelle Hilfe

Im Voraus besten Dank und Grüße
Matthias Rauscher


als Antwort auf: [#488850]

Querverweis in Text umwandeln

-hans-
Beiträge gesamt: 748

3. Sep 2012, 21:46
Beitrag # 8 von 11
Beitrag ID: #500338
Bewertung:
(23466 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Matthias,

sollte doch eigentlich einfach über tables.everyItem gehen

Code
app.activeDocument.stories.everyItem().tables.everyItem().textVariableInstances.everyItem().convertToText(); 


hab's nicht getestet :)


als Antwort auf: [#500324]

Querverweis in Text umwandeln

Uwe Laubender
Beiträge gesamt: 5316

4. Sep 2012, 12:38
Beitrag # 9 von 11
Beitrag ID: #500372
Bewertung:
(23420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Hans-Gerd!
Ich hab's auch nicht getestet, aber fehlen bei Dir im Code nicht noch die gesammelten Zellen aller Tabellen?

Die eigentliche Frage lautet:
schließt die Collection der "Table.textVariableInstances" auch diejenige aller Zellen mit ein? Falls ja und ich gehe mal davon aus, vergiß den Code-Schnipsel hier:

Code
var allStories = app.activeDocument.stories.everyItem(); 
var allTablesOfStories = allStories.tables.everyItem();
var allCellsOfAllTables = allTablesOfStories.cells.everyItem();

allCellsOfAllTables.textVariableInstances.everyItem().convertToText();


ABER: es werden auf jeden Fall Tabellen ausgelassen, die in Tabellen verschachtelt sind!

Hm, da das Elternobjekt von "textVariableInstances" u.a. auch "Footnote" und "Note" sein kann, müssen wahrscheinlich noch mehr Fälle abgegrast werden.


als Antwort auf: [#500338]

Querverweis in Text umwandeln

mra
Beiträge gesamt: 7

7. Sep 2012, 17:38
Beitrag # 10 von 11
Beitrag ID: #500549
Bewertung:
(23357 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,
vielen Dank für die Antworten und sorry, dass ich mich jetzt erst wieder darauf melde. Früher war es leider nicht möglich. Wir haben zwischenzeitlich die Lösung für unser Problem. Die Lösung sieht wie folgt aus:
Code
/* 
InDesign Java Script: Hyperlinks in Text wandeln & loeschen_CS5.jsx
InDesign Version: CS5
Ersteller: Michael Röckle
Copyright 2012: © Kittelberger media solutions GmbH
Erstell-Datum: 04-09-2012

Kurzberschreibung:
- Wandelt alle vorkommenden Hyperlinks in Textabschnitten in Text um.
- Wandelt alle vorkommenden Hyperlinks in Tabellenzellen in Text um. Zu Hyperlinks in Tabellenzellen muss anders navigiert
werden als in Textabschnitten. Deshalb sind zwei Befehlszeilen nötig.
Mit "everyItem()" nach jeder Sammlung in den Befehlszeilen werden immer alle Elemente einer Sammlung bearbeitet.
Der Befehl arbeitet gleich wie 3 verschachtelte Schleifen. Eine Abfrage mit einer Entscheidung If/Else ist so aber nicht möglich.
- Löscht alle Hyperlinks im Dokument mit einer Schleife.


*/
#target InDesign

// Alle Hyperlinkts/CrossReferences in allen Textabschnitten in Text konvertieren
app.activeDocument.stories.everyItem().textVariableInstances.everyItem().convertToText();

// Alle Hyperlinkts/CrossReferences in allen TabellenZellen in Text konvertieren
app.activeDocument.stories.everyItem().tables.everyItem().cells.everyItem().textVariableInstances.everyItem().convertToText();

// Variable von Sammlung "Hyperlinks" erstellen
vsLinks = app.activeDocument.hyperlinks;
//Schleife rückwärts durch die Sammlung zum Löschen der Hyperlinks
for (i = vsLinks.length-1; i > -1; i--)
{
vsLinks[i].remove();
}


Vielleicht kann es ja irgendwann jemand gebrauchen...

Nochmals Danke und Grüße
Matthias Rauscher


als Antwort auf: [#500372]

Querverweis in Text umwandeln

blathy
Beiträge gesamt: 6

17. Okt 2014, 09:47
Beitrag # 11 von 11
Beitrag ID: #533123
Bewertung:
(20440 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

bin auf der Suche nach Skripten, die Querverweise bearbeiten, auf diesen Thread gestoßen.
Ist es denkbar, aus diesen Ansätzen hier und dem weiter oben genannten Thema "Seitenzahl für Tabellenzelleninhalt ermitteln" eine Lösung für meine Frage http://www.hilfdirselbst.ch/...Tabelle_P532963.html zu finden?
Kurzfassung: QV auf Zellen einer doppelseitigen Tabelle haben immer nur die Seitenzahl des Textrahmenmittelpunktes, lässt sich das per Script für die Tabellenzellen korrigieren, auf der anderen Seite liegen?


als Antwort auf: [#500549]
X