- PR -

ScriptXを使用した印刷

1
投稿者投稿内容
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2003-09-01 13:48
CrystalReportで作成した帳票を、Webフォームから印刷する処理を作成しています。
プレビューありとなしの両方を選択できるように、という仕様なのですが
プレビューなしの印刷の方法で悩んでいます。

当初はPrintToPrinterを使うつもりだったのですが
これだとサーバ側のプリンタからしか印刷できないということなので、
他に何かないかと、色々調べたところ、ScriptXというものを見つけました。
これを使用し「新規画面に帳票を表示→印刷→新規画面をclose」
(一度表示はされるがユーザ操作無しで印刷可能)という処理を行えば
どうにかなるのではと思い、調べてみたのですが
VB.netでの実装方法がどうにも分かりません。

どなたかScriptXの使用方法をご存じの方、
あるいは、もっと別の方法をご存じの方
いらっしゃいましたらご教授下さい。よろしくお願い致します。
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2003-09-02 11:52
レスが付かないようなので、あまり詳しくないのですが。。。

ScriptXは.NETとは無関係のクライアントサイドの技術です。
VB.NETとは別に考えた方が良いのでは?

使い方は、HTMLにOBJECTタグでScriptXを実装して
Javascriptで操作するのが一般的です。

CrystalReportを利用したことがないので詳しい状況が想像つかないのですが、
「新規画面に帳票を表示」のASPXファイルの<HTML></HTML>のあいだに
<OBJECT ID="PRT" CLASSID="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" ・・・>
</OBJECT>
を書き込んで、さらにクライアントJavascriptを埋め込めばよいのではないでしょうか?
この場合ならOnLoadイベントか、大事をとってSetTimeoutを使ってロード後0.5秒後あたりとかですか。印刷終了後もインターバルを少しあけて画面を閉じる方が安全かもしれません。
VB.NETからデバックできるかどうかはまったく不明です。
あと当たり前ですが、IE限定です。他ブラウザ用対策が必要ならご注意を。
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2003-09-02 18:04
mitoさん、ご返答ありがとうございます。

> 使い方は、HTMLにOBJECTタグでScriptXを実装して
> Javascriptで操作するのが一般的です。

昨日の投稿後に自分でも調べたみて、同じ結論に達しました。安心しました。
それで、サンプルコードを参考に、試してみているのですが、どうも上手くいきません。
参照設定にScriptXを追加して、aspxファイルのヘッダに以下のように書き込んでみました。
ページ表示時にActiveXを読み込む旨の注意が出るので、ScriptXの実装は
上手くいっていると思うのですが、ボタンクリック時には読み込んでいる様子の後
何も起こりません。

このようにごく単純なコードなんですが、一体なにがいけないのでしょうか?
よろしければ、ご助言をお願い致します。

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
<SCRIPT language="javascript" id="clientEventHandlersJS">
<!--
   function button1_onclick() {
     factory.printing.Print(true);
   }
-->
</SCRIPT>
<!-- MeadCo ScriptX -->
<OBJECT id=factory style="DISPLAY: none"
   codeBase=ScriptX.cab#Version=6,1,429,14
   classid=clsid:1663ed61-23eb-11d2-b92f-008048fdd814 viewastext>
