HTMLの内容をwkhtmltopdfでPDF化するときに、グラフの縦軸ラベルのような縦書き表示のCSSが適用されなかった。
Java側でやるのも面倒だったので、Velocity側で無理やり逆順にしてCSSで回転させるようにした。
その時にVelocityのマクロを作ったのでメモ。(今後使うことあるのかな・・)
#macro( StrReverseConv $str )
#if( $str ) ## nullだった場合は何も表示しない
#set( $len = $str.length() - 1 ) ## 文字列のサイズ
#set( $spStr = $str.split("")) ## 文字列を配列にする(ループ用)
#foreach ( $s in $spStr )
#if( $str.charAt( $len ) == " " ) ## スペースはそのまま表示すると消えてしまうので変換する
<div> </div>
#else
<div>$str.charAt( $len )</div>
#end
#set ( $len = $len - 1 )
#end
#end
#end
マクロを使いたいvmファイルの最初に「#parse( "Macro.vm" )」と定義して以下のように使うと以下のように出力される。
#StrReverseConv( "ABCDE" )
↓
<div>E</div>
<div>D</div>
<div>C</div>
<div>B</div>
<div>A</div>
エスケープ処理をしていないので文字列に「<」とか「>」が来ると正常に表示できない。エスケープ文字が入る可能性があるときはエスケープ文字の変換を忘れずに!
あとはCSSで「transform: rotate(-90deg)」とか「line-height」で行間を調整すれば似非縦軸ラベルの出来上がり。
Firofox、Chrome、IEで試したけどどれも同じ表示になってて満足。
ブラウザによって縦書きモードの「text-orientation」が効かなかったりPDF化したときに表示が崩れたりするので、こんな感じになった。
どのブラウザでも統一して表示できる縦書きモードがあったらいいのになぁ。
※というかすごいね。QiitaはVelocityのシンタックスもあるのね。驚き。