Как да мащабирате таблиците да съответстват на ширината на текстовата колона във FrameMaker

Adobe FrameMaker Frequently asked questions

Как да мащабирате таблиците да съответстват на ширината на текстовата колона във FrameMaker?

За скрипта: Ето един прост скрипт, който пропорционално мащабира таблица, за да съответства на текстовата колона, която я съдържа. Този скрипт работи с текущата таблица, но може лесно да бъде разширен, за да работи с всички таблици в документ или книга.

Получаване на данните: Кликнете с курсора в таблица, която трябва да бъде мащабирана. Ще трябва да съберете някаква основна информация, за да мащабирате таблицата правилно. Ето коментиран код за задаване на необходимите данни в променливи.

// The selected table.
Set vTbl = SelectedTbl;
// The current width of the table.
Set vTblWidth = vTbl.TblWidth;
// The width of the column containing the table.
Set vColWidth = vTbl.TextLoc.Object.InTextObj.Width;


Променливата vColWidth е ширината на колоната в многоколонна текстова рамка. Ако текстовата рамка има само една колона, ширината на колоната е равна на ширината на текстовата рамка. Ако имате множество колони, но искате да мащабирате таблицата до ширината на текстовата рамка, използвайте следните редове на мястото на последните два реда по-горе.

// The width of the text frame containing the table.
Set vColWidth = vTbl.TextLoc.Object.InTextFrame.Width;


Сега скриптът може да направи малко математика, за да определи колко да мащабира таблицата.

// Divide the column width by the table width.
Set vScaleFactor = vColWidth / vTblWidth;



Как да мащабирате таблицата?

Свойството TblWidth на таблицата е само за четене, така че не можете да го използвате за мащабиране на таблицата.

// This won't work.
Set vTbl.TblWidth = vTblWidth * vScaleFactor;


Вместо това трябва да промените ширината на всяка отделна колона на таблицата. Тези ширини се съхраняват в MetricList, наречен TblColWidths.

// Set a variable for the table column widths.
Set vWidths = vTbl.TblColWidths;


Metric list е списък със стойности за измерване. В този случай има член от списъка за всяка колона в таблицата. Ако таблицата има пет колони, списъкът TblColWidth ще съдържа пет члена.
Ключът към скрипта е да се премине през списъка с измервания, да се умножи всяко от тях с vScaleFactor и новата стойност да се постави обратно в списъка.

// Loop through the list and calculate each
// table column's new width.
Loop While(vCounter <= vWidths.Count) LoopVar(vCounter)
Init(1) Incr(1)
Get Member Number(vCounter) From(vWidths) NewVar(vWidth);
Set vNewWidth = vWidth * vScaleFactor;
Replace Member Number(vCounter) In(vWidths) With(vNewWidth);
EndLoop


Променливата vCounter ще се увеличава с 1 (Incr(1)), започвайки от 1 (Init(1)), през броя на членовете в vWidths (vWidths.Count). Всеки член ще бъде умножен с фактора за мащабиране и членът ще бъде заменен с новата стойност.
Вашата MetricList променлива vWidths сега съдържа правилните ширини за мащабиране на таблицата до ширината на колоната. Единственото останало нещо е да присвоите новите стойности на таблицата.
Set vTbl.TblColWidths = vWidths;


Comments