TOP > blog > 15.インデザインスクリプト 初級講座(11) ファイルの読取り、画像の配置PDF出力
インデザインスクリプト
2016/02/09

15.インデザインスクリプト 初級講座(11) ファイルの読取り、画像の配置PDF出力

管理者用
blog

画像の取り込み方法は先に紹介しました。

今回は、画像ファイル名のリストを読み込んで、その画像を取り込む例を使用して、

ファイルの読み込み例を紹介します。

また、取り込んだドキュメントはPDFファイルに書き出す事としました。

スクリプトで自動化を行う場合、ファイルの操作は必須となります。

ファイルを操作するために、FileSystemObjectFSO)ファイルシステムオブジェクトを使って行います。

その為に、参照設定で MicrosoftScripting Runtime に参照にチェックを入れておいてください。

 NAVI_VBA_11_000.JPG

 

用意した画像データのリストを作成しておいてください。

エクセルのリストで用意したものをテキストファイル(TABくぎり)モードで保存してください。

カンマ区切りのCSVファイルでも良いのですが、データの中にカンマが使われているケースが多く不具合の出る事があります。

私は、比較的安全なタブコードの区切りのテキストを使用してます。

 NAVI_VBA_11_001.JPG

使用した画像ファイルが必要な方は、ZIPファイルにまとめましたのでご利用ください。 ⇒ こちらからダウンロード

  

ボタンのクリックイベントに、ページの最後に記述している スクリプト全体を記入してください。コピーしても問題ありません。

ボタンのクリックで、スクリプトがスターとします。

 NAVI_VBA_06_001.JPG

 

 NAVI_VBA_08_01.png

 

スクリプトを起動すると、画像のリストファイルを一行づつ読み込みます。

 

  
                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

'***********************************************************************

 

画像ファイルをフレームに取り込みます。

NAVI_VBA_11_003.JPG

 NAVI_VBA_11_004.JPG

 

インデザインファイルを別名で保存しました。

また、 最後にPDFファイルに書き出してます。

 NAVI_VBA_11_005.JPG

   


 スクリプト全体

 

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



 

 

関連記事