hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Querverweis in Text umwandeln

 



Martin Fischer  M  p
Beiträge: 9698

31. Jan 2012, 17:28

Beitrag #1 von 6
Bewertung:

(465 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Querverweis in Text umwandeln


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();




Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch
Top

Martin Fischer  M  p
Beiträge: 9698

31. Jan 2012, 17:57

Beitrag #2 von 6
Beitrag ID: #488835

Bewertung:

(446 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Querverweis in Text umwandeln


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#488831]

(Dieser Beitrag wurde von Martin Fischer am 31. Jan 2012, 17:57 geändert)
Top

Peter Kahrel p
Beiträge: 147

31. Jan 2012, 22:18

Beitrag #3 von 6
Beitrag ID: #488844

Bewertung:

(414 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Querverweis in Text umwandeln


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] Top

Martin Fischer  M  p
Beiträge: 9698

31. Jan 2012, 23:54

Beitrag #4 von 6
Beitrag ID: #488846

Bewertung:

(389 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Querverweis in Text umwandeln


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?)


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#488844]

(Dieser Beitrag wurde von Martin Fischer am 31. Jan 2012, 23:55 geändert)
Top

Martin Fischer  M  p
Beiträge: 9698

1. Feb 2012, 00:02

Beitrag #5 von 6
Beitrag ID: #488847

Bewertung:

(382 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Querverweis in Text umwandeln


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);



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#488846]

(Dieser Beitrag wurde von Martin Fischer am 1. Feb 2012, 00:02 geändert)
Top

Peter Kahrel p
Beiträge: 147

1. Feb 2012, 02:17

Beitrag #6 von 6
Beitrag ID: #488850

Bewertung:

(354 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Querverweis in Text umwandeln


Alles klar ;)

als Antwort auf: [#488846] Top


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Querverweis in Text umwandeln


^