Illustrator

【Illustrator】指定したPDFプリセットでAIファイルをPDFに一括変換するVBScript

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

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP