サイトマップ

▼ サイトの紹介

このサイトはExcel VBAから、Acrobat  アプリケーションをプログラミング操作するOLE機能について解説しています。

Adobe社はこのOLE機能の事を「IAC」と表現しています。

(注意:Adobe Readerだけでは使用出来ません)

Adobe社提供のSDK資料を元にサンプルを加えて説明をしています。

サイト管理人もご覧下さい。

▼ 当サイトの使い方

当サイトをうまく使う上での手順を以下に示します。

  1. 最初に「Acrobat SDK:OLE objects and methods図を入手する」にあるオブジェクト連携図を手に入れます。出来れば印刷する方が見やすいです。1頁です。
  2. 下記の「Excel」、「Acrobat」、「ダウンロード」、「SDK」、「備考」にサッと目を通します。「その他&メモ」は特に見なくてもイイです。
  3. 自分が目的とする処理を探しながら、印刷したオブジェクト連携図を元にサイト記「Object & List」下を上からクリックしてザックリと内容を見ます。各オブジェクトのメソッドの詳細は後にして全体で何が出来て、何が出来ない(サポートされていない)かを把握します。
    Acobat OLE 以外の選択」も見て下さい。
  4. 目的が解決出来ない時は、キッパリとあきらめてAdobe社の日本語「Acrobatフォーラムで相談します。当サイトより質が高い。
  5. それでもダメなら、当サイトにコメントを入れてみます。サイト管理人がある程度、判る範囲でお答えをします。
    (お願い:管理人を「様」での呼び方はご遠慮下さい。管理人さん、で十分です。)

▼ Excel

  1. Excel からAcrobatを操作する訳
  2. Excel から PDFファイル を作成&操作出来る
  3. Excel のオブジェクトブラウザ
  4. Excel からAcrobatを起動する
  5. Excel からPDFファイルを起動表示する
  6. Excel サンプル:PDFの文書プロパティを表示する
  7. 上記7のサンプルファイルの実行エラー
  8. Excel VBA 実行エラー時のメッセージ
  1. Excel でOLEの参照設定をする
  2. Excel でOLEの参照設定をする (AFormAut の追加)
  3. Excel でOLEの参照設定をする (Stream の追加)
  4. Excel でOLEの参照設定をする (MSXMLの追加)

▼ Acrobat

  1. Acrobat SDK:OLE objects and methods図を入手する
    ここで示す図は必ず入手する必要があります。
    これが無いとオブジェクト連携が判らなく、OLE(IAC)操作が出来ません。
  2. Acrobatアプリケーションを閉じる(実は簡単に出来ない)
  3. Acrobat OLEのエラーを防ぐVBAロジック
  4. Acrobat OLE 使用上の注意事項
  5. Acrobatプログラミングにおける技術上の制約やライセンス上の制約
  6. PDFファイルを作成、及び操作する開発者に対しての注意事項
  7. Windows のコマンドラインから Acrobat や Adobe Reader を使用して印刷する方法
  8. PDFドキュメントの文書フラグとは
  9. PDF バージョンとは
  10. PDFバージョンの変化
  11. ExportTask.xml
  12. 一括で複数ファイルを処理(アクション、バッチ処理)
  13. PDF の3つのパスワード
  14. PDFのパスワードは32文字まで
  15. 印刷の問題点を解決
  16. PDF内での座標の起点
  17. Acrobatとレジストリ
  18. PDF上のテキストとその座標

▼ ダウンロード

  1. 各種サンプルのダウンロード
  2. Adobe Acrobat 9.1 SDK のダウンロード
    SDKをダウンロードしてサンプル、解説PDF,HTML等を入手する必要があります。
    Adobe Acrobat X SDK のダウンロード情報も入ってます。
  3. Adobe Acrobat 8.1 SDK のダウンロード
    この 8.1 バージョンのSDKは現時点(2013/10/03)で一般公開されてません。
    情報が入り次第、掲載します。
  4. Acrobat製品別ダウンロード先 URL
  5. AcroPDFLib.AxAcroPDF:Excel VBAサンプル(A)
  6. AcroPDFLib.AxAcroPDF:Excel VBAサンプル(B)
  7. Adobe Readerの各種バージョンのダウンロード

