PDFとたわむれる

PDFとたわむれる感じで飽きるまで不定期更新blog

PDFとJavaScriptについて5 ツールバーでアイコンを使うには

2008-11-24 | Weblog
今回は、AdobeReaderのツールバーでアイコンを使う方法についてです。




マニュアルを見ると addToolButtonメソッドのパラメータとして"oIcon"がv7より追加され
"Icon Stream object"を設定すればよいことが分かります。
任意の画像ファイルから画像情報を表示するサンプルが書かれていて
**********************************
// Create a document
var myDoc = app.newDoc();
// import icon (20x20 pixels) from the file specified
myDoc.importIcon("myIcon", "/C/myIcon.jpg", 0);
// convert the icon to a stream.
oIcon = util.iconStreamFromIcon(myDoc.getIcon("myIcon"));
// close the doc now that we have grabbed the icon stream
myDoc.closeDoc(true);
// add a toolbutton
app.addToolButton({
cName: "myToolButton",
oIcon: oIcon,
cExec: "app.alert('Someone pressed me!')",
cTooltext: "Push Me!",
cEnable: true, nPos: 0 });
app.removeToolButton("myToolButton")
**********************************
とあるんですが,AdobeReaderではnewDocメソッドは使えません。
importIconはマニュアル上はAdobeReaderで使えると書いてあるんですが
うまくいきませんでした。

ツールバーにアイコンを追加するのにドキュメントが必要 というのはいまいちです。

Icon Streamを自生成する方法は他に無いのかと
マニュアルの"Icon Stream"を見ると3つのプロパティがあり

**********************************
■read(nBytes) A function that takes the number of bytes to read
and returns a hex-encoded string. The data should be the icon
representation as 32 bits per pixel with 4 channels (ARGB) or 8 bits
per channel with the channels interleaved. If the icon has multiple
layers, the function may return the pixels for the topmost layer,
followed by the next layer behind it, and so on.
■width The icon width in pixels.
■height The icon height in pixels.
**********************************

と書かれているんですが・・いまいちどう生成したらいいのか分からない
インターネット上を検索するとAdobe自体のサイトに Using Image in Acrobat JavaScript Dialog というページがありました。
このページにはダイアログボックスに 画像を表示する方法が記載されていますがアイコンについても参考になります。

まず20x20の画像ファイル(BMP,JPG,GIF,PNG..)を用意して
http://blogs.adobe.com/acdc/files/adig.jar を使用して
c:>java -jar adig.jar hoge.jpg ./
と実行すると hoge.jpg.txt が出来ます。
中を開いて一番最後にある
"var image = "ff00ff00ff00ff00・・・・・・・・・・・・・"
の部分が、変換された画像です。
16進文字列で表現されていて1Pixelが透過情報,R,G,Bが各2Byteで 8Byteで構成されています。(小文字大文字の区別は無い"ff"="FF")
(20x20だと20x20x8=3200Byteになります)
この16進文字列がIcon Streamがメインの情報で
それに各プロパティを付けてあげるとIcon Streamになります。

*****************************
var oMyIcon = {count: 0, width: 20, height: 20,
read: function(nBytes){return image.slice(this.count, this.count += nBytes);}};
*****************************

このoMyIcon(Icon Stream)をAdobeReaderが読み出す時に
countを0~399までの400Pixel分繰り返しread(8)を
実行しているんではないでしょうか。

まとめるとtoolbarでiconを使うには
*****************************
var image = "ff00ff00ff00ff00・・・・・・・・・・・・・";
var oMyIcon = {count: 0, width: 20, height: 20,
read: function(nBytes){return image.slice(this.count, this.count += nBytes);}};
app.addToolButton({
cName: "komikoni_hoge1",
oIcon: oMyIcon,
cLabel: "HOGE_TOOL",
cTooltext: "これはホゲツールです",
cExec: "hoge_tool();",
cEnable: "event.rc = (event.target != null);" } );
*****************************

のように定義してあげると最初の画像のようになります。



前回の、PopupBookmarkに透過アイコンを表示するようと
こんな感じになります



※透過アイコンについて
adig.jar自体は透過GIFや透過PNGの透過情報は無視するので
アイコンに透過を使用したい場合、自分で置換する必要が有ります。
例えば白の部分を透過にする場合、
"FFFFFFFF"を"00FFFFFF"にすれば 白の部分は透過になります。
(透過度をセルによって変えたい場合は面倒くさいですね)
なお、adig.jarの16進文字列は150Byte単位に改行されるので
置換や編集する際は8Byte単位にしたほうが便利です。 では~


最新の画像もっと見る

3 コメント

コメント日が  古い順  |   新しい順
Unknown (ばにー)
2011-03-23 10:29:15
はじめまして。
Acrobatの自作ボタンにアイコンを表示させる方法を探していて、こちらのページにたどり着きました。大変参考になります!

しかし、adig.jarをダウンロードしようとしたところリンク切れになっていて、入手できません(;_;)

ネットでいろいろ探したのですが、見つからず・・・

ほかに入手方法がありましたら、教えてください。
返信する
どうも (komikoni)
2011-03-24 02:01:50

参考にして頂いてありがとうございます。(もう2年も経ったとは)

adig.jarがリンク切れですか、、
新バージョンが出たからですかね。

ほんとに16進数にするだけなんで
ピクセル単位の情報が読めれば
簡単に同じ事出来そうな気がしますね。
私は、susie pluginを作ろうとして
断念しちゃいましたがw

需要がありそうなら、
なんかツールを作ろうかな・・・

お急ぎならadigをメールで送りますよ
アドレスは以下です。
komikoni@ジーメルドットコム
返信する
Unknown (ばにー)
2011-03-24 09:30:49
さっそくお返事いただき、ありがとうございます!!

後でメール送らせていただきます(^^)
返信する

コメントを投稿