- PR -

印刷の制御について

1
投稿者投稿内容
Dra
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 111
投稿日時: 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行全て印刷するには、どのように対処すればよろしいでしょうか?質問が下手で申し訳ありませんが、ご教授お願いします。

具体的だと嬉しいです。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-10-12 19:08
こんにちは、でっちです。

想像ですが、DIVのStyleでheightが指定されていて、スクリプトエラーによってその設定が
クリアされていないのではないでしょうか?
onbeforeprint、onafterprintではスクリプトエラーがあっても通知されないようですし。
ソースからすると、2つの関数で共通の変数配列"wCT"の宣言がないのが気になります。
きちんとfunctionの外で宣言されていますか?

そちらに問題がないのであれば、元々のDIVに設定されているStyleの指定が何か悪さをして
いるのかもしれません。
よければそちらも書いておいて下さい。
Dra
大ベテラン
会議室デビュー日: 2004/10/04
投稿数: 111
投稿日時: 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指定を行っていますが、印刷ができないのは、それが原因なのでしょうか?

申し訳ありませんが、よろしくお願いします。
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-10-13 15:29
こんにちは、でっちです。

ちょっと質問を読み違えてたようです。申し訳ない。
まずは、問題を切り分けてみた方が良いと思いますので、以下についてご回答下さい。

1.スクリプトエラー等は起きていませんか?
2.印刷される1ページについて、期待通りのレイアウトに変更されていますか?
3.25行印刷されるとのことですが、それで用紙が一杯になっていますか?
 そこでの改ページは想定された通りのものですか?
4.印刷対象のWebページのソースを保存し、スクリプトで行っているスタイルの変更処理を
 手動で施した場合でも同様の現象は発生しますか?
5.他のページ(通常のWebページで試すのが良いかと思います)を印刷した場合、全ページ印刷されますか?
6.別のプリンタで印刷してみても同様の結果になりますか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)