インデザインスクリプト
2016/02/09
15.インデザインスクリプト 初級講座(11) ファイルの読取り、画像の配置PDF出力
管理者用画像の取り込み方法は先に紹介しました。
今回は、画像ファイル名のリストを読み込んで、その画像を取り込む例を使用して、
ファイルの読み込み例を紹介します。
また、取り込んだドキュメントはPDFファイルに書き出す事としました。
スクリプトで自動化を行う場合、ファイルの操作は必須となります。
ファイルを操作するために、FileSystemObject(FSO)ファイルシステムオブジェクトを使って行います。
その為に、参照設定で MicrosoftScripting Runtime に参照にチェックを入れておいてください。
用意した画像データのリストを作成しておいてください。
エクセルのリストで用意したものをテキストファイル(TABくぎり)モードで保存してください。
カンマ区切りのCSVファイルでも良いのですが、データの中にカンマが使われているケースが多く不具合の出る事があります。
私は、比較的安全なタブコードの区切りのテキストを使用してます。
使用した画像ファイルが必要な方は、ZIPファイルにまとめましたのでご利用ください。 ⇒ こちらからダウンロード
ボタンのクリックイベントに、ページの最後に記述している スクリプト全体を記入してください。コピーしても問題ありません。
ボタンのクリックで、スクリプトがスターとします。
スクリプトを起動すると、画像のリストファイルを一行づつ読み込みます。
If lin_cunt = 0 Then
strValue = objFile.ReadLine '1行目取り込み s先頭行のタイトル行の読み飛ばし
strValue = objFile.ReadLine '2行目取り込み
lin_cunt = lin_cunt + 1
Else
strValue = objFile.ReadLine '1行取り込み
lin_cunt = lin_cunt + 1
End If
ファイルをオープン、クローズのテンプレート
'***********************************************************************
FilleName = "ファイル名"
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
Set objFile = objFSO.OpenTextFile(FilleName)
If Err.Number = 0 Then
'====================================
Rem データ読み込み ========
'===============================
Do While objFile.AtEndOfStream <> True
strValue = objFile.ReadLine '1行づつ読込
Rem 読み込んだデータの処理を記述
'==================================================
'==================================================
'==================================================
'==================================================
'==================================================
'==================================================
'==================================================
'==================================================
Loop
'===============================
objFile.Close
Rem ファイルクローズ後の処理を記述
'==================================================
'==================================================
'==================================================
'==================================================
Else
WScript.Echo "ファイルオープンエラー: " & Err.Description
End If
Else
WScript.Echo "エラー: " & Err.Description
End If
Set objFile = Nothing
Set objFSO = Nothing
'***********************************************************************
画像ファイルをフレームに取り込みます。
インデザインファイルを別名で保存しました。
また、 最後にPDFファイルに書き出してます。
スクリプト全体
Private Sub CommandButton1_Click()
Rem **********************************************************************************
Rem インデザインの起動
Rem **********************************************************************************
Set myInDesign = CreateObject("InDesign.Application.CC_J")
Rem **********************************************************************************
Rem *****************台紙のオープン****************************************************
Rem ドキュメントを開く==============
MsgBox "ドキュメントを開きます!"
dir_mei = "G:\NAVI_VBA"
INDD_name = dir_mei & "\テストサンプル.indd"
Set myDocument = myInDesign.Open(INDD_name)
Rem ドキュメントのサイズセット
formSizeTate = 210
formSizeYoko = 297
With myDocument.DocumentPreferences
.PageHeight = CStr(formSizeTate) + "mm"
.PageWidth = CStr(formSizeYoko) + "mm"
.FacingPages = False
'*********************************************************************************
Rem 裁ち落とし
.DocumentBleedBottomOffset = "3p"
.DocumentBleedTopOffset = "3p"
.DocumentBleedInsideOrLeftOffset = "3p"
.DocumentBleedOutsideOrRightOffset = "3p"
Rem 印刷可能領域
.SlugBottomOffset = "20mm"
.SlugTopOffset = "20mm"
.SlugInsideOrLeftOffset = "20mm"
.SlugRightOrOutsideOffset = "20mm"
End With
formSizeTateJitu = formSizeTate - 20
formSizeYokoJitu = formSizeYoko - 20
Rem ****************************************************************************************
Rem **********************ファイルのオープン 読み込み************************************
Rem ****************************************************************************************
Dim FilleName 'ファイル名前 dir_mei & "\テストサンプル.indd"
FilleName = dir_mei & "\gzFaileList.txt"
'Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
Set objFile = objFSO.OpenTextFile(FilleName)
If Err.Number = 0 Then
'====================================
Rem データ読み込み ========
'===============================
Do While objFile.AtEndOfStream <> True
If lin_cunt = 0 Then
strValue = objFile.ReadLine '1行目取り込み s先頭行のタイトル行の読み飛ばし
strValue = objFile.ReadLine '2行目取り込み
lin_cunt = lin_cunt + 1
Else
strValue = objFile.ReadLine '1行取り込み
lin_cunt = lin_cunt + 1
End If
If lin_cunt >= 2 Then
myDocument.Pages.Add 'ページ追加
End If
Rem タブコードで分解 スプリット
strValue = Split(strValue, vbTab, -1, vbTextCompare)
'MsgBox strValue(1)
Rem 2列目の画像ファイル名を選択
filde_File = strValue(1)
gazFile = dir_mei & "\" & filde_File
Rem テキストフレームのサイズと形を指定します。
Rem フレームを作成
haichi_gazo_YS = 10
haichi_gazo_XS = 10
haichi_gazo_YE = haichi_gazo_YS + formSizeTateJitu
haichi_gazo_XE = haichi_gazo_XS + formSizeYokoJitu
Set myTextFrame = myDocument.Pages.Item(lin_cunt).TextFrames.Add
myTextFrame.GeometricBounds = Array(CStr(haichi_gazo_YS) + "mm", CStr(haichi_gazo_XS) + "mm", CStr(haichi_gazo_YE) + "mm", CStr(haichi_gazo_XE) + "mm")
myTextFrame.ContentType = idContentType.idGraphicType '1735553140
Rem フレームに画像ファイルを取り込む
myTextFrame.Place (gazFile)
Rem 取り込んだ画像のサイズにフレームをフィットさせる。
myTextFrame.Fit (1718906723) '(idFrameToContent) 1718906723
Rem フレームの座標を調べる
GazoZahyo = myTextFrame.GeometricBounds
Rem フレームのサイズ幅と高さ
haba = GazoZahyo(3) - GazoZahyo(1)
Tate = GazoZahyo(2) - GazoZahyo(0)
Rem ドキュメントのサイズと読み込んだ画像サイズから、縮小率を算出
If Tate > formSizeTateJitu Then
If haba > formSizeTateJitu Then
'どっちが大きいか
If formSizeTateJitu / Tate > formSizeYokoJitu / haba Then
haba = haba * formSizeTateJitu / Tate
Tate = Tate * formSizeTateJitu / Tate
Else
haba = haba * formSizeYokoJitu / haba
Tate = Tate * formSizeYokoJitu / haba
End If
Else
haba = haba * formSizeTateJitu / Tate
Tate = Tate * formSizeTateJitu / Tate
End If
Else
If haba > formSizeYokoJitu Then
haba = haba * formSizeYokoJitu / haba
Tate = Tate * formSizeYokoJitu / haba
Else
End If
End If
Rem フレームサイズを再度ドキュメントサイズに戻しフィットさせる。
haichi_gazo_YS = 10
haichi_gazo_XS = 10
haichi_gazo_YE = haichi_gazo_YS + formSizeTateJitu
haichi_gazo_XE = haichi_gazo_XS + formSizeYokoJitu
Set myTextFrameE = myDocument.Pages.Item(lin_cunt).TextFrames.Add
Rem テキストフレームのサイズと形を指定します。
myTextFrame.GeometricBounds = Array(CStr(haichi_gazo_YS) + "mm", CStr(haichi_gazo_XS) + "mm", CStr(haichi_gazo_YE) + "mm", CStr(haichi_gazo_XE) + "mm")
'myTextFrame.ContentType = 1735553140 'idContentType.idGraphicType'
'myTextFrame.Fit (1718906723) '(idFrameToContent) 1718906723
myTextFrame.Fit idFitOptions.idContentToFrame '1668575078
Loop
objFile.Close
Rem ドキュメントを保存
myInDesign.ActiveDocument.Save dir_mei & "\カワセミフォトブック.indd"
Rem PDFファイルに書き出し
myInDesign.ActiveDocument.Export 1952403524, dir_mei & "\kawasemi.pdf", False
'myInDesign.ActiveDocument.Export 1952400720, "C:\atana_data.eps", False
'myInDesign.ActiveDocument.Export 1246775072, "C:\atana_data.jpg", False
'myInDesign.ActiveDocument.Close
Else
WScript.Echo "ファイルオープンエラー: " & Err.Description
End If
Else
WScript.Echo "エラー: " & Err.Description
End If
Set objFile = Nothing
Set objFSO = Nothing
'********************************************************************************************
End Sub