Absatzlinien, transparent

Die guten alten Absatzlinien sind eine ziemlich geniale Möglichkeit Absätze mit Farbhinterlegungen oder Schmuckelementen zu versehen. Leider kann man sie nicht transparent setzen, so dass sie immer den Hintergrund vollständig verdecken.

Soll nun wie im Beispiel ein Hintgerundfoto mit Hilfe der Absatzlinien etwas zurückgenommen werden, benötigt man ein kleines Skript, dass die Hinterlegungen an den entsprechenden Stellen in das Dokument zeichnet. Bei Umbruchverschiebungen laufen sie nicht mit, dann muss das Skript erneut ausgeführt werden.

Die Idee ist die Absatzlinien selber zu erstellen. Dazu lege ich im voraus ein Absatzformat fest, bei welchem die Absatzlinien gezeichnet werden sollen.

const PSTYLE = "u2";

Am Anfang müssen eventuell noch vorhandene alten Hinterlegungen gelöscht werden, dazu versehe ich sie beim Erstellen (im zweiten Code Block bei rectangle.add) mit einem bestimmten label.

const MARKER = "%hpScriptObject%";
for (i = _dok.allPageItems.length -1; i > 0 ;i--) {
_dok.allPageItems[i].label == MARKER ? _dok.allPageItems[i].remove() : undefined ;
}

Nun durchsucht das Skript alle Absätze des Dokuments und errechnet die Größe der transparenten Hinterlegungen dynamisch.

// ... alle Stories, und Paragraphs einsammeln
if (_p.appliedParagraphStyle.name == PSTYLE) {
    for (j =0; j < _p.lines.length; j++) {
        var _x1 = _p.lines[j].characters[0].horizontalOffset;
        var _x2 = _p.lines[j].characters[-1].endHorizontalOffset;
        var _y2 = + offset + _p.lines[j].baseline ;
        var _y1;
        if (_p.lines[j].leading == Leading.AUTO ) {
            // Zeilenabstand selber berechnen 
            _y1 = _y2 +  _p.pointSize * (_p.autoLeading/100) *-1;
        }
        else {
            _y1 = _y2 +  _p.lines[j].leading * -1;
        }
        _dok.rectangles.add( undefined, LocationOptions.AFTER ,
                             _p.parentTextFrames[0] ,
                           { appliedObjectStyle:objStyle ,
                             geometricBounds:[_y1,_x1,_y2,_x2], label:MARKER } );
}

Interessant ist die in CS3 neu hinzugekommene Eigenschaft Character.endHorizontalOffset. Früher musste diese Position des letzten Buchstabens noch performanceraubend und mühsam errechnet werden.

Das vollständige Skript kann hier heruntergeladen werden. Zum Testen wird ein InDesign-Dokument mit den Absatzformat u2 benötigt – alternativ kann der Code natürlich auch direkt angepasst werden.