Acrobat OLE 使用上の注意事項

TOP > *      [...]


当サイトが、Acrobat OLE機能(IAC)の紹介を始めて、3年以上経ちます。

最初は単なる興味から始まり、月日が経つにつれ、日本のエンジニア向けへの技術情報提供へと変わってきました。

その間に悪戦苦闘しながらも、やっとある程度は情報提供できる形にはなったと思っています。

ただ、時間的なものが邪魔をして不揃いな内容になっている事は申し訳なく思っています。

 

Acrobat OLE機能(IAC)の全貌が判った時点で、改めてここに使用上の注意事項を書かせて頂きます。

なお、これは当サイト管理人の判断であり、メーカーからの情報提供では有りません。

  1. Acrobat OLE機能(IAC)にはAcrobatアプリケーション本体が持っている機能の5%以下の機能しか提供されてない
  2. Acrobat OLE機能(IAC)にはAcrobat v6以降から機能の見直しをしていない
    注意)バージョンに関しては詳細な確認はしていない。v7かもしれない。
  3. Acrobat OLE機能(IAC)には単純なバグがあるにも関わらず、一向に修正がされない
  4. ユーザーが多い日本人のエンジニア向けの解説書(日本語版)SDKが提供されてない
  5. 機能は提供されて、解説が無いものも多数ある。つまり使い方が判らない

 

かなり悲観的な部分が有るが、誤解をしないで頂きたい。

当サイト管理人はこの機能を不定している訳ではありません。

OLE機能はこの手のソフトにとってエンジニア向けに提供されるの機能としては当然の機能であり、またアプリケーション本体と同程度の機能を提供するのはメーカーとしては当然の義務だと思っています。

しかい、バージョンアップを繰り返しても改善されません。

本当にAcrobat を使いこなすべきエンジニア達に対しての配慮が欠けていると思われます。

特に1と5の問題点はエンジニア泣かせと見ていいでしょう。

 

 

しかし、当サイトは今後も Acrobat OLE 機能(IAC) の情報提供を行っていきます。

まだ解説できてない部分の追加もします。

電子文書フォーマット「PDF」をエンジニアがプログラミング・コントロールする時の少しでも役に立つ情報提供に心がけたいと思っています。

 

以上、当サイト管理人より。   2013/10/11

 

TOPへ