<PARAM NAME="__PX__disablePrint" VALUE="3052">
</OBJECT>
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Javascriptの呼び出しのタイミング等は、これが動いてから
参考にさせて頂きます…(^^;
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2003-09-02 19:22
私も詳しくはないのです。
とりあえず、以下のHTMLで動いています。
Web上に表示されたページのソースと比べてみてください。

<HTML>
<HEAD>

<!-- MeadCo ScriptX Control -->
<object id="factory" style="display:none" viewastext
classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
codebase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,430,5">
</object>

<SCRIPT language="javascript" id="clientEventHandlersJS">
<!--
function button1_onclick() {
factory.printing.Print(true);
}
-->
</SCRIPT>
</HEAD>

<BODY>
テスト印字 By ScriptX
<INPUT TYPE="button" VALUE="PrintX" onClick="button1_onclick()">
</BODY>

</HTML>

ちなみに
<PARAM NAME="__PX__disablePrint" VALUE="3052">
これを入れるとイントラ環境でもIEに警告されます。これ何ですか?

>ボタンクリック時には読み込んでいる様子の後何も起こりません。
このコードならすぐにプリンタダイアログが表示されるのですが、
ソースを確認してJavascriptのbutton1_onclickが呼ばれているか確認ください。
あとIEの設定でスクリプトのエラーを表示するようになっていないと、
エラーが起きていても何も表示しません。ご注意ください。
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2003-09-02 21:06
早速のお返事ありがとうございます!
無事印刷できました。
二日ほど一人で悩んでいたので、本当にありがたいです

<PARAM NAME="__PX__disablePrint" VALUE="3052">
↑この一文が原因だったようです。
これ、aspxのhtml編集画面で<OBJECT id="factory"・・・を書き込んだ後に
デザイン画面に移ると自動挿入されるんです。
デザイン画面に移る前に実行すると、きちんと印刷されました。
やはり、ダイアログなしで印刷させるようなスクリプトは、オススメできない
ということなんでしょうか…。

なんにせよ、これで解決…と言えれば良いのですが
もうひとつよろしいでしょうか。

印刷のタイミングなのですが、
実は、Page_LoadイベントでCristalreportからエクスポートしたPDFファイルを
表示させる処理を行っています。この、表示させたファイルを印刷したいのです。
なんというか、2度手間なことをやっているな…とは思うのですが
VBの処理を行ったあと、JavaScriptを呼び出す方法はあるでしょうか?

ScriptXとは離れてしまいますので、もし不適切なようでしたら別スレを立てます。
よろしくお願い致します。
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2003-09-03 11:34
>Page_LoadイベントでCristalreportからエクスポートしたPDFファイルを表示させる
えっと、ちょっと待ってください。
「新規画面に帳票を表示→印刷→新規画面をclose」の帳票はPDFファイルですか?
HTMLファイルではなくて・・・
この場合、PDFの印刷機能を使って印刷するべきではないのでしょうか?
そもそもクライアントJAVASCRIPTを組み込む余地がないというか・・・

通常のHTMLファイルなら
<BODY onLOAD="LoadPrint()">
のようにクライアントJavascriptを実装するのですが、サーバーから送信されるファイルがPDFファイルだとPDFの形式ですからHTMLの形式のScriptXのObjectタグもScriptタグも存在させえません。
PDFにも独自のスクリプトを組み込む機能がありますが、Cristalreportがそれをサポートしているとは思えませんし。。。

思いっきり暗礁に乗り上げているような気がします。
例えるならExcelのファイルを新しい画面に表示して自動で印刷させるようなものです。
Excelの機能であるマクロを使うなら出来ますが、Javascript等からは通常出来ません。
ScriptXとはまったく関係ないので、別スレッドを立てて相談した方が良いかもしれません。
お役に立てず、申し訳ありません。
neri
会議室デビュー日: 2003/06/17
投稿数: 18
投稿日時: 2003-09-03 12:04
ご返答ありがとうございます。

> この場合、PDFの印刷機能を使って印刷するべきではないのでしょうか?
> そもそもクライアントJAVASCRIPTを組み込む余地がないというか・・・

ほんとうにそうですね(苦笑)。
先ほど気づいて(遅い)投稿しようとしていたところです。
最初に書いたように、プレビュー有無の両方を選択できるようにという仕様で、
有の方はPDFの印刷機能を使って手動で印刷、という方法を取っていたので
それと見た目を合わせるために、PDFファイルをブラウザから印刷できないか、
と単純に考えていました。
最初から説明していれば良かったですね。お手を煩わせてしまって申し訳ないです。

ちなみにScriptXのライセンスを購入すると「printing.BatchPrintPDF();」
でデフォルトプリンタにPDFの印刷ができるようなのですが…

今後の方針についてはもう少し検討してみます。
どうもありがとうございました!
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2003-09-03 14:04
BatchPrintPDF(URL)こんなメソッドあったんですね。
これを使うなら
1、新規子画面にScriptXを貼り付けたHTML(aspx)を開いて
2、onLoadイベントでBatchPrintPDF('Report.aspx')で印刷
3、WaitForSpoolingCompleteメソッドを利用して子画面閉じる
で処理できるかもしれません。(Report.aspxはPDFファイルを返す帳票出力aspx)
新規子画面のHTMLには印刷中です、お待ちくださいとでも出しておけば気にならないはず。
もっともPOSTはできないのでReport.aspxに渡す引数はセッション変数に格納するしかないですが。

ちゃんとDocument読めって感じで申し訳ないです。英語苦手で目を通す気力が・・・(笑)
勉強になりました。
1

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