Web excel.puremis.net
tip  エクセルからPDFファイルを印刷する

- Last updated:Sat, Jul 22, 2006 -

エクセルからAdobe社のアクロバットのPDFファイルを印刷したい場合があります。 最初はアクロバットリーダーをエクセルからコントロールする方法がわからなかったので、インターネットエクスプローラーをリレーオブジェクトとしてPDFを表示させ、ExexWBメソッド(英語)を使って印刷ダイアログを表示させていました。

下記のコードを実行すると、印刷のダイアログがオープンします。
  • Adobe社のアクロバットリーダーがインストールされている必要があります。
  • VBEのツール-参照設定よりMicrosoft Internet Controlsを参照設定してください。


下記のコードを標準モジュールに置いてください。

Sub Print_PDF_Test1()
'Microsoft Internet Controlsへの参照設定が必要です。
'テスト用のパスです。ローカルのパスを指定してください。
    Const cnsPDF_FILE As String = _
          "http://www.puremis.net/excel/cellmasters.pdf"
    Dim ObjIE As New InternetExplorer
    ObjIE.Navigate cnsPDF_FILE
    ObjIE.Visible = True
    Do While ObjIE.Busy = True: DoEvents: Loop
    '下記のコードはアクロバットの印刷ダイアログを表示します。
    ObjIE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT
End Sub


ただし、ユーザーにダイアログを見せる必要のない場合や、ページ数を指定して印刷を行いたい場合は、上記の方法ではダイアログが表示されたところでストップしてしまうので私の「自動的に必要な部数を印刷する」という希望には会いませんでした。

そこで、アドビ社のウェブサイトを調べてみると、正式にはサポートされていないが、Windows上からアクロバットリーダーを操作できるコマンドラインが存在することがわかりました。

以下は公開されているDeveloperFAQ.pdf(日本語版)に記載されている内容のです。

Windows 上のコマンドラインから Acrobat および Adobe Reader を使用するにはどうすればいいですか?

コマンドラインはサポートはされていませんが、一部の開発者には役立っています。これらのコマンドに関するマニュアルは存在しておらず、次の説明が唯一のものです。 コマンドラインからAcrobat および Adobe Reader を使用して、PDF ファイルを表示および印刷することができます。


AcroRd32.exe filename — Adobe Reader を実行して、ファイルを表示します。
コマンドラインのその他のオプションは、次のとおりです。


オプション意味
/nAcrobat アプリケーションが現在開いていても、別のインスタンスを起動します。
/sスプラッシュ画面を表示せずに Acrobat を開きます。
/oファイルを開くダイアログを表示せずに Acrobat を開きます。
/hAcrobat を非表示モードで開きます


AcroRd32.exe /p filename — Adobe Reader を実行して、ファイルを印刷します。
AcroRd32.exe /t path printername drivername portname — Adobe Reader を起動し、Acrobat の印刷ダイアログボックスを表示せずにファイルを印刷したのち、Adobe Readerを終了します。
/t オプションの 4 つのパラメータは、path、printername、drivername、およびportname と解釈されます(すべて文字列)。
  1. path — パス
  2. printername — プリンタ名。
  3. drivername — プリンタドライバ名。プリンタのプロパティを表示したときに使用可能ドライバボックスに表示されるドライバ名です。
  4. portname — プリンタのポート名。portname の中に「/」文字を使用することはできません。この文字が含まれている場合は、そのプリンタのデフォルトのポートに出力されます。
Acrobat を使用する場合は、コマンドラインの AcroRd32.exe を Acrobat.exe に置き換えてください。

私はオプション/tを試しましたが、自動的にプロセスは終了しないようです。
用紙の設定に関してはAcrobat Readerに任せることにしました。 プログラムを実行する前に、AcrobatのPrintダイアログで (1)ページの拡大/縮小なしに設定し、(2)PDFのサイズに合わせて用紙を選択にチェックをつけておきます。 これで、用紙サイズが自動的に選択されるようになります。

下記のサンプルプログラムはデフォルトプリンタでPDFファイルを3部印刷します。試してみてください。 ここではプリンタはMicrosoft Office2003に付属しているMicrosoft Office Document Image Writerを使用しています。





下記のコードを標準モジュールに置いてください。

 
Sub PrintingTest()
    Dim sFileName As String
    '適切なPDFのファイル名に変更してください。
    sFileName = "C:\V080506.pdf"
    '3部印刷します。
    PrintPDF2 sFileName, 3
    MsgBox "Data has been sent. " & vbLf & _
           "Please close the instanse of Acrobat Reader after printed."
End Sub

 
 
Sub PrintPDF2(ByVal FileName As StringOptional Copies As Long = 1)
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'++ コマンドラインを用いたPDFファイルの印刷.
'++ Written by Masaru Kaji aka Colo
'++ Syntax
'++ FileName : 必須。ファイル名を文字列で指定してください。(ドライブ名、フォルダ名も含めてください。)
'++ Copies : オプション:印刷部数をLong形式で指定してください。省略すると1部のみ印刷されます。
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    Const PrinterName As String = """Microsoft Office Document Image Writer"""
    Const DriverName As String = """Microsoft Office Document Image Writer"""
    Const PortName As String = """Microsoft Office Document Image Writer port:"""
    Dim cnt As Long
 
    Set myShell = CreateObject("WScript.Shell")
    For cnt = 1 To Copies
        myShell.Run ("AcroRd32.exe /t " & FileName & " " & PrinterName & " " & DriverName & " " & PortName)
    Next
End Sub
 
 
 







  All contents Copyright ©,Colo's Excel Junk Room  Reloaded  counter  times since June.1st.2002