VBAメモ:PDFファイル出力(Acrobat)

Acrobatを利用したPDFファイルの出力をするには
単純にAdobe PDFで印刷処理を行えば簡単に出力できます。

しかし、この場合はAdobe PDFの印刷設定で指定したパスにしか出力できません。
PDFファイルを別々の出力先を指定したい場合は、PdfDistillerを使用する必要があるようです。


'PDFプリンタ名称
Const c_PDFPrinterName As String = "Adobe PDF"

Sub Main()
    Dim wPsPath As String, wPdfPath As String
    '-------------------------
    '出力先を指定
    wPsPath = "C:¥Test.ps"
    wPdfPath = "C:¥Test.pdf"
    
    'Adobe PDFのポート検索(環境によりポートが違う為)
    On Error Resume Next
    For i = 0 To 99
        Application.ActivePrinter = c_PDFPrinterName & " on Ne" & Format(i, "00") & ":"
        If Err.Number = 0 Then
            Exit For
        Else
            Err.Clear
        End If
    Next i
    On Error GoTo 0
    
    'Adobe PDFが設定できなかった場合は終了
    If Not Application.ActivePrinter Like c_PDFPrinterName & "*" Then
        Exit Sub
    End If
    
    '-------------------------
    
    'A択しているシートをPSファイルとして出力
    Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, preview:=False, _
                                printtofile:=True, collate:=True, prtofileName:=wPsPath

    '-------------------------
    
    'PSファイルをPDFファイルに変換
    Set wPdfDis = CreateObject("PdfDistiller.PdfDistiller.1")
    wPdfDis.FileToPDF wPsPath, wPdfPath, vbNullString
    Set wPdfDis = Nothing
End Sub

上記のコードでは「Sheet1」「Sheet2」「Sheet3」の3シートを1ファイルにまとめて出力しています。
1シート1ファイルで出力したい場合は、1シート毎に処理を行う必要があります。

なお、今回は「Adobe Acrobat 8 Standard」と「Excel2003」を使用した例になっています。
バージョンによってはコーディング方法が変わるかもしれません。
Word等の他のOfficeの場合は、PrintOut()の部分を変えれば動作するかと思います。

以下に間単に説明を記載しておきます。



PDFプリンタ名称
Const c_PDFPrinterName As String = "Adobe PDF"
○AcrobatでのPDF出力はAdobe PDFという仮想プリンタを指定して行います。
 Adobe PDFは環境によって「Adobe PDF(2)」等、名前が違うことがあります。



プリンタの一覧画面にある名称を設定してください。


Adobe PDFのポート検索(環境によりポートが違う為)
    On Error Resume Next
    For i = 0 To 99
        Application.ActivePrinter = c_PDFPrinterName & " on Ne" & Format(i, "00") & ":"
        If Err.Number = 0 Then
            Exit For
        Else
            Err.Clear
        End If
    Next i
    On Error GoTo 0

○プリンタを指定する場合、プリンタ名の他にポート番号を指定する必要がありますが、
 ポート番号は環境によって異なる為、検索の処理を入れています。
 ポート番号を一発で判別する方法がないらしいので、エラーの有無で無理矢理判断しています;


A択しているシートをPSファイルとして出力
    Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, preview:=False, _
                                printtofile:=True, collate:=True, prtofileName:=wPsPath

○Adobe PDFをアクティブプリンタに指定したらPrintOut()で印刷処理を行います。
 「printtofile」を指定することによって「prtofileName」に指定したパスにPSファイルが出力されます。

 ちなみにここを未指定にすると、Adobe PDFの印刷設定で指定した場所にPDFファイルが出力されます。


PSファイルをPDFファイルに変換
    Set wPdfDis = CreateObject("PdfDistiller.PdfDistiller.1")
    wPdfDis.FileToPDF wPsPath, wPdfPath, vbNullString
    Set wPdfDis = Nothing

○最後に、PdfDistillerでPSファイルをPDFファイルに変換します。
 PDFファイル出力された後にPSファイルとlogファイルが残るので、
 不要であればKill()で削除しましょう。(設定方法があるかもしれませんが)


●以上のコードでPDF出力は可能なのですが、エラーが出て出力ができない場合があります。



 この場合は、Adobe PDFプリンタの印刷設定の「システムのフォントのみ使用し、
 文書のフォントを使用しない」のチェックを外す必要があるようです。



コメント
コメントする








    
この記事のトラックバックURL
トラックバック