[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Tabellenzellen in Textrahmen verwandeln?

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

Tabellenzellen in Textrahmen verwandeln?

bestbuy
Beiträge gesamt: 24

10. Jun 2014, 10:56
Beitrag # 1 von 18
Bewertung:
(5826 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Zusammen,

kennt jemand ein Skript, welches die Zellen einer mehrspaltigen Tabelle in einzelne Textrahmen umwandelt ?

Muss kein Skript sein - aber eine andere Möglichkeit wüßte ich z. Zt. nicht!
X

Tabellenzellen in Textrahmen verwandeln?

Hans Haesler
  
Beiträge gesamt: 5826

11. Jun 2014, 22:10
Beitrag # 2 von 18
Beitrag ID: #528336
Bewertung:
(5772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo bestbuy,

leider hat man mit den Bordmitteln von JavaScript für InDesign keine Möglichkeit, die Position einer Zelle festzustellen. Man muss die Werte der Einfügemarke benutzen und auch den Zellversatz berücksichtigen.

Horizontal geht das einigermassen. Aber in der Vertikalen ist das Ergebnis nicht zuverlässig,

Dennoch ein erster Versuch: Die am wenigsten schlechte von zehn Beta-Versionen ...

Zum Gebrauch: Eine Tabelle auswählen (das Textwerkzeug in die Ecke oben links bewegen und klicken, sobald der Mauszeiger zum dicken, schwarzen, diagonalen Pfeil wird). Dann das Script starten.

Code
//ZellenZuRahmen_501d.js 
//© 11.06.14 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
//DESCRIPTION:Tabellenzellen in Textrahmen umwandeln

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// das aktuelle Dokument
var curDoc = app.documents[0];

// die Auswahl speichern und prüfen
curSel = app.selection;
if (curSel.length == 0) {
alert ("Eine Tabelle auswählen.", "Achtung");
exit();
}
else {
if (curSel[0].constructor.name != "Table") {
alert ("Eine Tabelle auswählen.", "Stop");
exit();
}
}

// die Ebene "Zellen" erzeugen
var cellsLayer = curDoc.layers.item("Zellen");
try {
cellsLayer.locked = false;
}
catch (e){
cellsLayer = curDoc.layers.add({name:"Zellen"});
}
app.activeWindow.activeLayer = cellsLayer;

// dis absolute Seitennummer
var p = curSel[0].parent.parentPage.documentOffset;

// alle Zellen
var allCells = curSel[0].cells;
// eine Schleife durch die Zellen
for (var c=0; c<allCells.length; c++) {
var cH = allCells[c].height; // Höhe
var cW = allCells[c].width; // Breite
var yO = allCells[c].topInset; // Zellversatz oben
var xO = allCells[c].leftInset; // Zellversatz links
// der obere Zellenrand
var y1 = (allCells[c].insertionPoints[0].baseline)-(yO*3)-0.25;
// der linke Zellenrand
var hP = (allCells[c].insertionPoints[0].horizontalOffset)-xO;
var y2 = y1+cH; // der untere Rand
var x2 = hP+cW; // der rechte Rand
// den Textrahmen erzeugen
var curFrame = curDoc.pages[p].textFrames.add({geometricBounds:[y1, hP, y2, x2], strokeColor:"None"});
// der Abstand des Textes zum Rahmen
curFrame.textFramePreferences.insetSpacing = [yO, xO, 0, 0];
// versuchen, den Inhalt der Zelle zu kopieren und einzusetzen
try {
app.select(allCells[c].texts[0]);
app.copy();
app.select(curFrame.insertionPoints[0]);
app.paste();
}
catch (e) {
}
}

// die Auswahl aufheben
app.selection = null;

// das Ende der Aktion verkünden
var dlog = new Window("palette");
dlog.size = [320,100];
dlog.add("statictext", [80, 100, 320, 116], "Fertig.");
dlog.show();
// eine kleine Pause
$.sleep(999);
// das Fenster schliessen
dlog.close();

Die Textrahmen werden auf der Ebene "Zellen" erzeugt. Der Inhalt wird kopiert und eingesetzt.

Einfach mal auf eine Deiner Tabellen anwenden und das Ergebnis durchgeben. Sehr wahrscheinlich muss die vertikale Position korrigiert werden.

Gruss, Hans


als Antwort auf: [#528272]

Tabellenzellen in Textrahmen verwandeln?

WernerPerplies
Beiträge gesamt: 2762

12. Jun 2014, 06:31
Beitrag # 3 von 18
Beitrag ID: #528342
Bewertung:
(5733 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Zitat leider hat man mit den Bordmitteln von JavaScript für InDesign keine Möglichkeit, die Position einer Zelle festzustellen. Man muss die Werte der Einfügemarke benutzen und auch den Zellversatz berücksichtigen.


Da gäbe es ja auch noch z. B. noch row.height und cell.height.

Bei meinen Konvertierungsjobs Ventura -> InDesign hatte ich bisher mit Zellpostionen und Zellgrößen noch kein Problem.

Aber vielleicht fehlte mir bisher nur die Tabelle, bei der ein Problem auftaucht. ;-)

Für ein Beispiel wäre ich dankbar.


als Antwort auf: [#528336]

Tabellenzellen in Textrahmen verwandeln?

Hans Haesler
  
Beiträge gesamt: 5826

12. Jun 2014, 07:20
Beitrag # 4 von 18
Beitrag ID: #528343
Bewertung:
(5723 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

in meinem Versuch benutze ich ja auch die cell.height.
Damit kann auch dem entsprechenden Textrahmen die richtige Höhe zugewiesen werden.

Aber das Problem ist, die vertikale Position des neuen Rahmens zu bestimmen.

Gruss, Hans


als Antwort auf: [#528342]

Tabellenzellen in Textrahmen verwandeln?

WernerPerplies
Beiträge gesamt: 2762

12. Jun 2014, 07:27
Beitrag # 5 von 18
Beitrag ID: #528344
Bewertung:
(5720 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vermutlich stehe ich auf dem Schlauch ;-), aber die vertikale Position lässt sich doch leicht aus der Summe der Zellhöhen, - natürlich unter Berücksichtigung von verbundenen und gesplitteten Zellen - , berechnen.


als Antwort auf: [#528343]

Tabellenzellen in Textrahmen verwandeln?

Hans Haesler
  
Beiträge gesamt: 5826

12. Jun 2014, 07:58
Beitrag # 6 von 18
Beitrag ID: #528346
Bewertung:
(5696 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

das wird bei einer Tabelle, welche sich zu Beginn des Textrahmens befindet, funktionieren. Doch wenn nebst gesplitteten auch vereinte Zellen vorkommen, ist es nicht mehr so einfach.

Aber was ist mit einer Tabelle mitten im Textfluss? Okay, da nimmt man die Baseline der letzten Zeile und den Abstand danach als Grundlage. Das kann auch schiefgehen, wenn sich die Tabelle zu Beginn der nächsten Spalte befindet.

Für einen ersten Versuch war mir das alles zu kompliziert.

Überlassen wir das Wort doch mal dem OP. Vielleicht wird er schon zufrieden sein. :-)

Gruss, Hans


als Antwort auf: [#528344]

Tabellenzellen in Textrahmen verwandeln?

WernerPerplies
Beiträge gesamt: 2762

12. Jun 2014, 08:11
Beitrag # 7 von 18
Beitrag ID: #528348
Bewertung:
(5676 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

klar, man muss bei solch einer Lösung sich unbedingt mit allen Randbedingungen beschäftigen, und sie dann entweder lösen oder, wenn nicht gelöst, mit einer Fehlerbehandlung abfangen.

Dabei kommt dann zum Schluss eine Funktion oder besser noch ein Prototype als Erweiterung der Cell - Properties raus, im Idealfall also eine Eigenschaft Cell.geometricBounds. ;-)


als Antwort auf: [#528346]

Tabellenzellen in Textrahmen verwandeln?

Uwe Laubender
Beiträge gesamt: 5319

12. Jun 2014, 08:24
Beitrag # 8 von 18
Beitrag ID: #528349
Bewertung:
(5663 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, zusammen!

Witzigerweise arbeite ich gerade ebenfalls an einer ähnlichen Aufgabe.
Das eigentliche "Problem" besteht darin die linke, obere Ecke der ersten Zelle zu berechnen. Die linke obere Position könnte durch zwei Werte berechnet werden:

1. "horizontalOffset" des ersten InsertionPoints für "x"
2. "baseline" des ersten InsertionPoints für "y"

Jetzt kommt aber der Haken:
Unter Berücksichtigung von diversen Formatierungen der Zelle (nicht nur inSet) und diversen Formatierungen des Textes.

Das macht das Ganze etwas unübersichtlich.

Zudem: die Zelle darf nicht gedreht sein, die Zellenausrichtung darf nicht von rechts nach links verlaufen (z.B. Arabischer Text), die Tabelle darf nicht gedreht sein.

Welche Alternativen gibt es?
Hilfsobjekte wie das Einfügen eines Rechtecks in die Zelle? Untauglich, diese Lösung krankt genauso an Formatierungen der Zelle und des Textes, die die Position verändern.

Ich sehe eine Möglichkeit über die Position des SpecialCharacters, der die gesamte Tabelle repräsentiert, an den Startpunkt heranzukommen. Unter Berücksichtigung der Absatzformatierung wie "Ausrichtung", "Links", "Rechts", Mitte" etc. Auch kniffelig.

Von da aus sollten sich die Breiten und Höhen der einzelnen Zellen "bequem" auslesen lassen. Immer berücksichtigt, dass die Tabelle nicht durch mehrere Textrahmen fließt. Dann wird's richtig aufwändig.

Alles mit viel zu viel Rechenaufwand und Unwägbarkeiten verbunden.
Ein Ausweg aus diesem Labyrinth von Berechnungen wäre vielleicht:

Copy/Paste der einzelnen Zellen in einen neuen Textrahmen als ersten Schritt. Die Tabelle also in viele kleine Einzeller zu verwandeln. Die Position der Textrahmen mit den Einzellern lässt sich ja leicht über einen Abgleich der eingangs genannten Werte für "horizontalOffset" und "baseline" des ersten InsertionPoints vornehmen. Breite und Höhe über die Breite und Höhe der Zellen.

Dieser Vorschlag würde auch für Tabellen taugen, die durch mehrere Textrahmen fließen. Hm. Ist das ein guter Vorschlag?


als Antwort auf: [#528344]

Tabellenzellen in Textrahmen verwandeln?

WernerPerplies
Beiträge gesamt: 2762

12. Jun 2014, 08:48
Beitrag # 9 von 18
Beitrag ID: #528355
Bewertung:
(5637 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

ich bin gerade auf einer anderen Baustelle unterwegs, deshalb etwas pauschal:
Zitat Das macht das Ganze etwas unübersichtlich.

Ich finde, das etwas erst dann unübersichtlich wird, wenn man Funktionalität nicht kapselt.

Deshalb versuche ich immer jede einzelne Funktionalität weiter zu gliedern bis sich nichts mehr aufteilen lässt (Top-down).

Dabei kümmere ich mich nie um benötigte Rechenzeit und Programmgröße (benötigte Zeilenanzahl).

Wichtiger ist für mich die Übersichtlichkeit und Debug-Möglichkeit.

Dann teste ich die einzelnen Module hinsichtlich ihrer Randbedingungen und anschließend die Funktionalität des aufrufenden Moduls.

Erst wenn alles (? ;-) ) so funktioniert, wie ich es erwarte, kümmere ich mich, wenn überhaupt notwendig, um die Optimierung der Rechenzeit.

Das mache ich dann durch den Einsatz meiner Profiling Class:

Speed, Speed, Speed - JavaScript Profiling Class
Zitat Zudem: die Zelle darf nicht gedreht sein, die Zellenausrichtung darf nicht von rechts nach links verlaufen (z.B. Arabischer Text), die Tabelle darf nicht gedreht sein.

Dann packe so etwas in eine Fehlerbehandlungsroutine und löse das Problem erst wenn eine konkrete Anforderung besteht.
Aber eine venünftige Fehlerbehandlung für erkannte, aber nicht behandelte Fälle, sollte es schon geben.

Was Deine anderen Vorschläge angeht, ich habe, glaube ich, fast alle Wege schon in Einzelfällen genutzt.

Bei einmalig genutzten Speziallösungen zählt nur das Ergebnis. ;-)


als Antwort auf: [#528349]

Tabellenzellen in Textrahmen verwandeln?

bestbuy
Beiträge gesamt: 24

12. Jun 2014, 12:23
Beitrag # 10 von 18
Beitrag ID: #528370
Bewertung:
(5570 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für dieses fantastische Skript. Ich bin immer wieder erstaunt, welche Funktionserweiterung von InDesign mittels Skripten möglich ist. Aber vor allem bin ich immer wieder erstaunt, dass es Leute wie Dich gibt, die es verstehen solche Skripte zu erstellen.

In meinem Fall läuft das Skript einwandfrei. Allerdings habe ich auch keine vereinten Zellen oder Tabellen in Textrahmen o.ä. Die neuen Textrahmen bleiben exakt an der Stelle stehen, wo sie vorher waren. Lediglich die Original Tabelle muss noch händisch gelöscht werden.

Test später noch Mal Sonderfälle, um zu schauen, wie sich das Skript dann verhält.

Vielen Dank noch Mal
Michael


als Antwort auf: [#528336]

Tabellenzellen in Textrahmen verwandeln?

Hans Haesler
  
Beiträge gesamt: 5826

12. Jun 2014, 14:56
Beitrag # 11 von 18
Beitrag ID: #528378
Bewertung:
(5543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

bitte sehr. Ich bedanke mich für Deine positive Rückmeldung. Super, dass es klappt!

Nun, die Textrahmen bleiben nicht an der Stellen stehen, wo sich die entsprechenden Zellen befinden. Die Textrahmen werden neu erzeugt.

Ich bin gerade zurück von einer Ausfahrt mit dem Rennrad. Und während des Rollens habe ich mir eine Methode ausgedacht, mit welcher das Positionieren der Textrahmen zuverlässiger vorgenommen werden könnte. Allerdings weiss ich nicht, ob mein Hirngespinst funktionieren wird. Deshalb bin ich froh, dass Deine Tabellen relativ einfach konstruiert sind.

Gruss, Hans


als Antwort auf: [#528370]

Tabellenzellen in Textrahmen verwandeln?

Martin Fischer
  
Beiträge gesamt: 12783

25. Mai 2016, 11:29
Beitrag # 12 von 18
Beitrag ID: #549895
Bewertung:
(4115 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Antwort auf: Allerdings weiss ich nicht, ob mein Hirngespinst funktionieren wird.


Und ...
Funktioniert's?

Stehe gerde vor einem ähnlichen Problem.
Per Script soll die relative Position der ersten Grundlinie in einer Zelle zur oberen Kante der Zelle ermittelt werden.

Wie ist die y-Position dieser Kante zu ermitteln?
Oder wie ist die y-Position der oberen Kante der ersten Tabellenreihe zu ermitteln?
Möglicherweise funktioniert das besser über die y-Position der unteren Kante der letzten Tabellenreihe, die auf der Grundlinie (bzw. in einem bestimmten Verhältnis zu derselben) des Tabellenankers steht.


als Antwort auf: [#528378]

Tabellenzellen in Textrahmen verwandeln?

Hans Haesler
  
Beiträge gesamt: 5826

25. Mai 2016, 11:42
Beitrag # 13 von 18
Beitrag ID: #549897
Bewertung:
(4105 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

das war vor knapp zwei Jahren ... Ich weiss nicht, ob ich damals versucht hatte, die erwähnte Methode umzusetzen.

Ich werde zunächst versuchen, die damaligen Betaversionen zu finden. Dann muss ich mich wieder mit dem Thema befassen.
Falls dabei die Idee nicht wieder auftaucht: Für heute Nachmittag habe ich eine Ausfahrt mit dem Rennrad geplant. :-)

Gruss, Hans


als Antwort auf: [#549895]

Tabellenzellen in Textrahmen verwandeln?

Martin Fischer
  
Beiträge gesamt: 12783

25. Mai 2016, 11:48
Beitrag # 14 von 18
Beitrag ID: #549898
Bewertung:
(4102 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

Antwort auf: das war vor knapp zwei Jahren ... Ich weiss nicht, ob ich damals versucht hatte, die erwähnte Methode umzusetzen.


Oh, hatte nicht auf's Datum gesehen.
Meinte, die Fragestellung erst letzthin gelesen zu haben.
Sorry.

Eine Idee zur Bestimmung der relativen Position der ersten Grundlinie:
erzeuge einen temporären Textrahmen,
kopiere die erste Zeile des Textes der Zelle in diesen TR und ermittle dort die relative Position der ersten Grundlinie,
lösche den temp. Textrahmen ...

Aber das scheint mir für jede Zelle einer Tabelle ein rechenintensives Vorgehen zu sein.


als Antwort auf: [#549897]

Tabellenzellen in Textrahmen verwandeln?

WernerPerplies
Beiträge gesamt: 2762

25. Mai 2016, 12:09
Beitrag # 15 von 18
Beitrag ID: #549899
Bewertung:
(4059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Aber das scheint mir für jede Zelle einer Tabelle ein rechenintensives Vorgehen zu sein.

Vielleicht nicht jedesmal erzeugen, sondern nur verankern, oder verschieben oder duplizieren.

Das kann man alles in eine Erweiterungsmethode packen.


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