Keynote v12で正常化した「selection」を用いて、選択中のshapeオブジェクトの範囲に、選択中のtext itemを指定数敷き詰めるAppleScriptです。
Keynote書類上に、敷き詰める領域を示すshapeオブジェクトを1つ、敷き詰める内容を示すtext itemオブジェクトを1つ配置し、これら2つを選択して本Scriptを実行。
選択状態で実行。
指定の最小文字サイズから最大文字サイズ(Keynote書類上で選択したtext item中の文字サイズ)までの間で乱数選択しつつ、指定個数を指定エリア中に作成します。
AppleScript名:選択中のtext itemとshapeをもとにtext itemを敷き詰める.scpt |
— – Created by: Takaaki Naganoya – Created on: 2022/04/15 — – Copyright © 2022 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions property textItem : missing value property shapeItem : missing value property objMax : 200 –生成するオブジェクト(text item)の個数 property fontSizeMin : 12 –生成するオブジェクト内のobject textのフォントサイズ(これ以下のサイズは生成しない) tell application "Keynote" set aVer to (version as real) if aVer < 12 then return tell front document –書類上で選択中のオブジェクトを種別に抽出する set aaSel to selection if length of aaSel is not equal to 2 then error "You have to select one text item and one shape." repeat with i in aaSel set j to contents of i set tmpClass to class of j if tmpClass = text item and textItem = missing value then set textItem to j else if tmpClass = shape and shapeItem = missing value then set shapeItem to j end if end repeat if {textItem, shapeItem} contains missing value then error "Selected objects are not suitable" –選択されたshapeオブジェクトから情報を取得 set aPos to (position of shapeItem) set minX to item 1 of aPos set maxX to minX + (width of shapeItem) set minY to item 2 of aPos set maxY to minY + (height of shapeItem) –選択されたtext itemオブジェクトから情報を取得 set maxFSize to size of object text of textItem set oText to object text of textItem set tWidth to width of textItem set tHeight to height of textItem –shapeオブジェクトで指定された領域に、text itemを生成 repeat objMax times –座標を乱数で指定 set randomX to random number from minX to (maxX – tWidth) set randomY to random number from minY to (maxY – tHeight) –文字サイズを乱数で指定 set randomCSize to random number from fontSizeMin to maxFSize tell current slide set tmpT to make new text item with properties {object text:oText, position:{randomX, randomY}, width:tWidth, height:tHeight} at the end ignoring application responses set size of every character of object text of tmpT to randomCSize end ignoring end tell end repeat end tell end tell |