前回の記事で、Illustratorに登録されたPDFプリセットを列挙するスクリプトを紹介しましたが、今回はPDFプリセットを指定して、AIファイルをPDFに一括変換するスクリプトを紹介します。
まずは1ファイルでの処理ですが、今回のスクリプトもIllustratorが起動済みであることを前提としているので、Illustratorの起動からスクリプトに組み込む場合は、下記記事のコードをご参照ください。
Option Explicit
Dim appAi
Set appAi = Nothing '初期化
On Error Resume Next
Set appAi = GetObject(, "Illustrator.Application")
On Error GoTo 0
If appAi Is Nothing Then
MsgBox "Illustratorを起動した状態でスクリプトを実行してください。", vbExclamation + vbSystemModal
Wscript.Quit
End If
AiToPdf appAi, _
"[最小ファイルサイズ]", _
"C:\wk\Sample.ai", _
"C:\wk\Sample.pdf"
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
Private Sub AiToPdf(ByVal appAi, ByVal preset_name, ByVal ai_path, ByVal pdf_path)
'AIファイルを指定したPDFプリセットでPDF変換
Dim opt
Const aiDoNotSaveChanges = 2
Set opt = CreateObject("Illustrator.PDFSaveOptions")
opt.PDFPreset = preset_name 'PDFプリセットの指定
'下記処理中にオートメーションエラーが発生した場合、
'一度手動でPDF保存した後、再度スクリプト実行
With appAi
With .Open(ai_path)
.SaveAs pdf_path, opt
.Close aiDoNotSaveChanges
End With
End With
End Sub
上記コードでは、Illustrator.ApplicationオブジェクトのOpenメソッドでAIファイル(Documentオブジェクト)を開き、SaveAsメソッドを使ってPDFファイルとして保存をしています。
その際、SaveAsメソッドの第2引数によって、PDFプリセットを含めた様々なオプションを指定することができます(PDFSaveOptions)。
個人的には、PDFSaveOptionsで細かくオプション指定するよりは、事前にPDFプリセットを用意しておいて、それをPDFSaveOptions.PDFPresetプロパティで指定するのが楽だと思います。
なお、このスクリプトも環境によってはオートメーションエラーが発生する可能性があるため、エラーが発生した場合には、一度手動でAI→PDF保存を行った後、改めてスクリプトを実行してください。
指定したフォルダ内のAIファイルを指定したPDFプリセットで一括変換するスクリプト
1ファイルでのPDF変換が確認できたら、次は複数ファイルの一括処理です。
Option Explicit
Dim appAi
Dim fol, f
Dim fpath
Set appAi = Nothing: Set fol = Nothing '初期化
On Error Resume Next
Set appAi = GetObject(, "Illustrator.Application")
On Error GoTo 0
If appAi Is Nothing Then
MsgBox "Illustratorを起動した状態でスクリプトを実行してください。", vbExclamation + vbSystemModal
Wscript.Quit
End If
Set fol = CreateObject("Shell.Application") _
.BrowseForFolder(0, "AIフォルダ選択", &H10, 0)
If fol Is Nothing Then Wscript.Quit
fpath = fol.Self.Path
With CreateObject("Scripting.FileSystemObject")
If Not .FolderExists(fpath) Then Wscript.Quit
For Each f In .GetFolder(fpath).Files
Select Case LCase(.GetExtensionName(f.Path))
Case "ai" 'AIファイルのみ処理
'AIファイルと同じフォルダにPDFファイル出力
AiToPdf appAi, _
"[最小ファイルサイズ]", _
f.Path, _
AddPathSeparator(.GetParentFolderName(f.Path)) & .GetBaseName(f.Path) & ".pdf"
End Select
Next
End With
MsgBox "処理が終了しました。", vbInformation + vbSystemModal
Private Sub AiToPdf(ByVal appAi, ByVal preset_name, ByVal ai_path, ByVal pdf_path)
'AIファイルを指定したPDFプリセットでPDF変換
Dim opt
Const aiDoNotSaveChanges = 2
Set opt = CreateObject("Illustrator.PDFSaveOptions")
opt.PDFPreset = preset_name 'PDFプリセットの指定
'下記処理中にオートメーションエラーが発生した場合、
'一度手動でPDF保存した後、再度スクリプト実行
With appAi
With .Open(ai_path)
.SaveAs pdf_path, opt
.Close aiDoNotSaveChanges
End With
End With
End Sub
Private Function AddPathSeparator(ByVal s)
If Right(s, 1) <> ChrW(92) Then s = s & ChrW(92)
AddPathSeparator = s
End Function

メインの処理は1ファイルのときと同じですが、Shell.BrowseForFolderメソッドでフォルダを選択し、FileSystemObject.GetExtensionNameメソッドによってAIファイルのみを対象として変換処理を行っている点が異なります。
Illustratorをスクリプトから操作する強みは、上記のように手作業で行うのは手間がかかる定形作業を自動化できる点にあると思います。
そういったわけで、Illustratorで決まった作業を毎日ポチポチ手作業されている方は、スクリプトによる自動化も考えてみてはいかがでしょうか?


















この記事へのコメントはありません。