▼ SDK

  1. AcrobatプログラミングにおけるMenu and Toolbar Button Names 一覧
  2. PDDocのGetJsObjectのオブジェクト構造図が見当たらない
  3. Acrobat SDK:正誤表
    Acrobat SDK v8.1ドキュメントに記載ミスが有ります。
  4. Acrobatに関するSDKが Acrobat Developer Center からダウンロード出来ます。
  5. Acrobat JavaScript における「Safe Path:セーフパス」についての注意事項
  6. Acrobat SDK公開Webサイト URLの取得方法

▼ 備考

  1. JavaScriptの解説はAcrobat v7 v8 共に英語版です。しかし、旧バージョンですがコメントを頂いた方から日本語版のAcrobat JavaScript解説PDFが見つかりました。以下がそのPDFです。
    http://www.adobe.com/jp/support/products/pdfs/acrojs_j.pdf
  2. [2009/1/7] AcroExch.AVDoc:Open メソッド でバグ?を発見しました。Acrobat v8.1.3 v9.0が対象です。

 

▼ その他&メモ

  1. OCR機能:読んde!ココと比較した結果
  2. アドビ(Adobe)製品に関するRSSの情報
  3. 添付ファイルの扱いには注意が必要
  4. AcrobatはPDF作成ソフトの標準では無くなる?
  5. Acrobat PDF は国際標準化された
  6. 手書きPDF入門」 リンク
  7. planet pdf (PDF関連の英語サイト) リンク
  8. デフォルトプリンタを一時的に変更する方法
  9. Delphi(デルファイ,デルフィ)言語からの使用方法
  10. Acrobat使用時のレジストリ変化を取得する方法
  11. オブジェクトは値では無く、参照情報を持つ
  12. Adobe Reader で PDF ファイルを表示 / 印刷する方法
  13. サンプル:RGB値の一覧(カラー番号)
  14. 「・・このバージョンの Acrobat ではサポートされていない新しい形式・・」警告メッセージへの対応

▼日本語の資料

日本語版で公開されている技術情報が非常に少なく、また対応バージョンも古く、作成年度も古いのが多いです。しかし、PDF 又はAcrobat のエンジニア向けの基本的な技術はこの10年間はそれ程進歩していません。よって思った以上に使える事に気がつくはずです。

公開されている情報は今後消滅すると予想されます。必要な情報はバックアップする事をお勧めします。

▼ Acrobat SDK 関連

  1. Acrobat JavaScript Object Specification バージョン 5.0.5
    テクニカルノート# 5186 改訂日:2001年9月14日
    (297頁) Acrobat 5.0 JavaScript リファレンスマニュアル。
    PDF ドキュメントでJavaScript を使用するために必要なすべての情報。
    ※2018/10 リンク先は消滅しました。
  2. Developing Acrobat Applications Using JavaScript
    Adobe Acrobat SDK バージョン 8.0

    (220頁) JavaScript を使用してAdobe Acrobat での開発や拡張したりする方法について
    説明したマニュアル。必読!
  3. JavaScript for Acrobat 3D Annotations API Reference
    Adobe Acrobat SDK 2007年4月バージョン 8.1

    (105頁) 3D 機能(3D注釈のJavaScript API)をユーザに提供したい開発者を対象にしたマニュアル
  4. Parameters for Opening PDF Files(日本語版)
    Adobe Acrobat SDK Version 8.1 April 2007

    (8頁) PDF ファイルをURL やコマンドの中で開く際に使用できるパラメータについて説明したマニュアル
  5. Adobe Acrobat Workshop
    (78頁) Acrobat 7.0 JavaScript、API、IAC等の開発環境に関する概念の説明図
  6. Adobe Acrobat 7.0 Acrobat JavaScript Scripting Guide 2005年1月7日
    (276頁) Acrobat JavaScript を使用して開発したり拡張したりする方法について簡単に説明ししたもの
  7. Programming Acrobat JavaScript Using Visual Basic
    Technical Note #5417 バージョン:Acrobat 6.0 2003年5月

    (14頁) Acrobat 6.0 提供のJSObject と言うOLE オートメーション機能のプログラミング環境に関しての概念を説明したもの
  8. Acrobat JavaScript Scripting Guide
    Technical Note #5430 バージョン:Acrobat 6.0 2003年5月

    (90頁) Acrobat 6 Pro に搭載されている JavaScript 開発環境を使用して Acrobat アプリケーションを開発したり拡張したりする方法を簡単にまとめたもの
  9. Upgrading Plug-ins From Acrobat 5 to Acrobat 6
    Technical Note #5424 バージョン:Acrobat 6.0 2003年7月

    (28頁) Acrobat 6 API の概要を説明し、Acrobat 5 およびそれ以前のプラグインを Acrobat 6 にアップグレードする際に開発者が理解しておくべきことについて説明したマニュアル
  10. Adobe® Solutions Network Developer Program FAQ for Members
    Version 3.0 MAY 2002

    (461頁) ASNディベロッパーサポートプログラム会員から頂いたAcrobat Plug-in API,IAC,Readerに関する質問を整理した情報
  11. Acrobat Developer FAQ
    Adobe Developer Relations 改定:1999年9月2日

    (37頁) 質問および回答形式を整理した情報
  12. Parameters for Opening PDF Files(日本語版)
    Adobe Acrobat SDK Version 8.1 April 2007

    (24頁) Acrobat SDK でよくある質問と回答を整理したもの
  13. Adobe Acrobat 7.0 Acrobat SDK ユーザガイド 2004年12月14日
    (124頁) Acrobat SDKで提供されている機能、Acrobatで提供されている機能とその操作説明等
  14. JavaScript for Acrobat API Reference
    Adobe Acrobat SDK バージョン 8.0

    (765頁) Acrobat JavaScript の詳細な解説書/リファレンス

