今回は、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単位にしたほうが便利です。
では~