「Acrobat OLE 使用上の注意事項」への10件のフィードバック

  1. いつも大変参考にさせて頂いております。ありがとうございます。
    Window10への切り替えのため、古かったソフトを新しくしようとしていますが、処理が動かなくなってしまいました。
    具体的には、Accessのvbaを利用して、既に作成済みのPDFに値を設定して保存するという処理です。
    値の取得はできるのですが、値の設定ができず、更新できない状態です。
    objPDDoc.GetJSObject.getField("us-request[0].ContentArea2[0].sfSignature[0].sfSig[0].signature[0]").Value = "Test"

    <旧環境>
    ・Windows7
    ・Acrobat7
    ・Access2003(Excel2010、Word2010)
    <新環境>
    ・Windows10
    ・Acrobat2017
    ・Access2019(Excel2019、Word2019)
    もしアドバイスして頂ける点がございましたら、よろしくお願い致します。

  2. 遠藤 さん はじめまして。

    あくまでも、予測ですが・・(汗

    新環境でのVBAの参照設定は、旧環境のAcrobat v.7を探そうとして見つからず、ひょっとしたらAcrobat Reader側のOLEを参照している可能性も予測できます。または、別の関係ない所を見ている。つまり、正常に参照設定が機能しない、と言う事です。

    >・・値の取得はできるのですが、値の設定ができず、更新できない状態・・

    過去にこの様な状態に遭遇しています。
    特に新環境とのバージョンの差(Acrobat v7 <-> Acrobat v2017)が大きいとうまく機能しない場合が有ります。

    対処方法としては、VBAの参照設定を一旦外して、OKボタンで閉じる。そして再度、参照設定を開いて、指定してみてください。
    この時に参照設定の画面の下に「場所」が表示されます。Acrobat2017のインストールフォルダになっていることに注意してください。


    ※上記はAcrobat XI(11.0)の場合

    それとVBAが入っていた旧・Access2003?ファイルをAccess2019ファイルにアップグレードした方がイイです。MSは下位互換を基本的に保証していますが、これもバージョン差が大きいとトラブルが出やすいです。
    MS Officeの2003バージョン以下はファイルの最適化が不適切で何度も更新をしていると、ファイルサイズが増えていってトラブルが出やすくなります。(経験談
    但し、注意点としてPDFの更新以外の機能が正常に動作するかの確認も必要になります。VBA+「その他モロモロ」もバージョンアップするからです。旧バージョンの2003でないと動かない、なんて事も予想できます。よって、旧Access2003ファイルはバックアップしてからアップデートしてください。

    それでも解決しない時は、再度コメントを下さい。

    (技術メモ:Acrobat 2017はデスクトップ向け永久ライセンスバージョン。手元に無いので動作は未確認です。基本的にDCバージョンとのライセンス違いだけと勝手に思っている。)

  3. 管理人様
    早速回答をして下さり、誠にありがとうございます。
    まずAccessのファイルですが、mdb→accdbにバージョンアップしておりました(分担して作業しており、記載が足りませんでした)。
    次に、参照設定ですが、既存のWin7+Access2003環境では、参照設定をせずに動作しておりました。
    そこで、Win10環境では、「Adobe Acrobat 10.0 Type Library」と表示されますが、「C:\Proguram Files (x86)\Adobe\Acrobat 2017\Acrobat\acrobat.tlb」を参照先として追加しました。
    しかし、結果としては同じ状態でした。
    このような情報で足りますでしょうか。
    そもそもOffice2019とAcrobat2017(もしくはDC)の環境で、vbaでの利用が可能なのかが、心配になっております。
    管理者様で動作確認がとれていらっしゃるなど、情報をお持ちだったりしますでしょうか。
    ※なお、Office2019は32bitバージョンをインストールしています。
    あいまいな質問で大変恐縮ですが、何卒よろしくお願い致します。

  4. 遠藤さんへ

    参照設定を使ってないと言う事は、たぶん以下の様な定義を使用していると思われます。

    Dim objPDDoc As Object
    Set objPDDoc = CreateObject("AcroExch.PDDoc")

    上記を以下の1行に変更してください。

    Dim objAcroPDDoc As New Acrobat.AcroPDDoc

    2行が1行で書けるようになります。これは参照設定をしてないと書けないです。また、参照設定しているOLEを見に行くようになります。
    Acrobat OLE(IAC)部分の文法チェックも掛かり、今まではエラーにならなかった部分がエラーになるかもしれません。

    「できればVBAソースを修正したくない」と言うかもしれませんが。
    これで一度、実行して見てください。
    うまく出来たら、その理由を次のコメントで書きます。

    >・・Office2019とAcrobat2017(もしくはDC)の環境で、vbaでの利用が可能なのかが、・・

    どちらも環境が無いので予想でしか返答できませんが。
    過去にMSのトップは「VBの動作は未来も保証する」と言っていました。(私はVB≒VBAとも思っています。) VBAを無くして、VB.NETに移行するみたいな気配も確かに昔は有りましたが、今はその話すら覚えている人もいません。
    VBAは未来も動作すると私は思っています。(真顔

    >・・Office2019は32bitバージョンをインストール・・

    その方がイイです。64ビット版にするとVBAから使うWindows API関連は目も当てられません。(経験談

    それと一つ教えてください。
    PDFファイルをエクスプローラーから開くと、Acrobat又はAcrobat Readerのどちらがデフォルトで開きますか?

  5. 管理者様
    定義については、まったくご指摘の通りでした。
    変更してみましたが、同じ状態でした。

    ちなみにPDFを開くと、Acrobatで開いています。
    なお、Actobat2017はStandardで、Actobat 7.0はProです。

    簡単なプログラムをお知らせしたいのですが、記入するとエラーになるため( <code> ・・・</code>を入れても)、本文だけですみません。

  6. 遠藤 さんへ

    >変更してみましたが、同じ状態でした。

    かなり自信は合ったのですが・・。
    (私のスキルは所詮、こんな物です:涙)

    >ちなみにPDFを開くと、Acrobatで開いています。

    Acrobat Readerがインストールされてないか、Acrobat Readerを先にインストールして、後でAcrobatをインストールしたかです。
    PDFの開くデフォルト設定はOS側で変更できますから。まあ、参考程度の話です・・。
    (インストール順は大事なのですが・・。今はもう関係ない。と思う。)

    >なお、Actobat2017はStandardで、Actobat 7.0はProです。

    一番重要な部分です。
    Acrobat 7.0 のStandardではOLEは使用できません。Pro版のみ有効です。公開マニュアルにも明記が有りました。これは実証&確認済みです。
    但し、Acrobat X?以降のバージョンから、StandardでもOLEが使用できると言う話(コメント)を頂いています。これに関してはコチラでは動作未確認です。Standard版の入手&検証ができなかったからです。
    Actobat2017もStandardの入手はできないので、検証は出来ません。Pro版は評価版として入手できます。

    >・・、記入するとエラーになるため・・

    すみません。ここのサイトは海外からの不審なアタックが非常に多いので、何重にもガードしています。
    今なら、 <code> ・・・</code> タグ無しでも入ります。

  7. Sub test_JSO_addWatermarkFromText()

    Dim objAcroApp As New Acrobat.AcroApp
    Dim objAcroPDDoc As New Acrobat.AcroPDDoc
    Dim jso As Object
    Dim lRet As Long

    '透かしが追加されるPDFファイル
    Const CON_PDF_IN = "I:\透かしTest\VBJavaScript.pdf"

    'JSObjectオブジェクト作成時のNothingの回避策
    'Acrobatアプリを強制的にメモリにロードする
    lRet = objAcroApp.CloseAllDocs

    'PDFファイルを開く
    ******************************************

    Debug.Print "End: " & Date
    End Sub

  8. 管理者様
    早速ありがとうございます。

    プログラムは以下の通りです。
    Dim objPDF As New Acrobat.AcroApp
    Dim objAVDoc As New Acrobat.AcroAVDoc
    Dim objPDDoc As Acrobat.AcroPDDoc
    Dim wkText As String

    objPDF.CloseAllDocs

    If objAVDoc.Open("ファイルパス", "") = False Then
    MsgBox "ADS作成に失敗しました。" & vbCrLf & "情報システムにご連絡下さい。" & vbCrLf & Err.Number & ":" & Err.Description, vbCritical
    Exit Function
    End If

    Set objPDDoc = objAVDoc.GetPDDoc()

    With objPDDoc.GetJSObject
    wkText = .getField("us-request[0].ContentArea1[0].sfApplicantInformation[0].sfApplicantName[0].lastName[0]").Value
    .getField("us-request[0].ContentArea1[0].sfApplicantInformation[0].sfApplicantName[0].lastName[0]").Value = "Test"
    End With

    objPDDoc.Save "&H1", SakiPath
    objPDDoc.Close

    Set objPDDoc = Nothing
    objPDF.CloseAllDocs: objPDF.Hide: objPDF.Exit: Set objPDF = Nothing
    --------------------------
    途中でwkText に値が取れていることを確認の上、"Test"を設定しています。
    この直後にwkTextに取り出しても変更前の値がとれ、保存されたPDFでも変更前の値のままです。
    一度体験版のProの状態で、参照設定を追加する前のもとのコードで実行した際には、値の設定はできませんでした。
    値を設定してもエラーにならないので、何とか動かせないかなと思っております。

  9. 遠藤 さんへ

    >.getField("us-request[0].ContentArea1[0].sfApplicantInformation[0].sfApplicantName[0].lastName[0]")

    上記の引数の内容について、公開できる範囲で説明をお願いします。参照先URLが有れば、それでも結構です。

    >一度体験版のProの状態で、参照設定を追加する前のもとの
    >コードで実行した際には、値の設定はできませんでした。

    「・・値の設定はできません」と言う事は、Pro版でもダメだった、と言うことですか?
    試用版でも起動できれば制限は全く無いはずなので、OLEは使えると思ったのですが。(困

    >値を設定してもエラーにならないので、

    JSObjectは特殊な変形OLEみたいで、結果でしか判断できない部分がほとんどです。

    少しお時間をください。
    最初からゆっくりと、見落としがないか、考えてみます。
    ・・環境の問題だと思うのです、・・。

  10. 管理者様
    ご確認頂きまして、ありがとうございます。
    この処理ですが、PDFは*****が作成した表形式+クリックにより入力項目の表示・非表示が切り替わる、動きのあるPDFになっています。
    値を設定したい項目は、記載しましたようなツリー状の階層になっていまして、[0]は1つ目の項目となっています。同じ項目を複数使用する場合は[1][2]とインデックスを変えて何番目の項目かを特定させています。
    ※動きのある項目の制御はできなかったので、入力したい人が1人用、2人用など、動かした後の状態でパターンごとにPDFを保存しておき、そこに値を設定していました。
    ※どのWebサイトかわからなくなってしまったのですが、Acrobat2017ぐらいから、Officeとの連携が変わったというような記載を見たように思い、実はそこが気になっております。Access2019+Acrobat7.0だと、元のプログラムのままでも動くのは確認しています。
    情報が後出しになってしまい、申し訳ございません。
    何卒よろしくお願い致します。

コメントを残す

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

CAPTCHA


出来るだけ早く返答する様には心がけています。
が、遅くなる時もありますのでご了承ください。


SAMURAI Plugin

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

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れるとエラーになる場合が有ります。その時はコードの前後に <code> ・・・</code> タグを入れてください。

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