インデザイン 溢れ処理スクリプト
管理者用
今日は、インデザインの溢れ処理スクリプトを紹介します。
スクリプト自身は、それほど難しいものではなく、三栄NAVIの中で紹介しているものを集めて構築してます。
スクリプトは、次の三つの部分に分ける事が出来ます。
1、ドラック&ドロップで処理ファイルの読み込み
処理対象のインデザインファイルを、.vbs ファイルにドラックした時の受付処理の部分です。
この部分は、三栄NAVIの中で、作業の効率化をキーワードに幾つか紹介してますので、参考にしてください。
2、全てのページ、テキストフレームを対象に処理をループする部分です。
インデザインファイルを全ページを対象に、何か実行したい等の時に、使えるループ処理です。
3、溢れ処理をする部分です。
テキストフレームのオーバーフローを調査し、溢れているフレームのフォントに長体/平体をかけます。
テキストフレームが、縦組/横組を判断し、縦組みの場合は、平体を 横組みの場合は、長体をかけます。
溢れ処理には、多くの対処方法が考えられます。
今回は、文字に、長体/平体をかけて対応してますが、他にも
・フォントサイズを小さく
・文字間を狭く
・テキストボックスを広げる
等の方法が考えられます。
また、その組み合わせを使う等、最後に紹介しているスクリプトファイルを改善して見てください。
使用方法
・スクリプトファイル Indd TextBoxOVF.vbs ファイルに、溢れ処理をしたいインデザインファイル .indd をドラックします。
vbsファイルは、ディスクトップにおいておくとドラックがやりやすいと思います。
図の例では、ディスクトップ上に Indd TextBoxOVF.vbs ファイルを置いてます。
・ ドラックすると、ドラックしたファイル名を表示するようにしてます。
⇒ OK
・ インデザインが起動します。
・ ドラッグしたファイルが開き、続けて 溢れ処理を全ページに対し実行します。
・全ページの処理が終了すると、別名で保存します。
ドラックしたファイルと同じ場所に保存します。
また、ファイル名は、元のファイル名に、NEW_NEW 追加してます。
・ 実行結果
縦書きのフレームに対しては、平体を
横書きのフレームに対しては、長体をかけて溢れ処理を行ってます。
スクリプト紹介
スクリプトのファイル名は任意です。・・・・ .vbs 拡張子を .vbs
私の場合は Innd TextBox.vbs にしてます。
以下の三つのブロックを、順番に.vbsにコピーして使用するか、
又、ファイルをダウンロードして使用してください。
⇒ ダウンロード
ZIPファイルを解凍して、 .txt の 拡張子を .vbs に変更して使用します。
スクリプトに手を加えて、それぞれ改善して見てください。
ドラック&ドロップで処理部分
Rem 溢れ処理スクリプト 2019-01-11 Indd TextBox OVF.vbs
Rem 溢れ処理をしたいファイルを、このファイルにドラックしてください。
Rem インデザインが開いて処理を実行します。
Rem 実行においては、ご自身の判断で行ってください。 結果については、責任持てませんのでご了解ください。
'============================
Set objArgs = WScript.Arguments
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWSHShell = CreateObject("Shell.Application")
select case objArgs.Count
case 0
msgbox "インデザインファイルをドラック&ドロップしてください"
case 1
myFileName = WScript.Arguments(0)
Set objFiles = objFSO.GetFile(myFileName)
if lcase(right(myFileName,4)) = "indd" then
vret = msgbox("このinddファイル(" & objFiles.name & ")で溢れ処理を実行しますか?",vbokcancel)
if vret = vbok then
Rem ここに処理を記述===========================
Call Indd_File_In(objFiles)
Rem ここ迄に処理を記述==========================
else
msgbox "中止しました。"
end if
else
msgbox "ドロップしたファイルは(" & objFiles.name & ")",,"inddファイルでは無いようです。"
end if
Set objFiles = Nothing
case else
msgbox "ドラック&ドロッは、1ファイルだけにして下さい。"
end select
Set objParentFolder = Nothing
Set objArgs = Nothing
Set objFSO = Nothing
WScript.Quit
'=============================================================
全ページ/テキストフレームを対象にループ
Sub Indd_File_In(objFiles)
INDD_name = objFiles
Rem ***************************************************************************
Rem インデザインの起動
Dim myIndesign
Set myIndesign = CreateObject("InDesign.Application")'バージョンによって記述を変える必要あり。
Rem ***************************************************************************
Dim myDocument
Set myDocument = myIndesign.Open(INDD_name)
p_cunt = myDocument.Pages.Count 'ドキメントのページ数
For page_no = 1 To p_cunt Step 1 '全ページの処理
Set myPage = myDocument.Pages.Item(page_no)
Textf_cunt = myPage.TextFrames.Count 'ページに含まれるテキストフレーム数
For texframe_no = 1 To Textf_cunt Step 1 '全フレームの処理
Set myTextFrame = myPage.TextFrames.Item(texframe_no)
Rem ===ここからテキストフレームに対する処理を記述します。=================
Rem このスクリプトの場合、溢れ処理を関数 Ovf_Exc を実施します。
AA = Ovf_Exc(myTextFrame)
Rem ===ここまでテキストフレームに対する処理を記述します。=================
'=================================================================
Next
Next
folder_kaiso = left(objFiles.path , len(objFiles.path) - len(objFiles.name) - 1) 'フォルダーのパス
myFileNameNew = objFiles.name'ファイル名
myFileNameNew = Replace(myFileNameNew, ".indd", "_New_New.indd")
myFileNameNew = folder_kaiso & "\" & myFileNameNew
myDocument.Save myFileNameNew '書き出し
'myDocument.close'ファイルを閉じる
End Sub
溢れ処理部分
Rem テキストフレーム溢れ処理関数
Function Ovf_Exc(myTextFrame)
Rem テキストフレームの縦書き、横書き 判断のためのプロパティー調べる。
Tateyoko = myTextFrame.ParentStory.StoryPreferences.StoryOrientation
Font_OVF = 0
moji_Hscale = 100
Do While Font_OVF = 0
If myTextFrame.Overflows Then
moji_Hscale = moji_Hscale - 5
if Tateyoko = 1986359924 Then
myTextFrame.ParentStory.VerticalScale = moji_Hscale
else
myTextFrame.ParentStory.HorizontalScale = moji_Hscale
end if
Else
Font_OVF = 1
Exit Do
End If
Loop
Ovf_Exc = moji_Hscale
End Function