説明
Acrobatアプリケーションの指定されたメニュー項目を実行します。
※Adobe Readerでは使用出来ません。
形式
[MenuitemExecute(char* menuItemName)]
引数
menuItemName[char*] | [Toolbar and Toolbar Button Names 一覧]にあるメニュー項目 |
戻り値
未確認。
サンプル:Excel のVBA
Acrobatアプリケーションの「ファイルを開く」メニュー項目を実行します。
- F8キーでステップ実行して動作確認する。
Sub DDE_MenuitemExecute()
Dim lChanNo As Long ‘DDEチャンネル番号
Dim strFilePath As String
‘パスに空白が入った時用にダブル引用符を付加
strFilePath = “””E:¥Test01.pdf”””
‘Acrobatを起動
Shell “C:¥Program Files¥Adobe¥Acrobat 9.0¥Acrobat¥Acrobat.exe”
‘DDEチャンネルのオープン
lChanNo = DDEInitiate(“Acroview”, “Control”)
‘該当PDFファイルのオープン
DDEExecute lChanNo, “[DocOpen(“ & strFilePath & “)]”
‘[開く]:「ファイルを開く」ダイアログが表示される。
DDEExecute lChanNo, “[MenuitemExecute(Open)]”
‘★この後、開いたダイアログを手動で閉じるまで、次の命令を実行しない
‘PDFを全て閉じ、Acrobatアプリケーション終了
DDEExecute lChanNo, “[AppExit()]” ‘これをしないとAcrobatプロセスが残る
‘DDEチャネルを閉る
DDETerminate lChanNo
End Sub
補足
- Adobe Readerでは使用出来ません。
- 第1引数「例:(Open)」を間違ってもエラーは帰りません。
- メニュー項目の実行によっては、ダイアログボックス画面が開かれます。
その画面を閉じない限り、次の命令を実行されません。 - Acrobat:Toolbar and Toolbar Button Names 一覧も参照。
動作確認環境
- WindowsXP + SP3 + WindowsUpdate
Adobe Acrobat Pro 7.1.1 + Office Pro 2003
Adobe Acrobat Pro 9.1.0 + Office Pro 2003
Adobeの解説ページ : 英語
以下がAdobe社のAcrobat DDEの解説ページです。
表示には時間がかかります。
http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/IAC_API_DDE_Messages.104.34.htm
< TOPへ >
最近VBAを始めた者です。いつも参考にさせてもらっています。
現在ExcelのA列に番号、B列に単語(もしくは文)を配置しておき、PDF上をB列の単語で検索、単語があったならその単語に色をつけ、そのA列の番号を記していく、といったものを考えています。
PDF上の単語に色をつけること・ハイライトや枠をつけることなど考え、こちらのサイト内の様々な例を参考にさせていただきましたが、同等のシステム(2003)であるのにかかわらず、エラーがおきたりして(会社の2007では動作する)うまくいかず、少々へこんでおります。
そこで、「Acrobat:Toolbar and Toolbar Button Names」のページにある、ハイライトテキストツールを使えば、位置の計算もしなくていいので便利だと思ったのですが、まったくわかりません。
> lChanNo = DDEInitiate(“Acroview”, “Control”)
“Acroview”, “Control”とは何ですか。
> DDEExecute lChanNo, “[MenuitemExecute(Open)]”
> lRet = objAcroAVDoc.FindText(kensakugo, 0, 1, 1)
> DDEExecute lChanNo, “[MenuitemExecute(Hightlight)]”
検索したテキストにハイライト(黄色)は可能でしょうか。
よろしくお願いします。
> “Acroview”, “Control”とは何ですか。
「Acrobat DDE Message 一覧」からやってみればいいのですね。
もう少し試してみます。
Suzukiさん。初めまして。
テスト確認はしていませんが、
DDEではなく、Acrobat OLEで処理する事をお勧めします。
理由はエラー処理等が細かく出来るからです。
DDEをVBAで使ってもエラーコードは取得できません。
pdf-ddeさん、お早いお返事ありがとうございます。
Acrobat/DDE:DocFind
http://pdf-dde.nnn2.com/?p=9
のページにあった例文をカスタマイズして動作させてみて、スピードなどみて感動….「これにハイライトと番号がつけばなぁ」と考えた次第です。同時にハイライト・番号をつけることは難しいでしょうか。
「Acrobat:Toolbar and Toolbar Button Names」のページにある、ハイライトテキストツールはDDEでなく「OLE」ですね。
> lRet = objAcroApp.MenuItemExecute(“Hightlight”)
とかでハイライトさせるのは可能でしょうか。
なぜこういった方法を考えるのかというと
http://pdf-file.nnn2.com/?p=175
でNaoさんが書かれているように私のWinXP/Excel2003環境でも
> lRet = objAcroHiliteList.Add(x, x) (数字は変化させました)
では必ずエラーが起きてExcelは落ちてしまいます。
(これからいろいろ試してみます。)
よろしくお願いします。
>・・必ずエラーが起きてExcelは落ちて・・
ショック!
サンプルでは動いたはずなのに・・。(悲
(2年前のサンプルで、バージョン単位でのリニューアルは未)
ちょっと忙しくて詳細なテストは出来てませんが、
FindText メソッド
http://pdf-file.nnn2.com/?p=47
まで出来ます。
lRet = objAcroApp.MenuItemExecute(“Hightlight”)
はエラーになります。
“Hightlight”では無く、別のメニュー項目名だと思うのですが、それらしきものが見つかりません。
少し時間を下さい。
ちなみに、Acrobat JavaScriptの(旧)日本語マニュアルでも「ハイライト」で検索しましたが、見つかりませんでした。
お世話になっております。遅い時間ありがとうございます。
http://pdf-file.nnn2.com/?p=47
は問題なく動作させることができます。
http://pdf-file.nnn2.com/?p=175
はほかのXP/Excel2007マシンですと動作するんですが…。
結局のところ、
‘ハイライトリストを作成する
‘ページ単位のPDPageオブジェクトを作成する
‘ハイライトリスト (objAcroHiliteList)からページ単位の
‘テキスト選択のPDTextSelectオブジェクトを作成する
これらがどういうことをしているのか、意味しているのかちょっとわからないんです。
lRet = objAcroApp.MenuItemExecute(“[Commenting:Annots:Tool:Highlight]”)
とかやってみているんですが、うまくいきませんね。
今回の件は
http://pdf-file.nnn2.com/?p=175
とは関係無いと思っています。
備考にも
「テキストをハイライト表示」とは全く関係ありません
と書いています。
http://pdf-file.nnn2.com/?p=47
に集中しましょう。
lRet = objAcroApp.MenuItemExecute(“選択テキストをハイライトにする”)
をどうするかです。
今日(=明日)日本以外を検索してみます。
お世話になっております。
昨晩自宅(23時と現在は会社)から書き込みを確認しました。遅くまでありがとうございます。自宅はMacintosh+QpenOffice環境のためにいろいろ試すことができないので、仕事がなければ会社でこういったことを試すようなことは多いです。
MenuItemExecuteの方向からと、ちょっとDDEでの検索スピード・検索結果をみて、もしかしたらこれも仕事に使えるかもしれないので、時間があったらまとめてみます。
よろしくおねがいします。
実際での動作環境がMacなら、話は変わります。
Acrobat OLEはMacでは仕様がかなりの部分で変わります。
と言ってMacは環境が無いので何も確信を持って返答は出来ません。
話を最初のコメントに戻します。
B列の文字列で検索して、ハイライトテキストにし、そこにExcelのA列の値でテキスト注釈としてセットする。
Acrobat DDE、
Acrobat OLE(IAC)、
Acrobat JavaScript、
VBAのみ(Sendkeysでキーボード操作をエミュレート)、
UWSC(マウス・キーボード入力をスクリプト形式で記録、再生スクリプト言語によるアプリの操作)
いずれもベストマッチとは行かない。(みたい)
そこで、もっと元に戻って、目的、何が達成されれば良いかを、お話して頂けないでしょうか。
別の形で目的が達成できないかを模索してみたい、と思ったからです。
お世話になっております。書き込みありがとうございます。
(すいません、Macの件は気になさらないでください。)
客先が設定したキーワードのリストの単語が、PDF上のどこにあるのか整理したいのです。現在ひとつひとつ検索したり目で追ったりして、単語を探してはハイライトをつけ、注釈機能(テキストボックス)を配置して番号を振っています。
改めて、考えている概要としては、
・Excel(A列に番号、B列に単語(もしくは文))
・PDF上をB列の単語で上から順に前頁検索
・一致する単語があったならその単語に色(ハイライト)をつける
・単語のA列の番号を記す(ハイライト表示・ポップアップ内。将来的にはテキストボックスをおいて配置する、など)
といったものを考えています。
すいませんがよろしくお願いします。
2~3日下さい。
お世話になっております。いつもありがとうございます。
ご好意に甘えてしまって申し訳ありません。
結局共通のドキュメントはPDFだったりするため、今回のようなことを考えた次第です。
少しずつながら業務の中に何か改善策を、と空いた時間、帰宅前の時間などでスクリプト作成など試しています。
ご多忙の中、すいませんがよろしくお願いします。
(^_^;)
Q1) ご使用のAcrobatのバージョンは?
Q2) Acrobat v6の入ったパソコンはありますか?
Q3) Acrobat v6のソフトは有りますか?
現在の可能性は半々・・;。
お世話になっております。お返事ありがとうございます。
> (^_^;)
お願いばかりですいません….。
> Q1) ご使用のAcrobatのバージョンは?
> Q2) Acrobat v6の入ったパソコンはありますか?
> Q3) Acrobat v6のソフトは有りますか?
現在私の使用しているマシンはAcrobat7と8、会社ほかのマシンに5と9があります。6はクライアント受けがよくないため、入っているマシンが見当たりません(6/7/8同時にインストールしておくことが難しいことも原因)。
どうしても必要であれば、空いているマシンに入れることは可能です(ライセンスの問題もあるかもしれません)。
ほぼすべてがPro版ですが、入れられる6の場合、Standard版かもしれません。
ご多忙の中、ホントすいません。よろしくお願いします。
現在の状況ですが・・。
悪戦苦闘しています。
Acrobat OLEで一部は有る程度出来る事がSDKの説明上では判ったのですが、実際に動かしてみるとコトゴトク裏切られます。
1時間前に「やっぱ、無理でした」のコメントを入れようかと思ったのですが、「マテ。このやり方なら逃げれるかもしれない・・。手間とCPUが掛かるが」と思い、再度挑戦してみます。
ちなみにAcrobat v9(+Office 2003)で動かします。
Officeはあまり関係無いと思うのですが、Acrobatのバージョンにより非常に出来る出来ないの制限があります。
一応、途中経過まで。(汗
お世話になっております。お返事ありがとうございます。
ご尽力いただき感謝しております。
やっぱりかなり難しいみたいですね….。
例えばハイライトでなくてもその語、とわかるなら二重取り消し線とかでもいいのですが、番号を振るのに改めてテキストボックスなんかを置かなければなりませんし…。
すいませんがよろしくお願いします。
質問です。
PDFは英文ですか?
日本語の文章ですか?
英文でしたら、注釈付きのハイライトテキストは出来ました!v(^_^)
※CPU+時間共にメチャクチャ使います。1キワードを100頁で7分くらい。
日本語文章PDF(2バイト文字)でしたら、半分は発想を変えて再設計しないと無理かもしれません。頭の中で考えているだけですが、ロジックが難しくなるのは確実です。
今回は作成していて改めてAcrobat OLE(IAC)の難しさとA社の開発者泣かせの態度には呆れかえりました。
Acrobat PDFをExcel VBAで操作(OLE)
上記は1年半で6割方ですが作成完了しているサイトです。
最近別サイトから移行してきたばかりで、誤字脱字がワンサカです。
暇つぶしに、からかってあげて下さい。
お世話になっております。初の自宅からです。
基本的に英文(1バイト文字)が多いですが、日本語はもとより中文なんかも対象にしたいですね。文字コード的には最近の仕事はOTFとか使っていてUnicodeなので、日本語も中国語も韓国語も同じかと思ったのですが、そうではないのでしょうね。
InDesignなんかをタグ付きテキストで書き出すと、言語によってはびっくりする書き表し方をしているので、Acrobatもそうなのでしょうか。
先ほど書き込んだ二重取消線も打開策のひとつですが、リストにできませんし、文字を埋め込めないので、ちょっと機能不足かもしれません。
「Acrobat PDFをExcel VBAで操作(OLE)」はいろいろ試させていただきました!!
挫折寸前・・;。
別の手も更に挙動不審な動作+αに出くわす。
「出来ない」と言う言葉は嫌いなタチなので、
更に別の手を考えています。
(人間が機械的に操作を繰り返す事をプログラミングでやるだけなのに。
自分でも信じられない)
お世話になっております。
ほかにもいくつか試したりしていますが、「検索してハイライト」は、やはりできて欲しいですね…。
この処理は始める前はそれほど面倒な処理だとは思っていませんでした。
甘えてしまってホントすいません。よろしくお願いします。
すいません。質問です。初歩的なことですみません。
上のVBAコードで実行したところ
lChanNo = DDEInitiate(“Acroview”, “Control”)
の部分でVBEが動かなくなります。
実行環境は下記です。
Adobe acrobat9
excel2007
vista
5月からプログラミングそのものを始めたもので何もわからず、仕事上やむなくプログラムをしてますが、このようなサイトがあって本当に助かってます。
お手すきの時で結構ですので質問に答えていただけると助かります。
もちもちさん。初めまして。
Vista環境は現在のところ無いので直ちに確認が出来ません。
(かなり時間が掛かる)
それよりも『処理したい内容』を教えて下さい。
DDEでは戻り値(エラー)が取得出来ないので少し推薦出来ません。
OLEで出来るのであれば、ざっくりとご指示できるかもしれません。
以前こちらのサイトで質問させていただきましたLICEです。
管理人さんお久しぶりです。
その節はお世話になりました^^
案件も終了しホッとしていたら、またPDF絡みの案件が・・・
今回やりたいことは以下の通りです。
・英文のみのPDFで、検索キーワードをハイライトして保存する
で、こちらのコメントを拝見しておりましたら、
>英文でしたら、注釈付きのハイライトテキストは出来ました!v(^_^)
>※CPU+時間共にメチャクチャ使います。1キワードを100頁で7分くらい。
と、まさしく私のやりたいことでして。
宜しければ、上記実現方法につきご教授いただけないでしょうか。
# 現状、こちらのサイトを参考に、文字列を取得し、
# 注釈をつけるまではできたのですがハイライトされず。。。
# おまけに英文だと、CAcroPDTextSelect.GetText()では単語単位で
# 取得するので、実際にその単語のなかで一致する部分だけの座標が
# 取得できず・・・ 頭を抱えております;;
LICEさんへ。
そのコメントの続きを読んで下さい。
結果的に出来ませんでした。
ただし、別の人のコメントで出来る気配が有りましたが、かなり複雑なロジックでいまだに動作未確認です。
半年ほど前のコメントで、そのロジックをコメントで頂いています。
http://pdf-file.nnn2.com/?p=203&cpage=1#comment-930
http://pdf-file.nnn2.com/?p=178&cpage=1#comment-1229
1番目がかなりイイですが・・。
かなり難しいですヨ。(汗
回答ありがとうございます。
リンクを参考に以下を試してみました。
1. 全文を選択状態にしてテキストを取得
2. 取得したテキストとキーワードが一致するか判定
3. 判定の結果、一致する場合には該当文字列がテキスト内の何番目かのインデックス保存しておく
4. 3.で保存しておいたインデックスのテキスト範囲を選択状態にする
5. 4.で選択状態にしたテキスト範囲のRectを取得
6. 5.で取得したRectの座標に対して注釈を設定する
結果:指定したキーワードに対して注釈の追加が可能でした。
※但し、今回私が対象としたPDFは本文が全て英語のみであるためうまくいきましたが、
やはり日本語(というか2バイト文字?)との混在があると難しいですね。。
また、私は環境がVC++でIACを利用していますが、IACでは注釈はテキスト注釈のみらしく、
ハイライトなど他の注釈をつけるにはCoreAPIを利用してプラグイン開発を行うしかないようでした。
今回の調査としてはここまでとし、時間がある際にまたチャレンジしてみようかと思います。
ありがとうございました^^
LICEさんへ。
ご苦労様でした。
>6. 5.で取得したRectの座標に対して注釈を設定する
これが可能とは・・・。
VC++ならば可能と言う事でしょうか。
VBAだと動作が不安定です。
ハイライトはやはり無理のようですね。
ハイライトの要望は結構有るみたいですが、残念です。
CoreAPIで出来る事を祈っています。
いつも参考にさせていただいております。
環境:
Excel2007
Acrobat Standard DC
Acrobatプラグイン(フリー)
VBAからPDFを作成しています。
最後の処理でプラグインを操作したいのですが、
OLEからの方法がわからなかった為、
現在はSendKeysでキーを送り操作しています。
OLEで操作できる方法をご存知でしたら、ご教示いただけないでしょうか?
宜しくお願い致します。
tmk さん
はじめまして
「Acrobatプラグイン(フリー)」なるものが全く想像すら出来ないのですが・・。
こちらの方の AcroExch.App: MenuItemExecute メソッド を使って、Acrobatに登録したプラグインをメニューから起動できます。
但し、OLEが出来るのは起動だけです。連携は出来ません。
なお、Acrobat DCでの動作確認は出来ていません。
プラグイン画面?が表示された後でSendKeysキーを使っているという事ですが、動作的にはかなり不安定と予測します。
この手の操作は AuotIT 等の自動化ツールを使うのをオススメします。VBAからもAuotITツールを使って、SendKeysキーよりは安定した操作が出来ます。
どのような処理をしたいのかが判れば、VBAから起動できる別のコマンドライン・ツールのご提案も、もしかしたら出来るかもしれません。
その他の技術メモ:
・IAC アプリケーションからプラグインを呼び出す
・AutoIT日本語支援ページ
管理人さん
ありがとうございます。
詳細を省いてしまって申し訳ありません。
https://sites.google.com/site/hippunosource/home/adobe-acrobat-shiorinozumu-she-dingwo-yi-kuode-xingupuraguin#TOC–1
こちらのプラグインを操作したいと考えております。
現在は、ヘルプの右隣がこのプラグインなので、
http://pdf-file.nnn2.com/?p=63
こちらを参考にSendKeysで下記のようにしています。
SendKeys “%H”, True
SendKeys “{RIGHT}”, True
SendKeys “{ENTER}”, True
もし他に方法がありましたら、ご教示いただけますと幸いです。
宜しくお願いいたします。
tmk さんへ。
Windows 10 64bit でご指定のプラグインを Acrobat Pro XI と Acrobat Pro DC にインストールしましたが、共に動作しませんでした。何かが足りないのでしょうか?
でも、やりたい事は判りました。
文書プロパティの「倍率」を変更したいという事でよろしいでしょうか?
過去にも似た質問が2件有りました。そこでもう一度最初から、OLE、Acrobat JavaScript 、コマンドラインと見直してみましたが、解決策には至っていません。もう少し時間が必要かもしれません。
そこで全く違う別のやり方をご提案します。
但し申し訳ありませんがコメントの管理用、この続きは以下のページにさせて下さい。
AcroExch.AVPageView メソッド一覧 のコメント