Keynote書類上で選択中のオブジェクトのリサイズを行うAppleScriptです。
本Scriptの作成とテストはKeynote 14.214.3上で行いました。
Keynote書類は、4:3の書類と16:9の書類が存在しており、4:3の書類を16:9にリサイズしても内容についてはとくに変更は加えられず、逆に16:9の書類を4:3に変換すると、中身がぐしゃぐしゃになります。
「じゃあ、オブジェクトをグループ化してリサイズすれば?」
という話になりますが、やってみるとこれはうまく動きません。
iWork Apps間でのオブジェクトのコピー&ペーストにも問題があります。
たとえば、KeynoteからPagesにペーストした瞬間に「文字の回り込み」がデフォルトでオンになってしまい(この挙動が邪魔)、隣接するオブジェクトを避けて文字が回り込み、おかしな状態になります。
Keynote書類のリサイズ、他のiWork Appへのデータ使い回しを便利に行うために、オブジェクトのリサイズ処理というのは重要なテーマであり続けています。ただ、重要ではあるものの、iWork App上のオブジェクトのコントロール機能がAppleScript側に公開されていないため、手作業なしに複数オブジェクトをまとめてリサイズすることは(現状では)不可能です。
▲処理後 本Scriptを実行したことにより、Keynote書類上の各種オブジェクトが1/2のサイズになっている。ただし、lineの太さがそのままだったり、text alignの都合でバランスが悪くなってしまった箇所がある
なので、ここに示したScriptは「あくまでも試作品」レベルのものであり、この困難な作業に対する「銀の弾丸」ではありません。
lineオブジェクトの線の太さを制御できないですし、テキストオブジェクトの左寄せ/右寄せといった制御がAppleScriptからできないため、テストデータを処理してみてもこれらの手作業が必要だと感じます。
それでも、100%すべて手作業で調整するよりは「いくぶんマシ」なものでしょう。
AppleScript名:選択中のオブジェクトのリサイズ.scptd |
— – Created by: Takaaki Naganoya – Created on: 2024/12/20 — – Copyright © 2024 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions set aScale to 2 tell application "Keynote" tell front document set aSel to selection repeat with i in aSel set j to contents of i set aClass to class of j if aClass is not in {document, slide} then set aPos to position of j copy aPos to {xPos, yPos} set aWidth to width of j set aHeight to height of j if (aClass = text item) or (aClass = shape) then tell j try set firstSize to size of first character of object text set targSize to firstSize / aScale ignoring application responses set size of every character of object text to targSize end ignoring end try end tell else if aClass = table then tell j set cList to every cell repeat with ii in cList set jj to contents of ii set aSize to font size of jj ignoring application responses set font size of jj to (aSize / aScale) end ignoring end repeat end tell else if aClass = line then set lineW to width of j –set width of j to (lineW / aScale) end if ignoring application responses set j’s width to (aWidth / aScale) set j’s height to (aHeight / aScale) set j’s position to {xPos / aScale, yPos / aScale} end ignoring end if end repeat end tell end tell |