▼ Acrobat 一般資料

  1. Adobe Acrobat Security ディベロッパーサポート 2005年4月7日
    (43頁) Acrobat 7.0 の各種セキュリティに関する概念

管理人の独り言

  • 2010/4/26 「Appメソッド一覧」移行完了。かなり見直したので、結構解説が難しくなってしまったかも・・。全部の移行が完了したら、再度見直す事にして、次に行きます。
  • 2010/5/14 データの移行と再リンクが終わりました(汗)。サイトマップの構成も少し見直して・・。後は見直し(リニューアル)する必要有り。OLE(IAC)の全貌が判った時点で細かい部分の追加が必要となった。各頁にかなりの追加と再テストが必要だが既に環境は出来あがっている。本当の踏ん張ると事はココからかもしれない。
  • 2010/5/18 Appオブジェクトの移行が完了しました。
  • 2012/11/12 AFormAut オブジェクトが IAC に含まれていない盲点に orz
  • 2013/10/14 JavaScriptAPIと言う当サイト独自の表現を JSObject と本来の表現に変更する。
  • 2015/5/9 サイトのレイアウトを変更。

▼ Acobat OLE 以外の選択

Adobe Acrobat OLE(IAC)以外で、PDFファイルをプログラミング操作する情報を以下に提供します。

VBA の Shell 関数(又はWscriptのExec関数)で起動する事により、IACには無い機能で複数ファイルの自動化処理が可能だと思われます。

  1. Qpdf
    PDF をコマンドラインで操作するツール
    セキュリティ(パスワード)の設定が出来る!
  2. Poppler
    PDF をコマンドラインで操作するツール
    Xpdf をペースした機能拡張版
    注意:公式サイトからはWin版EXEは配布されてません。
  3. pdf2htmlEX
    PDF をHTMLへ変換する高性能なツール
  4. Coherent PDF Command Line Tools
    非常に多機能なコマンドラインツール
    ライセンスに注意が必要
  5. Xpdf
    PDF をコマンドラインで操作するツール
    Popplerの旧バージョン。安定版。
  6. PDFtk *  ※検証予定(時期未定)
    PDF をコマンドラインで操作するツール  
  7. PDFill PDF Writer: PDF作成ツール
    コマンドラインの使用は有償版のみ。
    無償版と有償版。表示は英語。
  8. ★その他の各種ソフトとツール★
    各種のPDFソフトウェアを一覧でまとめたサイトです。
    たぶん、ココの情報が最新で内容も充実してると思われます。

[コメント入力] <-をクリックするとページの最後にコメント入力が出来ます。
名前(ニックネーム)は必須。メールアドレス(非表示)も必須ですが、適当で結構です。

【更新日:2019/06/05 (11版)】

