またしても悩ましいCrystal Reportsの件なんですが、
PDFファイル上で縦書きにするには
指定フォントの前に@がついてればおk
例えばMSゴシックの縦書きにしたいなら
「@MS ゴシック」を選択するなど。。
だがしかしですね。ASP.NETのCrystalReportViewerでプレビューしてみたところ
どうも縦書きになってくれません。
仕方ないので、間に合わせでCSSファイルに
writing-mode: tb-rl;
と書いてみました。
すると、まぁ確かに拡大率が100%だと見栄えがよさげ。
(このスタイルシートは非対応が多いのでちょっとデンジャーだけど)
でも他の拡大率に変更しても、文字サイズが変化しなくて
プレビューレイアウトがかなり悲惨。
そこで拡大率に合わせて(25%とか50%とか一定の数しかなかったので)
拡大率分だけStyleSheetを作成。
.zoom[倍率]{
writing-mode: tb-rl;
font-size: [適宜];
}
例えば、拡大率25%なら「zoom25」400%なら「zoom400」とかって名前にする。
次に、CrystalReportsで
パラメータフィールドを作成して、
なんかテキトーに分かり易い名前をつける。
今回は「
zoomSize」って名前にしときます。ナンセンスだけど。
で、このパラメータフィールドの書式設定>CSSクラス名にある
「×2」のボタンを押して、いけ好かないCrystal構文を書きます。
if{?zoomSize} = [倍率] then
"[スタイルシート名]"
else if{?zoomSize} = [さっき書いたのと違う倍率] then
:
:
とこんなカンジで倍率分だけスタイルシート名を定義します。
かなりアナログ的でしんどいです。
んで、CrystalReportViewerイベントのViewZoomを設定して
使用しているページのコードビハインドに加筆。
protected void [ビューワID]_ViewZoom(object source, CrystalDecisions.Web.ZoomEventArgs e)
{
zoomSize = e.NewZoomFactor;
//レポートの作成
[レポートオブジェクトの定義]
//レポートのzoomSizeパラメータにzoomSizeに入れた値(拡大率)をセット
[レポートオブジェクト].SetParameterValue("zoomSize", zoomSize);
//レポートビューワにレポートをバインド
[ビューワID].ReportSource = レポートオブジェクト
}
Protected int zoomSize
{
set
{
ViewState["zoomSize"] = value;
}
get
{
return (int) ViewState["zoomSize"];
}
}
とまぁコレで見かけ上なんとなくCrystalReportViewer上でも
拡大サイズに合わせて綺麗に見えるようになったワケだけど
…どうもきちゃないな(´・ω・`)
PR