ExtendScript der Woche: »Grafikpfade exportieren und importieren«

(Dies ist eine gekürzte Fassung des Adobe-Beitrags »Generate List of Referenced Graphics and Update Their New Paths«)

Der englische Titel ist sehr lang, aber darum geht es:

  • Sie erzeugen einen Report aller referenzierten Grafiken eines Buchs.
  • Die Pfadangaben in diesem Report können Sie anpassen.
  • Diese neuen Pfadangaben können Sie wieder in das Buch importieren.

Das klingt sehr viel cooler, als die Modifikation von MIF-Dateien. Die zugehörigen Menüpunkte legt das Skript unter Datei>Dienstprogramme an.

Download der Dateien: importExport.zip

Nachtrag p248 für FrameMaker 10

Aufgrund einer späten Änderung der FDK-Dateien für FrameMaker 10 erschienen die Log-Meldungen im Zusammenhang mit strukturierten Dateien bei der Verwendung von deutschem FrameMaker in japanisch – für die meisten von uns nicht hilfreich ;-)

Die Version p248 wurde neu kompiliert unter Berücksichtigung der jüngsten FDK-Dateien und nun erscheinen diese Meldungen wieder englisch.

Zusätzlich werden zwei neue Eigenschaften beim Kommando Saveunterstützt: RefFileNotFound und DitaGenerateFlatBook (ebenfalls nur für FrameMaker 10).

Element-Inhalt markieren

Im Forum frameusers-de kam die Frage auf nach einem Tastaturkürzel, mit dessen Hilfe man nur den Inhalt eines Elements markieren könnte.

Markus Wiedenmaier präsentierte daraufhin eine Lösung mit ExtendScript für FrameMaker 10, seinen Code habe ich nach FrameScript übertragen, die wichtigsten Zeilen folgen. Die aktuelle Version kann hier geladen werden:

Das Skript muss installiert werden und erstellt zur Zeit zwei Menüpunkte am Ende des Menüs “Element”, die Tastenkürzel sind Esc h e t (highlight element text) bzw. Esc h e c (highlight element content).

Event Initialize
    If (Session.ProductIsStructured)
        Local lvMenu lvCmd;

        Get Object Type(Menu) Name('ElementMenu') NewVar(lvMenu);
        New Command Name('SWAT_CMD_SELECTELEMENTTEXT')
            Label('Select text node') Shortcut('\!het')
            NewVar(lvCmd) EventProc(SelectText) 
            AddTo(lvMenu) EnabledWhen(EnableNeedsDocpOnly);
        Set lvCmd.KeyboardShortcutLabel = 'Esc h e t';
        New Command Name('SWAT_CMD_SELECTELEMENTCONTENT')
            Label('Select element content') Shortcut('\!hec')
            NewVar(lvCmd) EventProc(SelectContent) 
            AddTo(lvMenu) EnabledWhen(EnableNeedsDocpOnly);
        Set lvCmd.KeyboardShortcutLabel = 'Esc h e c';

    EndIf
EndEvent

Event SelectText
    Local lvDoc(Session.ActiveDoc);
    Local lvSel(lvDoc.ElementSelection);
    Set lvSel.Begin.Offset = 0;
    Set lvSel.End.Offset = ObjEndOffset;
    Local lvTextRange;
    // EUtl.Convert{} requires version 5
    Set lvTextRange = EUtl.Convert{lvSel, 'TextRange'};
    Set lvDoc.TextSelection = lvTextRange;
EndEvent

Event SelectContent
    Local lvDoc(Session.ActiveDoc);
    Local lvSel(lvDoc.ElementSelection);
    Local lvCurrentElement;
    If (lvSel.Begin.Child
      and lvSel.Begin.Child.ElementDef 
      and lvSel.Begin.Offset = 0)
        Set lvCurrentElement = lvSel.Begin.Child;
    Else
        Set lvCurrentElement = lvSel.Begin.Parent;
    EndIf
    Local lvTextRange;
    Set lvTextRange = lvCurrentElement.TextRange;
    Set lvTextRange.Begin.Offset = lvTextRange.Begin.Offset + 1;
    Set lvDoc.TextSelection = lvTextRange;
EndEvent

ExtendScript der Woche: »Nicht genutzte Formate löschen«

(Dies ist eine gekürzte Fassung des Adobe-Beitrags »Deleting unused formats in a book«)

Dieses Skript nutzt drei komfortable Funktionen, die per Skript verfügbar sind: DeleteUnusedCharFmt, DeleteUnusedPgfFmt, DeleteUnusedTblFmt. Ohne weitere Arbeit können damit pro Dokument die nicht benutzten Formate aus den katalogen gelöscht werden. Das ist besonders geeignet, um zumindest die überflüssigen Altlasten vor einem Template-Update aus den Dokumenten rauszuwerfen.

Manch einer meint zwar, dass man gleich alle Kataloge komplett löschen sollte, aber für verschiedene Anlässe gibt es eben verschiedene Lösungen.

Als wesentliche Bestandteil enthält das Skript eine Funktion zum Abarbeiten eines Buchs samt Unterbüchern, die man sicher bei vielen Gelegenheiten einsetzen kann.

Hier der Download einschl. Testdateien: files1.zip

ExtendScript der Woche: »Buch-Upgrade«

(Dies ist eine gekürzte Fassung des Adobe-Beitrags »Create a upgraded copy of Book«)

Bei der Übernahme von Daten aus älteren FrameMaker-Versionen kann es lästig sein, für jedes Dokument die entsprechende Nachfrage zu beantworten. Diese Aufgabe soll dieses Skript lösen, Sie öffnen nur das Buch und starten die Routine, die dann für Sie alle Dokumente öffnet und als FrameMaker-10-Dokumente wieder speichert.

Darüber hinaus ist die objektorientierte Programmierung von Anchal Arora einen Blick wert.

Hier die Downloads:

BookUpgrade.zip
BookUpgradeSampleFiles.zip