TOP > blog > 16.インデザインスクリプト 初級講座(12) PDFファイルの取り込み
インデザインスクリプト
2016/02/09

16.インデザインスクリプト 初級講座(12) PDFファイルの取り込み

管理者用
blog

前回の、初級講座(11)の画像の取り込みの項で、PDFファイル kawasemi.pdf を作成しました。

このPDFファイルを使ってPDFファイルの読み込み方法を紹介します。

PDFファイルも画像の取り込みと同じで方法で可能ですが、複数ページの場合は、ページを指定して取り込む必要があります。

今回は、ページを指定するためのダイアログの作成も合わせて紹介します。

入力フォームは、エクセルでも出来ますが、今回は、インデザインのフォーム機能を使用しました。

A4横サイズのPDFファイルを 1/4に縮小して、同じページ2枚をA4のインデザインドキメントの左上と右下に読み込みます。

 

フォームをスタートします。

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

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

 NAVI_VBA_06_001.JPG

 

 NAVI_VBA_12_000.JPG

 NAVI_VBA_12_001.JPG

 

ページ番号のインプット用ダイヤログを作成します。

NAVI_VBA_12_002.JPG

単純なインプットボックスです。

PDFファイルの読み込み開始ページと、最終ページを入力します。



MsgBox "ページ指定ダイアログ作成"

'stpege = InputBox("PDF読みとり開始ページ", "PDFスタートページ", "1")
'edpege = InputBox("PDF読取り終わりページ", "PDF終了ページ", "5")

Set myDialog = myInDesign.Dialogs.Add
myDialog.CanCancel = True
myDialog.Name = "PDFデータ取込みページ入力" '

Set myDialogColumn = myDialog.DialogColumns.Add

Rem 別のボーダーパネルを作成します。
Set myBorderPanelA = myDialogColumn.BorderPanels.Add

Rem ボーダーパネル内部のダイアログ列を作成します。
Set myTempDialogColumnA = myBorderPanelA.DialogColumns.Add
Set myStaticTextA = myTempDialogColumnA.StaticTexts.Add
myStaticTextA.StaticLabel = "PDF取込み開始ページ:"

Rem ボーダーパネル内部の別のダイアログ列を作成します。
Set myTempDialogColumnA = myBorderPanelA.DialogColumns.Add
Set myPageNoFieldA = myTempDialogColumnA.RealEditboxes.Add
myPageNoFieldA.EditValue = 1

Rem 終了ページのボーダーパネルを作成。
Set myBorderPanelB = myDialogColumn.BorderPanels.Add
Rem ボーダーパネル内部のダイアログ列を作成します。
Set myTempDialogColumn = myBorderPanelB.DialogColumns.Add
Set myStaticText = myTempDialogColumn.StaticTexts.Add
myStaticText.StaticLabel = "PDF取込み終了ページ:"

Rem ボーダーパネル内部の別のダイアログ列を作成します。
Set myTempDialogColumn = myBorderPanelB.DialogColumns.Add
Set myPageNoField = myTempDialogColumn.RealEditboxes.Add
myPageNoField.EditValue = 4

myDialog.Show

 NAVI_VBA_12_003.JPG

 

 A4の1/4 のサイズのフレーム2か所に同じ画像配置します。



            myInDesign.PDFPlacePreferences.PageNumber = stpege
             
            Set myTextFrame = myDocument.Pages.Item(outpege).TextFrames.Add

            haichi_1_YS = 0
            haichi_1_XS = 0
            haichi_1_YE = 105
            haichi_1_XE = 148
            myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")

            Set myPDFset = myTextFrame.Place(myFileName) ',PDFファイル読み込み
            
            Set myTextFrame1 = myDocument.Pages.Item(outpege).TextFrames.Add

            haichi_1_YS = 105
            haichi_1_XS = 148
            haichi_1_YE = 210
            haichi_1_XE = 297
            myTextFrame1.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
            
            Set myPDFset = myTextFrame1.Place(myFileName) ',PDFファイル読み込み
, Array(-6, -20))

 

NAVI_VBA_12_004.JPG

 配置した画像は、フレームのサイズにフィットさせ縮小しました。

 


            myTextFrame.Fit idFitOptions.idContentToFrame '1668575078
            myTextFrame1.Fit idFitOptions.idContentToFrame '1668575078

 

NAVI_VBA_12_005.JPG

 PDFファイルを読み込んだ時に、今何ページを読み込んでいるかと言うのは知る必要があります。

ファイルの最終頁を読み込むと、メッセージも無く、次は、先頭ページを読みに行きます。

いつまでたってもおわりません。

そこで、次のようなスクリプトが必要になります。

 

            Set myPDFset = myPDFset.Item(1) '読み取りページ番号を取得
            actpag = myPDFset.PDFAttributes.PageNumber
            'MsgBox actpag

            Rem PDFファイルの最終頁を超えて読み込みをした時点で読み取りを終わらすため
            If stno1 = 1 Then
            
                stno1 = 0
            Else
                If actpag = 1 Then
                     Exit For
                End If
                
            End If

   


 スクリプト全体

 

Option Explicit

Private Sub CommandButton1_Click()

