[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Querverweise aus Hyperlinks

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

Querverweise aus Hyperlinks

GWE
Beiträge gesamt: 31

27. Jul 2011, 17:15
Beitrag # 1 von 10
Bewertung:
(4256 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag zusammen,

wir haben bisher das Script updatecrossrefs.js von Teus de Jong dafür verwendet um aus Hyperlinks Querverweise für Inhaltsverzeichnisse und Indexe zu erstellen.
Dies hat bisher (bis InDesign CS4) auch immer wunderbar funktioniert.
Nur leider funktioniert das Script seit CS5 nicht mehr.
Da wir im scripten kaum bis keine Erfahrung haben kommen wir nun nicht mehr weiter.
Aber vllt. sieht von euch ja jemand woran es liegt.

Im folgenden das Script ..

Code
// Updatecrossrefs.js 
// Updates cross references made with hyperlinks
// the hyperlink destination is where the reference refers to
// the hyperlink sourcetext is the text that will be updated (like see xx)
// If a book is open, the book will be handled,
// if no book is open, the active document will be handled.
// Made by Teus de Jong, last version April 10, 2006

if (app.books.length == 0){
if (app.documents.length == 0){
errorExit('No documents are open');
} else {
nrofdocs = 1;
}
} else {
nrofdocs = app.books[0].bookContents.length;
for (i = nrofdocs - 1; i > -1; i--) {
app.open(File(app.books[0].bookContents[i].fullName));
}
}
doc = app.activeDocument;
for (d = 1; d <= nrofdocs; d++){
for (i = 0; i < doc.hyperlinks.length; i++){
hyper = doc.hyperlinks[i];
// leave ID's own internal markers alone
if (hyper.name.substring(0, 1) == '.'){continue}
// leave hyperlinks to URLs alone
try {
if (hyper.destination.constructor.name == 'HyperlinkURLDestination'){continue}
} catch (e) {
hyper.showSource();
errorExit('Selected hyperlink has undefined destination');
}
if (hyper.destination.constructor.name == 'HyperlinkTextDestination'){
s = getParentPageName(hyper.destination.destinationText);
} else {
// try/catch added to allow for hyperlinks that have lost their destination -- Dave
try {
s = hyper.destination.destinationPage.name;
} catch (e) { continue }
}
if (s != ''){
// Check to see if update needed; saves a lot of time when processing large books -- Dave
if (hyper.source.sourceText.contents != s) {
hyper.source.sourceText.contents = s;
}
}
}
if (d >= nrofdocs){
break;
}
doc = app.open(app.books[0].bookContents[d].fullName);
}

function getParentPageName(txt){
try {
var myFrame = getParentTextFrame(txt);
var pag = myFrame.parent;
while (pag.constructor.name != 'Page'){
// in case the reference is in an inline, the parent of the frame is a character
if (pag.constructor.name == 'Character'){
pag = getParentTextFrame(pag);
}
// in case the chain goes sour, back out
if (pag.constructor.name == 'Application'){
throw 'Error';
}
pag = pag.parent;
}
s = pag.name;
}
catch (e) {
alert('Could not catch page.\nCheck destination names and existence.');
s = '';
}
return(s);
}

function getParentTextFrame(x){
if(app.version == 3){
return(x.parentTextFrame);
}
else {
return(x.parentTextFrames[0]);
}
}

function errorExit(s){
alert(s);
exit();
}


Wenn wir das Script über ein Dokument mit Hyperlinks laufen lassen.
Steigt es immer mit dem Alert
"Could not catch page.
Check destination names and existence."
aus.

Für Hilfe wären wir euch wirklich dankbar.

Grüße GWE

(Dieser Beitrag wurde von Martin Fischer am 28. Jul 2011, 09:27 geändert)
X

Querverweise aus Hyperlinks

Martin Fischer
  
Beiträge gesamt: 12783

27. Jul 2011, 17:58
Beitrag # 2 von 10
Beitrag ID: #476983
Bewertung:
(4236 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gwe,

die Ermittlung der Seite hat sich in CS5 geändert.
Deswegen kommt das Skript mit der entsprechenden Funktion nicht mehr klar.

Mangels einem entsprechenden Dokument, auf das ich das Skript loslassen kann, tappe ich jetzt etwas im Dunkeln und versuche einen Blindflug.

In der modifizierten Version unten habe ich die ursprüngliche Funktion zur Ermittlung der Seite (des Seitennamens) durch eine an CS5 angepasste Funktion findPage() von Dave Saunders ersetzt. Ich bin mir nicht sicher, ob die 100% funktioniert, aber ich finde gerade nicht meine eigene optimierte Version. Es ist möglich, dass die Funktion Probleme bereitet, wenn eine Fundstelle auf dem Montagetisch liegt oder in tief verschachtelten Textrahmen.

Teste es mal an einer Kopie eines entsprechenden Dokuments mit Hyperlinks aus.
Wenn's nicht funktioniert, könntest Du mir ein Testdokument zukommen lassen (email-Adresse im Profil).

Code
// Updatecrossrefs-CS5a.jsx  

if (app.books.length == 0){
if (app.documents.length == 0){
errorExit('No documents are open');
} else {
nrofdocs = 1;
}
} else {
nrofdocs = app.books[0].bookContents.length;
for (i = nrofdocs - 1; i > -1; i--) {
app.open(File(app.books[0].bookContents[i].fullName));
}
}
doc = app.activeDocument;
for (d = 1; d <= nrofdocs; d++){
for (i = 0; i < doc.hyperlinks.length; i++){
hyper = doc.hyperlinks[i];
// leave ID's own internal markers alone
if (hyper.name.substring(0, 1) == '.'){continue}
// leave hyperlinks to URLs alone
try {
if (hyper.destination.constructor.name == 'HyperlinkURLDestination'){continue}
} catch (e) {
hyper.showSource();
errorExit('Selected hyperlink has undefined destination');
}
if (hyper.destination.constructor.name == 'HyperlinkTextDestination'){
s = getParentPageName(hyper.destination.destinationText);
} else {
// try/catch added to allow for hyperlinks that have lost their destination -- Dave
try {
s = hyper.destination.destinationPage.name;
} catch (e) { continue }
}
if (s != ''){
// Check to see if update needed; saves a lot of time when processing large books -- Dave
if (hyper.source.sourceText.contents != s) {
hyper.source.sourceText.contents = s;
}
}
}
if (d >= nrofdocs){
break;
}
doc = app.open(app.books[0].bookContents[d].fullName);
}

// function developed by Dave Saunders - as findPage() -
// http://forums.adobe.com/message/2791413#2791413
// extended by Gregor (grefel = Gregor Fellenz?)
// http://forums.adobe.com/message/3003131#3003131
// and lightly adapted to this script by Martin Fischer
function getParentPageName(theObj) {
if (theObj.hasOwnProperty("baseline")) {
theObj = theObj.parentTextFrames[0];
}
while (theObj != null) {
if (theObj.hasOwnProperty ("parentPage")) return theObj.parentPage.name;
var whatIsIt = theObj.constructor;
switch (whatIsIt) {
case Page : return theObj.name;
case Character : theObj = theObj.parentTextFrames[0]; break;
case Footnote :; // drop through
case Cell : theObj = theObj.insertionPoints[0].parentTextFrames[0]; break;
case Note : theObj = theObj.storyOffset.parentTextFrames[0]; break;
case XMLElement : if (theObj.insertionPoints[0] != null) { theObj = theObj.insertionPoints[0].parentTextFrames[0]; break; }
case Application : return null;
default: theObj = theObj.parent;
}
if (theObj == null) return null;
}
return theObj
} // end findPage


//~ function getParentPageName(txt){
//~ try {
//~ var myFrame = getParentTextFrame(txt);
//~ var pag = myFrame.parent;
//~ while (pag.constructor.name != 'Page'){
//~ // in case the reference is in an inline, the parent of the frame is a character
//~ if (pag.constructor.name == 'Character'){
//~ pag = getParentTextFrame(pag);
//~ }
//~ // in case the chain goes sour, back out
//~ if (pag.constructor.name == 'Application'){
//~ throw 'Error';
//~ }
//~ pag = pag.parent;
//~ }
//~ s = pag.name;
//~ }
//~ catch (e) {
//~ alert('Could not catch page.\nCheck destination names and existence.');
//~ s = '';
//~ }
//~ return(s);
//~ }

function getParentTextFrame(x){
if(app.version == 3){
return(x.parentTextFrame);
}
else {
return(x.parentTextFrames[0]);
}
}

function errorExit(s){
alert(s);
exit();
}




-----
edit:

Wie ich sehe, hat auch Gregor (grefel – ich vermute, es handelt sich um Gregor Fellenz) an Dave's Skript herumgedoktert und eine Kleinigkeit ergänzt (Umgang mit einem XMLElement).
Die entsprechende Änderung von Daves Skript durch Gregor ist oben nun eingearbeitet.


als Antwort auf: [#476977]
(Dieser Beitrag wurde von Martin Fischer am 27. Jul 2011, 18:18 geändert)

Querverweise aus Hyperlinks

GWE
Beiträge gesamt: 31

27. Jul 2011, 19:03
Beitrag # 3 von 10
Beitrag ID: #476989
Bewertung:
(4210 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Fischer,

erstmal Danke für die super schnelle Antwort und den Lösungsansatz.

Das überarbeitete Script läuft nun auch in CS5!

Selbst Hyperlink-Anchors in verankerten Rahmen funktionieren einwandfrei.
Nur Rahmen ausserhalb der Seite erzwingen noch einen Abbruch des Scripts.


Danke & Grüße
GWE


als Antwort auf: [#476983]

Querverweise aus Hyperlinks

Martin Fischer
  
Beiträge gesamt: 12783

27. Jul 2011, 19:31
Beitrag # 4 von 10
Beitrag ID: #476991
Bewertung:
(4200 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr W.

das hört sich gut an.

Antwort auf: Nur Rahmen ausserhalb der Seite erzwingen noch einen Abbruch des Scripts.


Das hatte ich halb befürchtet.
Und um dieses Problem noch auszumerzen ist mir die Musterdatei, die Sie mir haben zukommen lassen eine große Hilfe.

Allerdings muss noch geklärt werden, was bei Zielen, die auf der Montagefläche liegen, passieren soll?
a. Ignorieren und weitermachen?
b. Anstelle der Seitenzahl einen bestimmten Code angeben?
c. Oder die Zahl der am nächsten liegenden Seite eintragen?

Von Letzterem würde ich im Moment aus verschiedenen Gründen gerne Abstand nehmen. Ich halte es auch nicht für sinnvoll, eine Seitenzahl einzutragen, wo das Objekt auf keiner wirklichen Seite liegt.


als Antwort auf: [#476989]

Querverweise aus Hyperlinks

Martin Fischer
  
Beiträge gesamt: 12783

28. Jul 2011, 09:32
Beitrag # 5 von 10
Beitrag ID: #477014
Bewertung:
(4142 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nach der Anpassung des Skripts für CS5 kam mir die Idee, statt per Skript die Querverweisfunktion mittels Hyperlinks zu simulieren, die Hyperlinks in echte, dynamische Querverweise zu konvertieren.

Die Idee hat was für sich, doch die Ausführung erweist sich als problematisch.

Mit dem unten stehenden Fragment funktioniert die Konvertierung bei einer Zahl von wenigen (in meinem Test bis zu 15) zu konvertierenden Text-Hyperlinks tadellos.
Bei einer größeren Zahl von Text-Hyperlinks (es handelt sich in einem speziellen Test stets um Duplikate desselben Hyperlinks) stürzt mir InDesign CS5 regelmäßig nach Ausführung des Skripts ab. Die erwünschten Umsetzungen sind noch kurz zu erkennen. Aber dann ist schlagartig Schluss.

Ich vermute, das Problem liegt nicht am eigentlichen Konvertieren der Hyperlinks, denn dies funktioniert im Einzelfall und in einer kleinen Zahl von Fällen, sondern vielmehr an der Aktualisierung der Anzeige der neuen Querverweise.

Code
var d = app.activeDocument; 

// Einrichten eines Querverweisformats auf die Seitenzahl
var cr_name = '_Seitenverweis';
var cr_format = d.crossReferenceFormats.itemByName(cr_name);
if (cr_format == null)
{
cr_format = d.crossReferenceFormats.add({name:cr_name});
cr_format.buildingBlocks.add({blockType:BuildingBlockTypes.PAGE_NUMBER_BUILDING_BLOCK});
}
//~ var _counter = 0;

// Schleife durch die Hyperlinks
for (var i = d.hyperlinks.length-1; i >= 0; i--)
{
var h = d.hyperlinks.item(i);
// Beschränkung auf Text-Hyperlinks mit Textzielen (Textanker)
if (h.source.constructor.name == 'HyperlinkTextSource' && h.destination.constructor.name == 'HyperlinkTextDestination')
{
var source_text = h.source.sourceText;
var ch_length = source_text.characters.length;
try
{
h.source = d.crossReferenceSources.add({sourceText: source_text.parentStory.insertionPoints.item( source_text.insertionPoints.lastItem().index), appliedFormat: cr_format});;
//~ source_text.parentStory.characters.itemByRange( source_text.index, ch_length-1).remove();
}
catch(e)
{
//~ $.writeln( 'e: ' + e);
}
// Counter zum Beenden nach bestimmter Zahl konvertierter Hyperlinks
//~ if (_counter++ == 5)
//~ exit();
}
}


Zwischendurch hatte ich auch versucht, das Skript in kleinen Häppchen auf die Hyperlinks loszulassen. 5 Hyperlinks sollen konvertiert werden, dann beenden.
Bei der nächsten Ausführung wieder 5 Hyperlinks und beenden.

Das funktioniert bei mir der erste Durchgang.
Nach Beendigung des zweiten Durchgangs stürzt InDesign wieder ab.

Hat jemand eine Idee, was die genaue Ursache für solche Abstürze sein könnte und wie diese zu verhindern wären?
Gibt es einen anderen Ansatz, (Text-)Hyperlinks in Querverweise zu konvertieren?


als Antwort auf: [#476991]

Querverweise aus Hyperlinks

Martin Fischer
  
Beiträge gesamt: 12783

28. Jul 2011, 09:50
Beitrag # 6 von 10
Beitrag ID: #477017
Bewertung:
(4135 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Bin nun einem Hinweis nachgegangen, dass InDesign (CS4) nach Anlegen einer bestimmten Zahl an Querverweisen abstürzt: http://forums.adobe.com/message/3356138#3356138

Hab zu Fuß einen eigenen Versuch unternommen und nacheinander einzelne Querverweise hinzugefügt. Beim 9. Querverweis ist InDesign abgestürzt.

Es ist also gut möglich, dass InDesign nicht in der Lage ist, eine große Zahl an Querverweisen zu verwalten.
Schade ;-)

Oder kann mir jemand diesen Verdacht widerlegen, indem er mir ein Dokument mit sagen wir mal 50 Querverweisen zukommen lässt?

-----
edit:
Es ist freilich auch möglich, dass der Absturz bei mir damit zusammenhängt, dass ich beim manuellen Vorgehen immer auf dasselbe Ziel verwiesen habe. Werde es gelegentlich mit unterschiedlichen Zielen nachstellen.
Das kann ja kaum sein, dass InDesign nur ein Paar Hände voll Querverweise verwalten kann.
Vielleicht sind aber auch mein Dokument oder meine InDesign-Voreinstellungen korrupt.


als Antwort auf: [#477014]
(Dieser Beitrag wurde von Martin Fischer am 28. Jul 2011, 10:05 geändert)

Querverweise aus Hyperlinks

Quarz
Beiträge gesamt: 3555

28. Jul 2011, 10:45
Beitrag # 7 von 10
Beitrag ID: #477028
Bewertung:
(4114 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

zur Info.

Ich habe bis jetzt 25 Querverweise
(Seitenzahl - Inhaltsverzeichnis) aus
3 InDesign CS5-Dateien gesetzt.

Problemlos :-)


Gruß
Quarz

-------------------------------------------
InDesign CS5 7.04 | Win7/64 Prof.



als Antwort auf: [#477017]

Querverweise aus Hyperlinks

Martin Fischer
  
Beiträge gesamt: 12783

28. Jul 2011, 11:01
Beitrag # 8 von 10
Beitrag ID: #477035
Bewertung:
(4108 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Quarz,

ich glaube, es liegt an meiner Arbeitsumgebung.
Bei einem neu eingerichteten Dokument ist mir InDesign CS5 wieder beim 12. händisch eingefügten Querverweis abgestürzt.

Darf ich Dir ein Dokument zum Test des obigen Skriptfragments zukommen lassen, damit Du in Deiner stabilen Arbeitsumgebung testest, ob die Konvertierung funktioniert?


als Antwort auf: [#477028]

Querverweise aus Hyperlinks

Martin Fischer
  
Beiträge gesamt: 12783

28. Jul 2011, 11:23
Beitrag # 9 von 10
Beitrag ID: #477040
Bewertung:
(4102 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Quarz,

ich glaube, der Test erübrigt sich.

Das Skript oben konvertiert in CS4 die Text-Hyperlinks zuverlässig in Querverweise.
Auch wenn's Hunderte sind.

Die Ursache für den Fehler liegt demnach sehr wahrscheinlich in meiner Arbeitsumgebung von InDesign CS5.

----
edit:
Das Löschen der Voreinstellungen von InDesign CS5 hatte keine Besserung bewirkt.
Aber das Deaktivieren von Plugins von Drittherstellern brachte auch ich CS5 den Erfolg!

Und das schrittweise Wiedereinbinden der deaktivierten Plugins funktioniert nun auch – selbst mit der vollständigen alten Besetzung.


als Antwort auf: [#477035]
(Dieser Beitrag wurde von Martin Fischer am 28. Jul 2011, 11:39 geändert)

Querverweise aus Hyperlinks

GWE
Beiträge gesamt: 31

28. Jul 2011, 14:06
Beitrag # 10 von 10
Beitrag ID: #477069
Bewertung:
(4059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

also händisch kann ich auch einige Querverweise anlegen .. irgendwo bei 30-40 Stück habe ich dann aufgehört.
Allerdings sobald ich ein Dokument per "InDesign-Tagged-Text" mit Querverweisen befülle ist es bei max. 10 Stück vorbei und InDesign stürtzt sofort ab.

Grüße GWE


als Antwort auf: [#477040]
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!