Transforming page items
Instead of using geometricBounds property now and then, you can use reframe method. Here is an example:
var frame = app.selection[0];
var page = app.documents[0].pages[0];
var pBounds = page.bounds;
$.writeln("pBounds: " + pBounds); // => pBounds: 0,0,792,612
var topLeft = page.resolve(AnchorPoint.TOP_LEFT_ANCHOR,CoordinateSpaces.SPREAD_COORDINATES)[0];
var bottomRight = page.resolve(AnchorPoint.BOTTOM_RIGHT_ANCHOR,CoordinateSpaces.SPREAD_COORDINATES)[0];
$.writeln("topLeft: " + topLeft+" bottomRight: "+bottomRight);
var corners = [topLeft,bottomRight];
frame.reframe(CoordinateSpaces.SPREAD_COORDINATES, corners);
Note that resolve() wraps up the provided corner coordinates in doubly nested arrays, thus the [0] dereference.
Below ia an example that also considers margin preferences.
var myPage = app.documents[0].pages[0]; var pageBounds = myPage.bounds; var pageWidth = pageBounds[3] - pageBounds[1]; var pageHeight = pageBounds[2] - pageBounds[0]; var mTop = myPage.marginPreferences.top / pageHeight; var mBottom =1 - myPage.marginPreferences.bottom / pageHeight; var mLeft = myPage.marginPreferences.left / pageWidth; var mRight = 1 - myPage.marginPreferences.right / pageWidth; var mySpread = myPage.parent; var myFrame = mySpread.textFrames.add(); var topLeft = myPage.resolve( [[mLeft, mTop], BoundingBoxLimits.GEOMETRIC_PATH_BOUNDS], CoordinateSpaces.SPREAD_COORDINATES)[0]; var bottomRight = myPage.resolve( [[mRight, mBottom], BoundingBoxLimits.GEOMETRIC_PATH_BOUNDS], CoordinateSpaces.SPREAD_COORDINATES)[0]; myFrame.reframe( CoordinateSpaces.SPREAD_COORDINATES, [topLeft, bottomRight]);
Function setWidthHeight by Marc
function setWidthHeight(/*PageItem*/o, /*str*/w, /*str*/h, /*bool=false*/useVisibleBounds)
{
if( !o.resize ) return;
var CS_INNER = CoordinateSpaces.INNER_COORDINATES,
BB = BoundingBoxLimits[(useVisibleBounds?'OUTER_STROKE':'GEOMETRIC_PATH') + '_BOUNDS'];
var wPt = UnitValue(w).as('pt'),
hPt = UnitValue(h).as('pt');
if( 0 >= wPt || 0 >= hPt ) return;
o.resize(
[CS_INNER,BB],
AnchorPoint.CENTER_ANCHOR,
ResizeMethods.REPLACING_CURRENT_DIMENSIONS_WITH,
[wPt,hPt,CS_INNER]
);
}
// Sample code
// ---
setWidthHeight(app.selection[0], "5cm", "50pt");
