TOP > AcroExch.PDDoc > GetJsobject [...]
説明
Acrobat アプリ環境内で使用できるAcrobat JavaScript にアクセスするメカニズムのJSObject オブジェクトを提供します。
PDDoc に関連付けられたJSObject オブジェクトを通して Acrobat JavaScript のDoc オブジェクトのメソッドやプロパティを使うことが出来ます。
※当メソッドで作成されるJSObject オブジェクトはJavaScript で解説します。
形式
LDispatch* GetJSObject();
引数
- 無し。
戻り値
- 戻り値はJSObject オブジェクト。
- エラー時はNothingが返される。
動作するバージョン
Version | Adobe Acrobat | 備考 |
---|---|---|
4 | - | Acrobat 4.0 ※Windows 98SE + Excel 2000 |
5 | - | Acrobat 5.0.5 |
6 | - | Acrobat 6.0.3 Pro |
7 | - | Acrobat 7.0.9 Pro Acrobat 7.1.4 Pro |
8 | OK | Acrobat 8.1.2 Pro |
9 | - | Acrobat 9.3.2 Extended |
10 | - | Acrobat X (10.1.8) Extended |
11 | - | Acrobat XI (11.0.04) Extended |
- OK = 動作する。
- NO = 動作しない。 戻り値が0を返す。
- - = 未確認。
サンプル:ExcelのVBA
- F8キーでステップ実行しながら動作確認する。
- 事前に参照設定をする。
001 Private Sub CommandButtonA_Click()
002
003 Dim objAcroApp As New Acrobat.AcroApp
004 Dim objAcroPDDoc As Acrobat.AcroPDDoc
005 Dim objAcroAVDoc As Acrobat.AcroAVDoc
006 Dim objJso As Object '正式なオブジェクト不明
007 Dim objDoc As Variant '正式なオブジェクト不明
008 Dim lRet As Long
009 Dim docs '正式なオブジェクト不明
010
011 Set objAcroAVDoc = objAcroApp.GetActiveDoc
012 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
013 Set objJso = objAcroPDDoc.GetJSObject
014 objDoc = objJso.app.activeDocs
015 For Each docs In objDoc
016 'Debug.Print docs.・・・・・・・・・・・・・・
017 Next
018
019 '........................................
020
021 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
備考
- 使い方は本来のAcrobat JavaScript とは多少異なります。
注意
- このメソッドを使う時はAcrobat がメモリ上に確実に存在しないと、戻り値がNothing になることがあります。
その対策として、全てのOLE(IAC)実行前に「CloseAllDocsメソッド」を実行します。
これは経験上のテスト結果です。
ネット公開されているドキュメント:日本語のみ
- Programming Acrobat JavaScript Using Visual Basic
Technical Note #5417 バージョン:Acrobat 6.0 2003年5月
(14頁) Acrobat 6.0 提供のJSObject と言うOLE オートメーション機能のプログラミング環境に関しての概念を説明したもの
hhttp://kb2.adobe.com/jp/cps/511/511296/attachments/511296_VBJavaScriptJ.pdf - Developing Acrobat Applications Using JavaScript
Adobe Acrobat SDK バージョン 8.0 (220頁)
JavaScript を使用してAdobe Acrobat での開発や拡張したりする方法について説明したマニュアル。
http://kb2.adobe.com/jp/cps/511/511719/attachments/511719_js_developer_guide.pdf - JavaScript for Acrobat API Reference
Adobe Acrobat SDK バージョン 8.0 (765頁) Acrobat JavaScript の詳細な解説書/リファレンス
http://kb2.adobe.com/jp/cps/511/511727/attachments/511727_js_api_reference.pdf
動作確認環境
- Windows98SE( + WindowsUpdate)
+ Acrobat 4.0 + Office 2000 - WindowsXP Pro( + SP3 + WindowsUpdate)
+ Acrobat 5.0.5 + Office 2003( + SP3) - WindowsXP Pro( + SP3 + WindowsUpdate)
+ Acrobat 6.0.3 Pro + Office 2003( + SP3) - WindowsXP Pro( + SP2 + WindowsUpdate)
+ Acrobat 7.0.9 Pro + Office 2003 - WindowsXP Pro( + SP3 + WindowsUpdate)
+ Acrobat 7.1.4 Pro + Office 2003( + SP3) - WindowsXP Pro( + SP3 + WindowsUpdate)
+ Acrobat 8.2.2 Pro + Office 2003( + SP3) - WindowsXP Pro( + SP3 + WindowsUpdate)
+ Acrobat 9.3.2 Extended + Office 2003( + SP3)
Adobe Web 解説 URL(英語) v9.1
http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?href=IAC_API_OLE_Objects.103.34.html&accessible=true
< 戻る >
Acrobat SDKの情報を探していてたどり着きました。
有益な情報に感謝致します。
GetJsobject関数
-Adobe Acrobat 9.0.0 Pro Extendedにて動作する事を確認しました。
今、Adobe Acrobatの機能にある「サポートしているファイルを Acrobat で結合」をプログラミング操作(OLE)したいと考えています。
もしご存じであれば、ご教授頂けないでしょうか?
houさん。初めまして。
「サポートしているファイルを Acrobat で結合」の件ですが。
サポートしているファイルはPDFファイル以外無いと思っています。
以下のページのサンプルを見てください。
AcroExch.PDDoc:InsertPages メソッド (2版)
http://pdf-file.nnn2.com/?p=223
注事事項は必ず読んで下さい。
バグ対策が書かれています。
返答になっているでしょうか。
管理人様。返答を有難うございます。
私が目的としている動作は、複数の画像ファイル(ここではPNG)を結合し、1つののPDFとして出力するというものです。
エクスプローラ上で複数の画像を選択し、コンテキストメニューを表示させた時、「サポートしているファイルを Acrobat で結合」(Combine Supported Files In Acrobat)という項目が存在します。
これをクリックすると「ファイルの結合」という画面が表示されます。
この画面から、複数の画像ファイルを1つのPDFとして出力するという目的の処理が行える事は確認しました。
この処理をどのように実現出来るかを調べています。
(上記の処理が行えた事から、PNGファイルもサポートされているファイルだと認識しています。)
該当のページは拝読させて頂きました。
PNGファイルを変換(?)し、AcroExch.PDDocインスタンスを得る事が出来ればAcroExch.PDDoc.InsertPagesメソッドを使用して目的の処理が出来そうですね。
まずは頂いた助言を参考にしながら、リファレンスを再読してみる事にします。
やりたい事は判りました。
テストした結果、Acrobat OLE(IAC)では画像ファイルをダイレクトにPDFに変換する事は出来ません。
出来た記憶が無いが正解です。
しかし、考え方を少し広く考えると出来るはずです。
※開発環境が判らないので大雑把に書かせて頂きます。
仮に開発言語がVB(VB.NET)ならば、Pictureコントロールに画像を貼付けて、プリンター名「Adobe PDF」に対して(サイレントで)印刷を行います。これだけで画像ファイルがPDFに変わります。
以下は参考になるか判りませんが・・
・デフォルトプリンタを一時的に変更する方法
http://pdf-file.nnn2.com/?p=697
・Acrobat使用時のレジストリ変化を取得する方法
http://pdf-file.nnn2.com/?p=729
・VBAでPDFファイルをPDF/X-1a:2001形式に変換出力
http://pdf-file.nnn2.com/?p=733
↑ このサンプルはレジストリを操作して印刷方法を変更しています
管理人様。お世話になっております。
「JavaScript for Acrobat API Reference」を読み解いていたのですが、app.openDocという関数が利用出来るのでは無いかと考えていました。
(オプション引数bUseConv:読込時、非PDFファイルをPDFファイルに変換を試みるかの指定)
管理人様のコードを基に、次のようなVBAコードを作成したのですが、
openDoc関数呼び出し時に「名前付き引数が見つかりません」とエラーが出て途方にくれています。
---------------------
Sub PngToPdf()
Dim AcroPDDocNew As New Acrobat.AcroPDDoc
Dim AcroPDDocAdd As New Acrobat.AcroPDDoc
Dim AcroPNGDocAdd As New Acrobat.AcroPDDoc
Dim lRet As Long
Dim lGetNumPages As Long
Dim lPages As Long
lPages = 0
'空のPDFファイルを作成する
lRet = AcroPDDocNew.Create()
Set jso = AcroPDDocNew.GetJSObject
' 画像をPDFに変換してDocオブジェクトを取得
Set AcroPNGDocAdd = jso.app.OpenDoc("", bUseConv:=True)
lGetNumPages = AcroPDDocAdd.GetNumPages()
lRet = AcroPDDocNew.InsertPages(0, AcroPNGDocAdd, 0, lGetNumPages, True)
lRet = AcroPDDocAdd.Close()
'結合した画像ファイルをPDFとして保存する
lRet = AcroPDDocNew.Save(1, "")
lRet = AcroPDDocNew.Close()
'オブジェクトを強制開放する
Set AcroPDDocAdd = Nothing
Set AcroPDDocNew = Nothing
End Sub
---------------------
これ以上のリファレンスも無い為、諦めようかと思っています。
代替案の提示有難うございます。
また進展があれば報告させて下さい。
連投すいません。タグ文字は消えてしまうんですね。
app.openDoc関数の第一引数は「画像fileのパス」
Acrobat.AcroPDDoc.Save関数の第二引数は「PDFfileのパス」です。
ps:VBA開発経験はほぼ無い為、何か根本的に間違っているのかも…。
なかなかイイ所を突いていますね。(汗
しかしAcrobat OLEからJavaScriptオブジェクトを連携する箇所は、
何故か制限?みたいな物を掛けていて全ての関数が使えるとは限らないんです。
※予測ですが
Acrobat JavaScriptの説明はあっても、Acrobat OLEからJavaScriptを連携して
操作(OLE)する箇所に関してはほとんど無いんです。
多分、何らかのコツがあると思うのですが、うまく出来ない。
だからいつまで経ってもJavaScriptオブジェクトに関する説明は
「作業中」のままなのです。
しかしこの「オプション引数bUseConv」は気になります。
現在、テスト中です・・;。
管理人様。お世話になっております。
お尋ねしてばかりで申し訳ありません。
私が気づかないだけで案外簡単に出来る事ではないかと考えていましたが、難しいようですね。
色々と検索をかけてみましたが、残念ながらヒントになるような情報は見つかりませんでした。
折角の週末なので考え込むのは中断して、羽を伸ばす事にします。
本日はどうも有難うございました。
houさん。
いろいろと試してみましたが、出来そうなところで以下のメッセージが出ます。
「NotAllowedError: セキュリティ設定により、このプロパティまたはメソッドへのアクセスは許可されていません。」
Acrobatの環境設定の問題かと思ったのですが、それらしき設定箇所は無し?
AcrobatでのJavaScriptなら出来るますが、それでは解決にならない。
課題として残させて頂きます。
※出来そう感じ一歩手前なんだけどナ~
管理人様。お世話になっております。
OLE経由でなく、AcrobatのJavaScriptでやってみようと思います。
資料が無いですから、試して出来なければOLE経由では諦める他ないですね。^^;
有難うございました!
Acrobat JabaScriptのリファレンスが英語版でしたらWEBサイトで公開されています。
http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/wwhelp/wwhimpl/js/html/wwhelp.htm?href=JS_API_AcroJS.88.103.html&accessible=true
日本語版でしたら、リファレンスは有りませんが基本説明(276頁)で
バージョン Acobat 7.0版がネットでPDF公開されています。
もちろんパソコンに保存できます。
http://kb2.adobe.com/jp/cps/511/511340/attachments/511340_AcroJSGuide.pdf
既に知っていると思いますが。
管理人さん。
お世話になっております。
サイトマップをよく読んでおらず「様」付けで申し訳ありませんでした;
その後のご報告です。
PDFにAcrobat JavaScriptを埋め込み試してみたのですが、openDoc関数はNotAllowedErrorが発生して使用出来ませんでした。
どうにもこうにも上手くいかないので、希望の処理はプラグインとして作成する事に致しました。
今まで見つけられなかったのが恥ずかしいのですが、SDKにサンプルが同封されていたのが最近分かったので…。^^;
まとめます。
-目的とする処理
任意の画像ファイルを結合し、1つのPDFに変換する。
-例となるプラグインのサンプル
Acrobat 9.1 SDK(sdk91_v2_win.zip)中の"PDFBinder"
-IACアプリケーションよりPluginを呼び出す方法
MenuItemExecute関数を使用し、任意のPluginを呼び出す事が出来るようです。
参考元:http://kb2.adobe.com/jp/cps/510/510185.html
プラグインはあまり作りたくなかったのですが・・、しょうがないですね;
houさん。
御報告、ありがとうございます。
>・・NotAllowedErrorが発生して使用出来ませんでした。
何か決まり事があるんでしょうね。※知りたい!
>・・SDKにサンプルが同封・・
ハハ・・、(汗)知りませんでした。
確かにそれらしき物を発見・・。
Cは現在勉強中で、ドドド素人状態です。
ちなみにプラグイン(Acrobat API)は自分で作成して使うのは問題無いですが、
配布となると200~400万円のライセンス料が必要だった記憶があります。
御注意下さい。
Visual Basic(IAC)利用してPDFファイルからしおり(BookMark)、リンクを取得しようと思っています。AcroExch.PDAnnotでリンクがあるのは解ったのですが、、リンクの位置が不明。しおりはpdDoc.GetJSObjectで取れそうな気がします。何かご存じでしょうか?
Teiさん。初めまして。
>AcroExch.PDAnnotでリンクがあるのは解ったのですが・・
AcroExch.PDAnnotはノート注釈を扱うオブジェクトです。
しおり(BookMark)はAcroExch.PDBookmarkオブジェクトで操作します。
IACでは無いですが「PDFill PDF Writer: PDF作成ツール」を使って
DOSコマンドラインで
"C:\Program Files (x86)\PlotSoft\PDFill\PDFill.exe" EXPORT BOOKMARK Input.pdf Output.xml
という感じで実行するとinput.pdfの全しおりの情報がOutput.xmlファイルに出力されます。
XMLファイルですからVBA又はVisualBasicからも入力プログラミングが可能です。
ご検討下さい。
今さらの情報かもしれませんが…ご報告します。
私もhouさんと同じような作業を行っていて試行錯誤していたのですが、PDDocではなくAVDocで画像ファイルをOpenできました(変換できました)。
あらかじめ新しいPDDocオブジェクトをCreate()しておいてから、AVDoc.Open()で画像1を開き、GetPDDoc()メソッドで取得したPDDocオブジェクトを先ほどのPDDocオブジェクトにInsertPages()して、画像1のAVDocをClose()、AVDoc.Open()で画像2を開き…
これを繰り返して、最後に保存、という感じです。
とりあえずいくつかの種類の画像タイプを試しましたが、Acrobatが対応している画像ならOKのようです。
指定したフォルダ内の「すべての画像」を結合して1つのPDFを作る、という処理なのでFileSystemObjectを併用しました。
ちなみに、私の場合はHTA(WSH)+JavaScriptで書いたのと、Acrobatはバージョン6なのですが、これらの違いは関係ないように思います。
kenkenさん。初めまして。
「・・AVDoc.Open()で画像1を開き・・」のコメントの一部をサイトの方に反映させて頂きました。
動作確認もしました。
貴重な情報提供をありがとうございます。