Pages+AS本で必要になって追加で強力なScriptを書いた
電子書籍の作成上、どうしても必要だったAppleScriptを書いて使ってみました。
フォント見本の記事が引き起こすPDFの容量増大
いま書いている電子書籍のPages書類上に「フォント見本帳」みたいなページがあって
そのままでも見た目はよいものの……そのままPDF化すると、やたらとたくさんのフォントが埋め込まれてしまい、PDFのサイズが理不尽なレベルまで増大。
そのため、テキストオブジェクトではなく「画像」としてPages書類上に配置しておいたほうが、フォント埋め込みが発生しなくていいんじゃないか、という話になりました(1人でお題を出して1人でツッコむ、1人会議)。
コピーした書式付きテキストを画像化
これまでに作ったAppleScriptを一部変更することで、この機能を実現しました。
クリップボードに入っている書式つきテキストの、文字情報、フォント種別、フォントサイズ、描画色を取り出し、その情報を使ってメモリ上の「画像」の上に文字を書き、画像全体を使うと邪魔なので、外周部から空白(透明な部分)をトリミング。
最後に、トリミングした画像をクリップボードに設定。
これで、「コピーした文字」を「画像」に変換したことになります。普通に動きました。
OSの「どこの機能」を「誰」から借りてくるか?
クリップボードに入れた「書式つきテキスト」の情報を、どのように画像化するか?
AppleScript自体にそのような機能はなく、よその機能を持っている何かに依頼することしかできません。
その、誰に借りてくるかによって、難易度とか、処理速度とか、応用範囲の広さ、広域への配布時できるかどうかといった話が変わってきます。
楽をしたら、楽をした分だけあとでそのツケを払う必要が発生するというのも、よくある話です。
A. 一番簡単な相手:GUIアプリ。PhotoshopやPixelmator Proなど。購入ないしサブスク契約する必要がある
B. 知識があれば便利な相手:githubで配布されているオープンソースのフレームワーク。SwiftやObjective-C、C++などで記述されているXcodeのプロジェクトを自分でビルドする必要がある。無料
C. ◯◯でも容易にインストールできる相手:各種UNIXコマンド。最初からOSに入っていれば楽。入っていなくても、パッケージシステムでターミナルから楽にインストールできる。無料
D. 手数が増えるが強力な相手:OSの内部機能(Cocoa)。無料
プログラムの作りやすさは、A→C→B→Dの順。
プログラムの実行速度は、B→D→C→Aの順(例外はあるがだいたい)。
他人へのプログラムの配布しやすさは、D→B→A→Cの順。
Mac App Store用アプリ開発時の使いやすさは、D→B→Aの順(Cは依存パッケージのインストールなどが必要で独立したバイナリにするのが、自分にはほとんど無理)。
なので、今回はD+Bで作りました。
2時間ぐらいでできたが
必要なものの、あまり作りたいとはいなかったAppleScriptです(利用できるケースが多くなかったから)。でも、冒頭に説明したとおり、これを作らなかったら最終的なPDFのサイズが数十Mバイト増えてしまいます。
利用するには、まずはPages上で何かの1文字をコピーします。ここでは、フォント見本として利用している「永」の字をコピーすることになります。
この直後にAppleScriptを実行すると、クリップボードに入っている書式つきテキストを解釈して、フォント名、フォントサイズ、色、文字情報などを取り出します。
この情報をもとに、メモリ上に作成した背景が透明な画像に同じ文字を描画。
そのままだと画像が大きすぎるので、外部のフレームワークの機能を呼び出して外周部を切り抜き(トリミング)。
得られた画像をクリップボードに設定。
これで、Pages上でフォント見本の文字をコピーしてAppleScriptを実行すると、画像化したものをPages上にペーストできるようになりました。
実際に自分で使ってみたらダルかった
目的のAppleScriptが書けました。めでたいかぎりです。
しかし、何個も処理していると、
「これ、複数のテキストボックスを選択しておくと、全部画像に置き換えてくれたりしてほしいな」
と感じます。
1個1個、瞬時に処理できるのはよいのですが、実際にはそれが数十個存在しているので、複数処理できないと時間がかかってやる気がなくなります。
複数オブジェクトの処理機能がないと実用性がない、という結論です。しょうがない、作るか……。
→ 作りました。埋め込みフォントの数が減って書籍1冊分のPDFが25Mバイトほど小さくなりました