テキストエディットのページ余白を自由に設定するAppleScript

テキストエディット.appはOSX付属のエディタで、一般的な文書であれば、ほとんどこれで用は足りてしまうのだが、唯一、難点がある。それは、ページ余白が1インチ(2.54cm)に固定されてしまっていて、変更できないこと。上下左右を2.5cmの余白で囲まれてしまうと、かなりの無駄を感じる状況もある。

素直に、iText Expressを利用すれば、もっと自由に余白を設定できるようになるのだが、それでも完全に余白0にすることはできない。そんな時は、以前の日記でも書いたとおり、リッチテキストの設定としてページ余白を0に設定してしまう方法がある。

ページ余白の裏技

{\rtf1\mac\ansicpg10001\cocoartf824\cocoasubrtf470
{\fonttbl}
{\colortbl;\red255\green255\blue255;}
\paperw11906\paperh16838\margl576\margr576\margb576\margt576\vieww11906\viewh16838\viewkind1\viewscale100
}
  • 上記コードをテキストエディットにコピーする。(もし半角¥になっていたら、半角\に置き換える必要あり)
  • 標準テキストとして、ファイル名.rtf として保存する。(拡張子を表示する設定にして.txtを.rtfに変更した)
  • 保存できたら一旦書類ウィンドウを閉じる。
  • 保存したファイル名.rtf ファイルをテキストエディットで開けば、
  • 余白1cmのリッチテキスト書類の出来上がり。

\paperwXXXX\paperhYYYY 用紙幅XXXXと用紙高さYYYYの設定(用紙サイズ)
\viewwXXXX\viewhYYYY ウィンドウ幅XXXXとウィンドウ高さYYYYの設定(ウィンドウサイズ)
\viewkind1 1:ページサイズで表示/0:ウィンドウサイズで表示
\viewscale100 ウィンドウ右下の表示倍率100%で表示
\marglXX\margrXX\margbXX\margtXX 左余白XX 右余白XX 下余白XX 上余白XX

    • XXXXやXX、YYYYの単位はTwip(トゥイップ)
    • 1インチ(2.54cm) = 1440Twip
    • 1cm = 1440 / 2.54 = 566.929143 ≒ 567Twip
ちゃんと知りたいテキストエディット.appとリッチテキストの使い方 - ザリガニが見ていた...。

リッチテキストの仕様に従って、好みのページ余白で設定したリッチテキスト書類を雛形として保存しておけば、あとで活用できる。...はずだったのだが、実際に使う時になって、若干ページ余白を変更したくなった*1りもして、結局もう一度計算し直して、雛形を追加するなんてことが何度か続いた。

それなら、好みの余白設定を入力したら、対応するリッチテキスト書類を出力するようにしてしまおう!と思い立ち、いつものAppleScriptでやってみた。

開発環境

AppleScript


set margin to input_margin()
tell application "TextEdit"
activate
make new document
set text of front document to my rtf_setting(margin) set tmp_path to (path to temporary items as text) & "rtf_margin_setting.scpt.rtf"
set doc_name to "余白設定 " & my in_text(margin) & ".rtf"
close front document saving yes saving in tmp_path
open file (tmp_path) set name of front document to doc_name
end tell

on input_margin() set margin to false
repeat until margin
set my text item delimiters to {",", " "} "余白をmmで設定してください。
" & " 例:5 ... 上 5 下 5 左5 右5
" & " 例:20,5 ... 上20 下20 左5 右5
" & " 例:20,10, 5,0 ... 上20 下10 左5 右0
" & return & "先頭に+を付けると、ヘッダー・フッターを印刷する余白を確保します。(例:+5、+20,10,5,0)"
display dialog result default answer "" buttons {"キャンセル", "OK"} default button 2 with icon note
set margin to result's text returned's text items
set my text item delimiters to ""
if margin's number = 1 then
twip(margin's item 1, margin's item 1, margin's item 1, margin's item 1) & {margin} else if margin's number = 2 then
twip(margin's item 1, margin's item 1, margin's item 2, margin's item 2) & {margin} else if margin's number = 4 then
twip(margin's item 1, margin's item 2, margin's item 3, margin's item 4) & {margin} else
beep
set margin to false
end if
end repeat
end input_margin

on rtf_setting(margin) set rtf1 to "{\\rtf1\\mac\\ansicpg10001\\cocoartf824\\cocoasubrtf470" & return
set end_rtf1 to "}"
set paperw to {"\\paperw", 11905} --210mm--A4
set paperh to {"\\paperh", 16838} --297mm--A4
set margl to {"\\margl", margin's item 3} set margr to {"\\margr", margin's item 4} set margt to {"\\margt", margin's item 1} set margb to {"\\margb", margin's item 2} set vieww to {"\\vieww", 999999} set viewh to {"\\viewh", 999999} set viewkind to {"\\viewkind", 1} set viewscale to {"\\viewscale", 100} set page_setting to paperw & paperh & margl & margr & margt & margb & vieww & viewh & viewkind & viewscale & return as text
rtf1 & page_setting & end_rtf1
end rtf_setting

on in_text(margin) my join(margin's item 5, "_") end in_text

on twip(t, b, l, r) set twip_margin to {twip_form(t), twip_form(b), twip_form(l), twip_form(r)} if t's item 1 is "+" and twip_margin's item 1 < 576 then set twip_margin's item 1 to 576
if b's item 1 is "+" and twip_margin's item 2 < 288 then set twip_margin's item 2 to 288
twip_margin
end twip

on twip_form(mm) round (mm as number) * 1440 / 25.4 rounding down
end twip_form

on join(sourceList, delimiter) set oldDelimiters to my text item delimiters
set AppleScript's text item delimiters to {delimiter} set theText to sourceList as text
set my text item delimiters to oldDelimiters
return theText
end join

使い方

  • 上記スクリプトを、~/Library/Scripts/Applications/TextEdit/新規(余白設定あり).scptとして保存した。
    • ~/Library/Scripts/Applications/TextEditフォルダは、追加した。
  • AppleScript エディタの環境設定...を開いて、以下のように設定した。

  • これで、テキストエディット利用時、スクリプトメニューの上位に優先表示される。

  • 実行してみる。

  • 余白0を設定すれば、ページ余白は完全に消えた。


できた!

*1:ページ余白が小さ過ぎると、ヘッダー・フッターを追加した時に印刷領域からはみ出して、印刷されない部分が発生してしまった。