- - PR -
印刷の制御について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-10-12 17:38
お世話になります。
JavaScriptの質問なのですが、書き込み先がわからなかったので・・ よろしくお願いします。 現状なのですが、Divタグで一覧を100行表示してあるページがあります。 そこで、印刷を行う時に、以下のコードを書いています。 function beforePrint(){ divData = document.all.tags("DIV"); for(i=0;i<divData.length ;i++){ wCT[i] = divData[i].style.cssText; divData[i].style.height="auto"; divData[i].style.overflow="visible"; divData[i].style.position="static"; divData[i].style.top="auto"; } } function afterPrint(){ divData = document.all.tags("DIV"); for(i=0;i<divData.length ;i++){ divData[i].style.cssText = wCT[i] ; } } <BODY onbeforeprint="beforePrint()" onafterprint="afterPrint()"> しかし、上記の書き方に原因があるのかは不明なのですが、印刷しようとすると本来は100行あるはずだから、数ページに渡り100行全て印刷できるというのが理想なのですが、現状は1ページで25件しか印刷されません。 今回の場合だと、一覧が4ページにわたり100行全て印刷するには、どのように対処すればよろしいでしょうか?質問が下手で申し訳ありませんが、ご教授お願いします。 具体的だと嬉しいです。 |
|
投稿日時: 2005-10-12 19:08
こんにちは、でっちです。
想像ですが、DIVのStyleでheightが指定されていて、スクリプトエラーによってその設定が クリアされていないのではないでしょうか? onbeforeprint、onafterprintではスクリプトエラーがあっても通知されないようですし。 ソースからすると、2つの関数で共通の変数配列"wCT"の宣言がないのが気になります。 きちんとfunctionの外で宣言されていますか? そちらに問題がないのであれば、元々のDIVに設定されているStyleの指定が何か悪さをして いるのかもしれません。 よければそちらも書いておいて下さい。 |
|
投稿日時: 2005-10-13 09:25
でっちさん、ご返答ありがとうございます。
変数配列"wCT"に関してはfunction外で宣言はしてあります。 使用しているDivタグを下記に書き込みます。 <DIV style="width:753px; height:263px; overflow-y: auto"> 上のDIVタグに下記のTABLEタグを組み込んでいます。 <TABLE width="753" border="1" cellspacing="0" style="FONT-SIZE: 12px;"> 確かにでっちさんのご指摘の通り、DIVのStyleでheight指定を行っていますが、印刷ができないのは、それが原因なのでしょうか? 申し訳ありませんが、よろしくお願いします。 |
|
投稿日時: 2005-10-13 15:29
こんにちは、でっちです。
ちょっと質問を読み違えてたようです。申し訳ない。 まずは、問題を切り分けてみた方が良いと思いますので、以下についてご回答下さい。 1.スクリプトエラー等は起きていませんか? 2.印刷される1ページについて、期待通りのレイアウトに変更されていますか? 3.25行印刷されるとのことですが、それで用紙が一杯になっていますか? そこでの改ページは想定された通りのものですか? 4.印刷対象のWebページのソースを保存し、スクリプトで行っているスタイルの変更処理を 手動で施した場合でも同様の現象は発生しますか? 5.他のページ(通常のWebページで試すのが良いかと思います)を印刷した場合、全ページ印刷されますか? 6.別のプリンタで印刷してみても同様の結果になりますか? |
|
投稿日時: 2005-10-13 23:19
でっち6号さんがおっしゃってることに加えて、
そもそもの要件が伝わりにくいと思います。 これは、ブラウザで見るときは縦スクロールを表示し、 印刷する時はそれでは困るので、全行印刷したい、という感じであってますか? 私の認識があっていれば、確かにこの現象、起きますね(当方IE6+HPの古いプリンタ) 原因はわかりませんが「overflow-y」を「overflow」に変えたら ちゃんと複数ページになりました。(実際印刷はしてません、プレビューで確認) (横スクロールが表示されちゃいましたが)。ちなみに「overflow-y」はIE独自の 仕様だったと思います。 少し話がそれますが(本題なんですが)下記のように、ブラウザで見るときと、 印刷時に適用されるスタイルとを分けて定義できますよ。(IE6でしか確認してません) <style> @media print{ div{ overflow:visible; } } @media screen{ div{ overflow:scroll; width:753px; height:263px;} } </style> [ メッセージ編集済み 編集者: べる 編集日時 2005-10-13 23:20 ] |
1