Dim myInDesign, myDocument, myTextFrame, myTextFrame1
Dim haichi_1_YS, haichi_1_XS, haichi_1_YE, haichi_1_XE
Dim filde_jyusyo1, filde_jyusyo2, filde_jyusyo3, filde_jyusyo4
Dim Me_size_GH, Me_size_GY
Dim dir_mei, INDD_name
Dim mov_XS, mov_YS
Dim FrameZahyo
Dim myTabStop1, myTabStop2
Dim myStartCharacter, myEndCharacter
Dim gazFile, myFileName
Dim edpege, stpege, myPDFset, actpag
Dim myDialog, myDialogColumn, myTextEditField, myPageNoField, myPageNoField2, myString, myPointSize
Dim myBorderPanel, myTempDialogColumn, myStaticText
Dim myBorderPanelA, myTempDialogColumnA, myStaticTextA, myPageNoFieldA, outpege, myBorderPanelB, stno1

Rem 次の行は、インデザインを起動します。
Set myInDesign = CreateObject("InDesign.Application.CS4_J") 'インデザインを起動する


MsgBox "ドキュメントを開きます!"

dir_mei = "W:\NAVI_VBA"

INDD_name = dir_mei & "\テストサンプル.indd"

Set myDocument = myInDesign.Open(INDD_name)

With myDocument.DocumentPreferences

        .PageHeight = "210mm"
        .PageWidth = "297mm"
        .FacingPages = False

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

         Rem 裁ち落とし
        .DocumentBleedBottomOffset = "3p"
        .DocumentBleedTopOffset = "3p"
        .DocumentBleedInsideOrLeftOffset = "3p"
        .DocumentBleedOutsideOrRightOffset = "3p"

        Rem 印刷可能領域
        .SlugBottomOffset = "20mm"
        .SlugTopOffset = "20mm"
        .SlugInsideOrLeftOffset = "20mm"
        .SlugRightOrOutsideOffset = "20mm"

End With

MsgBox "ページ指定ダイアログ作成"

'stpege = InputBox("PDF読みとり開始ページ", "PDFスタートページ", "1")
'edpege = InputBox("PDF読取り終わりページ", "PDF終了ページ", "5")

Set myDialog = myInDesign.Dialogs.Add
myDialog.CanCancel = True
myDialog.Name = "PDFデータ取込みページ入力" '

Set myDialogColumn = myDialog.DialogColumns.Add

Rem 別のボーダーパネルを作成します。
Set myBorderPanelA = myDialogColumn.BorderPanels.Add

Rem ボーダーパネル内部のダイアログ列を作成します。
Set myTempDialogColumnA = myBorderPanelA.DialogColumns.Add
Set myStaticTextA = myTempDialogColumnA.StaticTexts.Add
myStaticTextA.StaticLabel = "PDF取込み開始ページ:"

Rem ボーダーパネル内部の別のダイアログ列を作成します。
Set myTempDialogColumnA = myBorderPanelA.DialogColumns.Add
Set myPageNoFieldA = myTempDialogColumnA.RealEditboxes.Add
myPageNoFieldA.EditValue = 1

Rem 終了ページのボーダーパネルを作成。
Set myBorderPanelB = myDialogColumn.BorderPanels.Add
Rem ボーダーパネル内部のダイアログ列を作成します。
Set myTempDialogColumn = myBorderPanelB.DialogColumns.Add
Set myStaticText = myTempDialogColumn.StaticTexts.Add
myStaticText.StaticLabel = "PDF取込み終了ページ:"

Rem ボーダーパネル内部の別のダイアログ列を作成します。
Set myTempDialogColumn = myBorderPanelB.DialogColumns.Add
Set myPageNoField = myTempDialogColumn.RealEditboxes.Add
myPageNoField.EditValue = 4


myDialog.Show

Rem テキストフレームサイズを設定

myFileName = dir_mei & "\kawasemi.pdf"

Set myTextFrame = myDocument.TextFrames.Add

    'edpege = 5
    
    stpege = CInt(myPageNoFieldA.EditValue)
    edpege = CInt(myPageNoField.EditValue)
    
    stno1 = 0
    If stpege = 1 Then
        stno1 = 1
    End If
    
    For outpege = 1 To edpege - stpege + 1 Step 1
    
            myInDesign.PDFPlacePreferences.PageNumber = stpege
             
            Set myTextFrame = myDocument.Pages.Item(outpege).TextFrames.Add

            haichi_1_YS = 0
            haichi_1_XS = 0
            haichi_1_YE = 105
            haichi_1_XE = 148
            myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")

            Set myPDFset = myTextFrame.Place(myFileName) ', Array(-6, -20))
            
            Set myTextFrame1 = myDocument.Pages.Item(outpege).TextFrames.Add

            haichi_1_YS = 105
            haichi_1_XS = 148
            haichi_1_YE = 210
            haichi_1_XE = 297
            myTextFrame1.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
            
            Set myPDFset = myTextFrame1.Place(myFileName) ', Array(-6, -20))

            Set myPDFset = myPDFset.Item(1) '
            actpag = myPDFset.PDFAttributes.PageNumber
           
            If stno1 = 1 Then
            
                stno1 = 0
            Else
                If actpag = 1 Then
                     Exit For
                End If
                
            End If

            myDocument.Pages.Add

            myTextFrame.Fit idFitOptions.idContentToFrame '1668575078
            myTextFrame1.Fit idFitOptions.idContentToFrame '1668575078

            'idContentToFrame = 1668575078 (&H63746F66)
            'idApplyFrameFittingOptions = 1634100847 (&H6166666F)
            'idCenterContent = 1667591779 (&H63656E63)
            'idFillProportionally = 1718185072 (&H66696C70)
            'idFrameToContent = 1718906723 (&H66746F63)
            'idProportionally = 1668247152 (&H636F6E70)
            
             stpege = stpege + 1
    Next
    myDocument.Pages.Item(-1).Delete
    myDialog.Destroy
    
End Sub
    

 

 

関連記事