インデザインスクリプト
2016/02/09
16.インデザインスクリプト 初級講座(12) PDFファイルの取り込み
管理者用前回の、初級講座(11)の画像の取り込みの項で、PDFファイル kawasemi.pdf を作成しました。
このPDFファイルを使ってPDFファイルの読み込み方法を紹介します。
PDFファイルも画像の取り込みと同じで方法で可能ですが、複数ページの場合は、ページを指定して取り込む必要があります。
今回は、ページを指定するためのダイアログの作成も合わせて紹介します。
入力フォームは、エクセルでも出来ますが、今回は、インデザインのフォーム機能を使用しました。
A4横サイズのPDFファイルを 1/4に縮小して、同じページ2枚をA4のインデザインドキメントの左上と右下に読み込みます。
フォームをスタートします。
ボタンのクリックイベントに、ページの最後に記述している スクリプト全体を記入してください。コピーしても問題ありません。
ボタンのクリックで、スクリプトがスターとします。
ページ番号のインプット用ダイヤログを作成します。
単純なインプットボックスです。
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
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))
配置した画像は、フレームのサイズにフィットさせ縮小しました。
myTextFrame.Fit idFitOptions.idContentToFrame '1668575078
myTextFrame1.Fit idFitOptions.idContentToFrame '1668575078
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