TOP > blog > インデザイン 溢れ処理スクリプト
インデザイン
2019/01/12

インデザイン 溢れ処理スクリプト

管理者用
blog

今日は、インデザインの溢れ処理スクリプトを紹介します。
スクリプト自身は、それほど難しいものではなく、三栄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

 


 

 

関連記事