Rjb経由でPOI使ってパワーポイントに画像を貼り付けてみた
はてブロでまだrubyのシンタックスハイライトが使えないので、gist貼りつけてみた。
これで、rubyでPOIを使ってパワーポイントに画像を貼り付けられます。(需要あるんだろか?)
途中の、
idx = ppt._invoke('addPicture', 'Ljava.io.File;I', file_class.new("./github.png"), picture_class.PNG)
が悩みました。
普通に呼ぶとエラー。
1.8.7-p352 :026 > idx = ppt.addPicture(file_class.new("./github.png"), picture_class.PNG) RuntimeError: can't coerce to byte array from (irb):26:in `method_missing' from (irb):26
正直まだよくわかっていないのだけれど、
rubyにはbyte[]型がないため、明示的に型を指定する必要があるらしい。
http://www.artonx.org/collabo/backyard/?BridgeBetweenStrongAndLoose
http://www.artonx.org/collabo/backyard/?InvokingMethodWithoutTypeSignature
指定の仕方は上記の通り。
型の部分はppt.java_methodsとすればaddPicture()の定義が見つかる。
addPicture([[BI, Ljava.io.File;I])
なんか見慣れないやつ
[[BI, Ljava.io.File;I]
これは多分、
「[BI」 と 「Ljava.io.File;I」 の配列で、オーバーロードを表現しているのかなと思います。
それで、今回はファイルクラスを指定する必要があるので、
「Ljava.io.File;I」を使う、、のかなと。
あ、ちなみに環境はMac Lionで、
Rjbロード時に、'-Djava.awt.headless=true'を付けないとエラーになったりもします。