RGraphはInternet Explorer 8でもexplorercanvasを使ってグラフを表示してくれますが、
印刷すると真っ白で画面のような出力を得られません。
そこで、IE用Canvas互換機能のライブラリをuuCanvas.jsに変更して印刷をできるようにしてみます。
まず、RGraphとuuCancasをダウンロードします。
それぞれのzipを解凍し、uuCanvas.jsをRGraphの適当なフォルダに入れておきます。
ここではexamplesフォルダのrose.htmlをuuCanvas対応にしてみます。
まず、rose.htmlのexcanvas.jsを読み込んでいるところ↓を、
<!--[if IE 8]><script src="../excanvas/excanvas.original.js"></script><![endif]-->
さきほど配置したuuCanvas.jsに変更します↓。
<!--[if IE 8]><script src="../excanvas/uuCanvas.js"></script><![endif]-->
次に、起動をonload↓から、
<script>
window.onload = function ()
{
uuCanvas.jsのxcanvasに変更します。xcanvasはCanvasの準備が整ったときにuuCanvasが実行してくれます。
<script>
window.xcanvas = function ()
{
これらの変更で、
無事に表示されました。ただ、文字が少し下にずれるのでRGraphのlibrariesフォルダにあるRGraph.common.core.jsを微調整をします。修正は3箇所。文字を上にずらし、文字を囲う枠をずらして、背景の塗り潰しもずらしています。
--- RGraph.common.core.orig.js
+++ RGraph.common.core.js
@@ -304,10 +304,13 @@
if (arguments[9]) {
context.rotate(arguments[9] / 57.3);
}
// Vertical alignment - defaults to bottom
+ if (RGraph.isIE8()) {
+ context.translate(0, - size / 2);
+ }
if (arguments[6]) {
var vAlign = arguments[6];
if (vAlign == 'center') {
context.translate(0, size / 2);
@@ -342,22 +345,22 @@
context.lineWidth = 0.5;
if (arguments[8]) {
var width = context.measureText(text).width;
- var ieOffset = RGraph.isIE8() ? 2 : 0;
+ var ieOffset = RGraph.isIE8() ? -5 : 0;
context.translate(x, y);
context.strokeRect(0 - 3, 0 - 3 - size - ieOffset, width + 6, 0 + size + 6);
/**
* If requested, draw a background for the text
*/
if (arguments[10]) {
var offset = 3;
- var ieOffset = RGraph.isIE8() ? 2 : 0;
+ var ieOffset = RGraph.isIE8() ? -5 : 0;
var width = context.measureText(text).width
//context.strokeStyle = 'gray';
context.fillStyle = arguments[10];
context.fillRect(x - offset, y - size - offset - ieOffset, width + (2 * offset), size + (2 * offset));
これで画面での表示も、
印刷もうまくいくようになりました。
グリッドの同心円が印刷されていませんが、細かいところは気にしないことに。








0 件のコメント:
コメントを投稿