前回の記事で、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で決まった作業を毎日ポチポチ手作業されている方は、スクリプトによる自動化も考えてみてはいかがでしょうか?
この記事へのコメントはありません。