Tkhtmlは、tcltk で html を表示するための拡張です。 他のライブラリ同様、Visual Studio 2008でビルドしたかったので、 ビルド用のバッチファイルを作成してみました。
BSDライセンスです。詳しくは配布物のソースをご参照下さい。
下記のように書くことで、表示しているhtmlを画像ファイルとして保存できるようになっているようです。
html .h ... set img [.h image]; $img write hoge.gif -format gif;ただし、何故かWindowsでは使えないようにしてあります(Windowsで実施すると、TclTkがフリーズしてしまいます)。 ソースを確認すると、htmlimage.c の1044行目以降にあるWindowsとそれ以外での場合わけが該当する箇所のようです。 1044行目の #ifndef WIN32 を #if 1 と書き換えて再ビルドしてみたところ、Windows でも画像の保存ができましたが この状態だと、ディスプレイに表示できるウィンドウサイズよりも内容の方が大きい場合、画像が欠けてしまうようです。 さらに htmldraw.c の3320~3321行をコメントアウトすることで、欠ける現象も回避できました。
htmlimage.c の一部
... 1039: * Side effects: 1040: * None. 1041: * 1042: *--------------------------------------------------------------------------- 1043: */ 1044:#if 1 /* この行には #ifndef Win32 と書いてあったが、これを #if 1 に書き換える */ 1045:#include <X11/Xutil.h> 1046:Tcl_Obj *HtmlXImageToImage(pTree, pXImage, w, h) 1047: HtmlTree *pTree; 1048: XImage *pXImage; 1049: int w; 1050: int h; 1051:{ ...
htmldraw.c の一部
... 3317: w = pTree->canvas.right; 3318: h = pTree->canvas.bottom; 3319: Tk_MakeWindowExist(pTree->tkwin); 3320: /* w = Tk_Width(pTree->tkwin); // この行と 3321: h = Tk_Height(pTree->tkwin);// この行をコメントアウト */ 3322: assert(w >= 0 && h >= 0); 3323: if (w>0 && h>0) { ...
これでうまく動くように見えますが、わざわざWindowsのときだけ場合分けしてあるのには 何か理由があるかもしれません。この修正を適用する場合はその点をご留意下さい。