「サイトマップ」への209件のフィードバック

  1. mzさん。
    >上位で動かしたほうが無難ですよね・・・
    基本的にその部分は必要でしょう。
    それにプラス下位互換機能となる。
    ※本来は下位からですが、時代が・・
    >ただSDKが公開されていないとなると・・
    その通りです。このサイト全体にも影響を及ぼしますし。しかし、多分、OLEの基本仕様は変わらないと予想しています。JavaScriptAPIは大幅な機能アップが予想されますが、OLEの方は多少の追加程度だと思っています。理由はAdobe社はOLE(IAC)に労力を注いでいる様にSDKから読み取れ無いからです。
    とにかくAcrobat SDK v9.0を見てからのお楽しみ?ですか。
    頑張って下さい。

  2. mzさん。
    肝心な事を書き忘れていました。
    mzさんが今考えているExcelプログラムはこのサイトで解説している内容で十分作成可能です。上位・下位互換の心配は少ないかと思われます。
    欲さえ出さなければですが。(汗

  3. 重ね重ねありがとうございます。
    実は当初はもう一つのDDEでの
    実装を予定していました。
    ただ検索の不具合は私なりにも
    素人考えでいろいろやってみましたが
    ちょっとすぐにはどうにもなりそうに
    なかったのでOLEでと考えたわけです。
    多分、私のやりたいことは
    基本的な機能になるので、機能という意味では8でも9でも大丈夫だろうと予測しています。
    でもいろいろと機能拡充の段階で
    引っかかる可能性があるならば
    9かなぁでも大幅に変わってしまっていたら
    このサイトの情報が確実に使える8か・・・
    と悩んでしまいました。
    幸いまだ、構想している段階なので多少の余裕があります。
    引き続き検討してみます。(でもいったん、8を買ってしまうかもしれませんけど)
    ありがとうございました。

  4. 管理人様
    Acrobat9のSDKが未だ出ていない点、私も心待ちにしています。
    そのSDKについて質問なのですが、
    旧バージョンのSDKから、プロパティやメソッド内容が
    異ならなければ、新バージョンのSDKを使用せず
    旧バージョンのSDKのまま新バージョンのAcrobatを使用しても
    問題ないのでしょうか?
    (SDKのバージョンとAcrobatのバージョンが異なっても問題ないのでしょうか?)
    その点の情報など参考になる資料が見つける事ができなかったので、
    ご存知でしたら教えていただけると幸いです。
    よろしくお願いします。

  5. まっつん さん。初めまして。
    コメントありがとうございます。
     ご質問に関してですが、その考え方は少し危険な様に感じます。少なくても個人でしたら問題はありませんが、会社要素が含んだシステムならば、問題が起きた時に「逃げ道」がありません。
     ただ、v7 と v8 のSDKを使用して感じた事は大きな開きが無かった事です。よって、v9もそれ程大きな変更は無いと想像しています。あくまでも想像です。
     しかし、SDKが出ていない以上、SDKを出す前に緊急アップデートなどで一部仕様を勝手に変更されてしまうかもしれません。これに関してユーザー側からはメーカーに苦情は言えません。SDKが事前に出ていない以上、新バージョンへの対応は危険すぎます。
    >その点の情報など参考になる資料・・
    これに関する詳細な資料は残念ですが見つかっていません。過去のバージョンもです。
    今はまだこのサイトも作成途中ですが、いずれかはある程度のバージョン比較情報も全てのページに入れたいと思っています。しかし、手を広げすぎたので、それもいつ始めれるのか未定です。IAC.BAS(IAC.h)の情報無しに悪戦苦闘し、OLEから使えるJavaScriptAPIの膨大な資料をどう扱うか、悩んでいる状態です。
     話を元に戻します。旧バージョンのSDKを元に新バージョンのアプリケーションを予測してシステムを考えるのは危険だと思います。
     でも、どうしてもv9対応をSDKが出る前に考えたいのならばv9をインストールした別の環境を作り、同時比較テストをするしか手はありません。そしてSDKが出た時点で最終確認をする。
    ※たった今、Acrobat Pro v9.0.0の試用版を別環境にインストール完了。
     余談ですが、Acrobat Pro v9.0.0の試用版をインストールし、ザッと見た限りでは部分的に機能追加がチラホラ見当たります。見かけ上は同じでしたが、環境設定の内容が少し追加されています。 と言う事は部分的にメソッドの引数の種類の追加、及び新しいプロパティ、メソッド、もしかしたら新しいオブジェクトまで追加されているかもしれません。
    ※メソッドの削除やプロパティの削除などの下位バージョン向け削除仕様は少ないと勝手に予想しています。

  6. 管理人様
    返答ありがとうございます。
    >旧バージョンのSDKを元に新バージョンのアプリケーションを予測してシステムを考えるのは危険…
    やはりそうですよね。
    しっかりとバージョン確認制御して進めていこうと思います。
    ありがとうございます。

  7. 初めまして shinyaと申します。
    ど素人のため基礎をまったく知らずに
    「マクロで任意のPDFを印刷し終了」ということに挑戦しネット検索を繰り返した結果なんとか形になってのですが、ここのコメントに出ている
    >・・/cjsという隠しコマンド・・
    を使用しているため新バージョン9.0にアップデートしたら機能しなくなってしまいました。
    その後なにか対応策が出ているのか教えていただきたくコメントさせて頂きました。
    もし可能ならば、当方で作ったマクロの構文をアップいたしますので、どこを改善したら良いかご教授いただけたら幸いです。

  8. shinyaさん。初めまして。
    >>・・/cjsという隠しコマンド・・
    >・・
    >その後なにか対応策が・・
     残念ですが、現時点での対応策はありません。コメントにも少し書いていますが、「隠しコマンド」には絶対に手を出してはダメです。バージョンアップで逃げ場の無い痛い目に合う可能性を秘めているからです。
     管理人は動作確認していませんが「/cjsという隠しコマンド」がその一部を証明しています。他のQ&Aサイトでもこの「/cjs」がV9で使用出来ないで問題となっていました。しかし、隠しコマンドである以上、メーカーに文句は言えない。
     本当に隠しコマンドかも未確認です。しかし、SDK7,8,9に見つからない限り、隠しコマンドの可能性は高いです。
     どのようなマクロ環境(VB,VBA,JavaScript,・・)で目的が何かは不明ですが、「/cjs」の使用はあきらめてください。コメントにあるFANさんの考え方でやるしかないと思われます。会社でのシステムなので詳細な構文のコメントにありませんが。
     なお、マクロ構文のアップに関しては当サイトではなんら問題はありません。ただ、「/cjs」を使用した構文ならばアップしても意味が無いでしょう。

  9. さっそく返答ありがとうございます。
    やはりダメですか。。
    うまく出来て良かったと喜んで使っていたので、残念です。
    突然コメントしてこんなお願いも厚かましいのですが、可能ならば作成したマクロ構文をアップしますので、同じ仕様にするにはどうしたら良いかアドバイス頂けると幸いです。
    ただし、恥ずかしながらあまり知識がないので実例で示してもらえるとありがたいです。
    Private Sub CommandButton1_Click()
    '---------------------------------------------------------------------
    Dim n As Long
    n = Val(InputBox("印刷部数を入力してください"))
    Dim msg As String, i As Integer
    For i = 1 To n
    Dim myShell As Object
    Set myShell = CreateObject("WScript.Shell")
    ' --- 指定セルの確認
    ' If ActiveCell.Column <> 1 Or ActiveCell.Columns.Count > 1 Then
    ' MsgBox "A列の単一セルが選択されていません"
    ' Exit Sub
    ' End If
    ' --- 開始行を設定
    Dim printColumn As Long
    Range("A18").Select
    printColumn = ActiveCell.Column
    Dim printLine As Long
    Range("A18").Select
    printLine = ActiveCell.Row
    Dim FileName As String
    ' --- A列のアクティブセルから空白セルが出るまで順番に印刷
    Do While Len(Cells(printLine, printColumn).Value) > 0
    ' --- セル内の前後のスペースを削除
    FileName = PDFFilePath & Trim(Cells(printLine, printColumn).Value)
    ' --- ファイルの有無を判定
    If Dir(FileName, vbNormal) = "" Then
    MsgBox "[" & FileName & "]が存在しません"
    Else
    ' --- ファイルパスにダブルコーテーションを付加
    FileName = """" & FileName & """"
    myShell.Run "AcroRd32.exe /cjs/t " & FileName, 0, True
    Sleep 1000
    End If
    printLine = printLine + 1
    Loop
    Next i
    ' --- 終了時のメッセージ
    MsgBox "データを送信しました。" & vbLf & "プリント終了後 Acrobat Reader を閉じてください"
    End Sub

  10. shinyaさん。かなりお困りのようですね。
     本サイトに http://pdf-file.jugem.jp/?eid=247 を追加しました。これを前提に再度見直して下さい。
     それでもダメなら裏技はありますが、その前に「/cjs」を「/s」に変更して、現在の環境で目的が達成できるか試して下さい。但し、これでも問題が有るみたいです。Acrobatのプロセスがメモリ上に残る(らしい)。OSを終了すれば問題はありませんが。つまり印刷をする程メモリが無くなっていく・・(予想)。v9では解決されている事を祈りたい。試して下さい。タスクマネージャーを起動しながらメモリを観察してです。
     それでも出来なければ、内容的に許されるか不明なやり方(裏技)を以下に2つご提案します。
    1)プリンターがLPT1に接続されている場合
    MSが無償で提供しているVirtual PC 2007を使って、仮想OS上から動作可能なAcrobatバージョンで上記コマンドを実行します。仮想環境からプリンターに直結できますから、印刷は可能です。Virtual PC 2007に関しては一部を http://virtual-soft2.jugem.jp/ に当管理人がサイトを開いているのでお答えできます。Virtual PC 2007のインストールが可能な条件が揃っていればの話ですが。
    ※但し、(汗)LPT1の印刷テストの確認は過去にした経験はありません。テストは出来ないことはありませんが、狭い場所で複数のパソコンのケーブルの接続の交換にはかなり時間が掛かります。
    2)プリンターがUSBに接続されている場合
    VirtualBoxというSunが無償提供している仮想OSソフトがあります。これも当サイト管理人が http://virtual-soft1.jugem.jp/ で少し解説しています。Virtual PC 2007と同じ感じです。こちらはUSBが扱えます。Virtual PC 2007と同様にUSBにプリンターを接続してやれば出来る・・と思ったのですが、(汗)最新バージョン2.1.4でテストしているのですが、USB接続のプリンターを接続できない。なぜ?(悲
     どちらにしても、上記構文に関してはこの後も検証させて頂きます。(疲

  11. メモ:「/cjs」オプション
    7.0で追加されたもの。
    8.1で廃止されたもの。
    隠しオプションというウワサらしい。

  12. shinyaさんへ。
     USB接続のプリンターをVirtualBoxから印刷が出来ました。テスト完了です。この件に興味がありましたら http://virtual-soft1.jugem.jp/ の方に詳細を追加します。1日ほど時間は掛かりますが。

  13. いろいろご検討いただき本当にありがとうござます
    >それでも出来なければ、内容的に許されるか不明なやり方(裏技)を以下に2つご提案します。
    自分ひとりで使用する分にはそれも可能なのかもしれませんが、他にも複数の人がそれぞれのPCで使用することになりますので難しいかと思われます。
    まず補足としまして、構文を見てある程度わかられてるかもしれませんが、30個ほどあるPDFファイルの中から任意のファイルをエクセル上でいくつか選び、それを印刷するという作業を目的で作成しました。
    アドバイス頂いた
    >「/cjs」を「/s」に変更して・・・
    なんですがPDFファイル開く→印刷→閉じるまでは行くのですがAdobeReaderが残ってしまいそこで止まってしまいます。
    それを手動で消せばまた次の動作に入っていきました。
    なので素人考えですがAdobeReaderを閉じるコマンドがなにかあれば解消するのではないかと考えました。
    いろいろ調べてみた結果、DDEなるもで指令を出せるとのことなのですが理解にかなり時間がかかりそうですし・・・
    http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200806/08060112.txt
    ちなみにこのサイトでこちらのHPを見つけたので下のほうまで読んでいませんでした。
    こちらももう少し勉強してみようと思いますので、解決方法等みつかるようでしたらよろしくお願いいたします。

  14. こっちの方がいいですね。
    http://pdf-dde.jugem.jp/?eid=31
    そうすると、こんな感じかな?
    未テストです。
    Private Sub CommandButton1_Click()
    Const CON_ACROBAT_PATH = _
    "C:¥Program Files¥Adobe¥Reader 9.0¥Reader¥AcroRd32.exe"
    Dim n As Long
    '---------------------------------------------------------
    n = Val(InputBox("印刷部数を入力してください"))
    Dim msg As String
    Dim i As Integer
    Dim lChanNo As Long 'DDEチャンネル番号
    'Acrobatアプリケーション起動
    Shell CON_ACROBAT_PATH
    'DDEチャンネルのオープン
    lChanNo = DDEInitiate("Acroview", "Control")
    For i = 1 To n
    ' --- 開始行を設定
    Dim printColumn As Long
    Range("A18").Select
    printColumn = ActiveCell.Column
    Dim printLine As Long
    Range("A18").Select
    printLine = ActiveCell.Row
    Dim FileName As String
    ' --- A列のアクティブセルから空白セルが出るまで順番に印刷
    Do While Len(Cells(printLine, printColumn).Value) > 0
    ' --- セル内の前後のスペースを削除
    FileName = PDFFilePath & _
    Trim(Cells(printLine, printColumn).Value)
    ' --- ファイルの有無を判定
    If Dir(FileName, vbNormal) = "" Then
    MsgBox "[" & FileName & "]が存在しません"
    Else
    ' --- ファイルパスにダブルコーテーションを付加
    FileName = """" & FileName & """"
    'PDFファイルのサイレント印刷 (FilePrintSilent)
    DDEExecute lChanNo, _
    "[FilePrintSilent(" & FileName & ")]"
    End If
    printLine = printLine + 1
    Loop
    Next i
    'Acrobatアプリケーション終了
    DDEExecute lChanNo, "[AppExit()]"
    'DDEチャネルを閉る
    DDETerminate lChanNo
    ' --- 終了時のメッセージ
    MsgBox Now & ":プリント終了"
    End Sub

  15. 返信遅くなりすいません
    出張のためこちら見れてませんでした。
    これからためさせてもらいます。

  16. 何回かテストしてみた結果うまくいく時はいいのですが、なにかの拍子にフリーズしてしまうとその後は強制終了して再度挑戦してもフリーズしてしまいました。PCを再起動かけるとまた始めはうまくいくといった感じになりました。
    F8で進むと
    >'DDEチャンネルのオープン
    >lChanNo = DDEInitiate("Acroview", "Control")
    でフリーズするようです
    うまくいく時とだめな時の作業は違うことはしていないのですが。。

  17.  ガ~~~ン!
     「DDEチャンネルのオープン」でフリーズ?
     「DDEチャンネルのオープン」処理自体は確かに2.0GHzのCPUでも2秒程掛かります。一番重い処理をしています。遅いPCでならその倍以上は掛かるかもしれません。環境にもよりますが。
     DDEだけでなく、OLEもそうですが、本体はWindowsOSが処理しているので、途中で強制終了、又は中断をすると、それ以降の処理がおかしくなります。Windows自体がおかしくなります。それは確かです。結果的に解決策としてPC再起動となります。
     こちらもOS環境には山ほどソフトをインストールしています。よってレジストリ検索で時間が掛かるのか、処理は遅いです。shinyaさんの環境、又は別の環境で「DDEチャンネルのオープン」処理時間を教えて下さい。結構時間が掛かっていると予想しています。一見フリーズと間違える程の処理時間が掛かっているかもしれません。
     場合によっては10秒以上掛かっているかもしれません。この部分はレジストリを見ながら処理をしているはずです。お手数ですが一度、この部分の処理時間の再確認(測定)をお願いします。
     だめなら、OLE処理に戻ります。

  18. なるほど処理に時間がかかってるのかも知れないのですね
    うまくいくときは2秒もかからないくらいで処理できていたので、てっきりフリーズかと思ってしましました。
    >一見フリーズと間違える程の処理時間が掛かっているかもしれません。
    再度確認してみます
    お手数おかけしてすいません
    もう少しお付き合いいただけるとありがたいです。。

  19. 解決しました!
    社内の専用アプリケーションを開いている場合に障害がおきるようです。
    フリーズしている間にそのソフトを閉じたら起動しましたし、それ以降フリーズすることも無くなりました。
    おかげさまでなんとかなりそうです。
    本当にありがとうございました。
    こうしたいというアイデアはあるのですが、なかなか実力不足で形に出来なかったので良かったです。

  20. やりましたね!
    ねばったshinyaさんの勝ちです。
    ここまでに至った知識は将来につながる事でしょう。
    しかし、トラブルは忘れた頃にやって来る。
    100%のシステムなんて存在しないですから。
    少し休んで、次、行きましょう!

  21. こんにちは
    VBAからのpdf操作、
    私の仕事上、大幅な処理軽減できるのではと思いながら興味深く拝見させて頂いております。
    つきましては、こんなことができれdreams come trueかと…。
    モノクロ(tiff G4圧縮)とカラー(jpg)でスキャニングしたデータをpdf変換しているのですが、この変換したデータからモノクロ・カラーの識別はできるのでしょうか。
    お解りでしたら是非ともご教授して頂きたい
    のですが…。
    何卒よろしくお願い致します。

  22. icevainさん。初めまして。
    コメント、ありがとうございます。
    現時点で判る範囲で早々にお答えさせて頂きます。
    このサイトで解説しているOLEの範囲では残念ですが出来ないと思います。サイト自体の内容が不完全もありますが、そのような機能自体がAcrobatに無いからです。
    しかし、逃げ道は有るかもしれません。
    PDFファイルはASCIIコードとバイナリーコードの合体したファイルです。ASCIIコード部分には画像のRGB色を表した部分があります。それを利用します。
    1)PDFファイルをテキストとしてVBAで読み込む。
    2)読み込んだACIIコードで
    「数字+空白+数字+空白+数字+RG(又はrg)」部分の数字部分でRGB色がある程度の判別ができます。
    現在、管理人はOLEで出来ない部分を関数(プログラム)として提供できないか、PDFファイルの内部構造に関しては勉強中です。実際のPDFを見てみないと判りませんが、ちょっとしたらそれで簡単にできるかもしれません。あくまでも予想の範囲です。
    ※実際の「ノクロ(tiff G4圧縮)とカラー(jpg)でスキャニングしたデータをpdf」のほんの1ページだけでも見れれば、ある程度度の確証は持てるかもしれません。
    スキャナーで読みこむ時にモノクロ/カラー指定をして読み込んでいるのでしょうか? もしそれをしていればRGB色は判別出来ると予想します。
    詳細は「手書きPDF入門」
    http://www.kobu.com/docs/pdf/pdfxhand.htm
    に書かれています。少し難しいですが、最低限度のPDF構造に関して丁寧に書かれています。問題の個所は「画像の描画」部分です。
    一度、テストしてみようかな?

  23. 管理人さん こんばんは
    あまりの速攻回答&丁寧な回答に驚いています。
    >実際のPDFを見てみないと判りませんが、ちょっとしたらそれで簡単にできるかもしれません。
    実現すれば、私にとってまさにdreams come trueですね。
    >スキャナーで読みこむ時にモノクロ/カラー指定をして読み込んでいるのでしょうか?もしそれをしていればRGB色は判別出来ると予想します。
    指定してスキャンしているので、期待が持ててきました。
    早速、無知な頭にカツをいれてあれこれやってみます。
    PDF素人の私にお付き合い頂き感謝しおります。ありがとうございました。
    p.s.管理人さんのプロフィール、なんかいいですね

  24. icevainさん。
    こちらで簡単なテストしてみました。
    カラー画像(白と緑)をスキャナでグレー指定/カラー指定して2種類のPDFファイルを作成しました。
    それをNoEditorというテキストエディタで見たところ、肝心のRGB定義部分はACIIコード部分に有りませんでした。多分、バイナリー部分に吸収されていると勝手に判断しています。
    画像部分がPostScriptで出来れいればRGB定義部分はASCIIコードで書かれているはずです。スキャナで指定した「グレー/カラー」定義みたいなモノもひょっとしたら存在するかと比較調査しましたが見当たりません。
    残念ですが、現時点での結果は「判別出来ない」です。管理人がそこまでの知識に追いついていません。申し訳無いです。
    PDFの構造は勉強中なのでもう数日考えてみます。しかしココにコメントの追加が無ければ解決策は見つからなかったと思ってください。
    もし英語に堪能ならばPDF関連で唯一開かれたサイト「PlanetPDF」
    http://www.planetpdf.com/
    に質問してみてもいいかもしれません。
    管理人も初期はよく見させて頂きました。Acrobatにもフォーラムがあります。そこでも質問が投げれるかもしれません。URLは・・?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください