C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: サーバにあるPDFファイルをクライント側から直接印刷する方法


(過去ログ 83 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■49196 / inTopicNo.1)  サーバにあるPDFファイルをクライント側から直接印刷する方法
  
□投稿者/ MATSU (1回)-(2010/04/26(Mon) 17:40:57)

分類:[.NET 全般] 

こんにちは
いつも拝見し参考にさせて頂いております。

早速なのですが、タイトル通りのご質問をさせていただきます。

現在業務用Webアプリケーションを作成しています。
その中の機能で、ユーザー毎にPDFファイルがサーバーに登録されていて、ある画面で一覧で表示されたユーザーを選択し、
「印刷」ボタンを押すと複数のPDFを開かずに直接印刷するような機能を作っています。
↑とてもわかりずらい説明で申し訳ないので簡単な図解を…。
========PDF一括印刷===============
|選|ユーザー名 |PDFファイル名 |
+--+---------+----------+
|□|ユーザーA|user_a.pdf|
|■|ユーザーB|user_b.pdf|
|□|ユーザーC|user_c.pdf|
|■|ユーザーD|user_d.pdf|
                     [印刷]
※上記■のユーザーのPDFファイルを印刷します。
==================================

現状、JavaScript(ActiveX)を使用して下記のように制御していますが、どうしても最後のPDFを印刷した後に空のAdobe Readerが
起動したままになってしまいます、印刷するたびにAdobe Readerを閉じなければならないとのことで、
下記方法がだめになってしまったので、なにかいい方法があればご教授していただきたいです。
あと開発環境と動作環境は下記のとおりです。
○開発環境
ASP.NET / C# 
○動作環境
Windows2000 / IE6 / Adobe Reader 7

テストのために変なコメントありますがお許しください。無理やり処理させてる感もいっぱいです。
= C# ===============================================
protected void Print_Click(object sender, EventArgs e)
{
        String FilePathList;
        for (int i = 0; i < GridView_ReceiptManage.Rows.Count; i++)
        {
            if (((CheckBox)GridView_ReceiptManage.Rows[i].Cells[0].Controls[0]).Checked)
            {
                //JavaScriptでsplit処理させるため、最後に","を付与
                FilePathList += @"\\サーバーパス\" + GridView_ReceiptManage.Rows[i].Cells[2].Text + ",";
            }
        }
        //BodyにJavaScript埋め込み
        Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), String.Empty,
                String.Format("<body onload=\"PrintPdfFile('{0}')\"></body>", FilePathList ));
}
====================================================
= JavaScript =======================================
function PrintPdfFile(FilePathList)
{
    //複数PDF出力ファイルパスを配列に格納
    var sList = FilePathList.split(",");
    //最後の","分を引く
    var iCnt = sList.length - 1;
    //選択されたPDFファイル分回す
    for (i=0; i < iCnt; i++) 
    {
        var objFSO, objOpenedFile;
        var strFile;
        strFile = sList[i];
        if(strFile == null || strFile == "")
            break;
        try 
        {
            // ActiveXObjectを作成
            objFSO = new ActiveXObject("WScript.Shell");
        }
        catch( e )
        {
            // ActiveXObject生成失敗
            window.alert("ActiveXオブジェクトを生成できませんでした。IEのセキュリティー低くしてください。");
            break;
        }
        try 
        {            
            //AdobReader起動(デフォルトプリンターに直印刷・新規インスタンスでOpen)
            //,起動画面と同サイズで最前面に起動,プロセス終了待たずに次処理
            objOpenedFile = objFSO.Run("ACRORD32.EXE /t /n " + strFile, 5, false); 
            
            //=====無理やり終了させる処理追加・・・。START=======================================================
            var objCLOSE;
            objCLOSE = new ActiveXObject("WScript.Shell");
			
            //★パターン1【taskkill.exeでプロセス終了させてみる。】
            //思ったらtaskkillはXPのみのコマンドだった・・・。だめじゃん
            //objCLOSED = objCLOSE.Run("taskkill ACRORD32.EXE", 5, false); 
            
            //★パターン2【SendKeysメソッドで終了キーを送ってみる。】
            // SendKeys メソッドを使用する
            //アクロバットリーダーをアクティブにする
            objCLOSE.AppActivate("ACRORD32.EXE");
            //[Ctrl + Q]を押下処理で終了させてみる。
            objCLOSE.SendKeys("^(Q)");   //うまく動きませんでした。
            
            objCLOSE = null;
            //=====無理やり終了させる処理追加・・・。END=================================================
            objFSO = null;
        }
        catch( e )
        {//WScript実行中エラー
            window.alert("Adobe Readerの起動に失敗しました。");
            break;
        }
    }
}
====================================================

長くなってしまい申し訳ありませんがよろしくお願いします。

引用返信 編集キー/
■49211 / inTopicNo.2)  Re[1]: サーバにあるPDFファイルをクライント側から直接印刷する方法
□投稿者/ 金魚 (1回)-(2010/04/27(Tue) 09:46:57)
金魚 さんの Web サイト
通りすがりです。

taskkillってXPのみですか?自分はVistaですが使ってますよ。
下記にはXP ProとVista以降は使えるとありますけど
http://pc-zero.jp/technic/taskkill.html

VBScriptでプロセス終了がありましたがIEのみかな・・・
http://www.whitire.com/vbs/tips0198.html

引用返信 編集キー/
■49245 / inTopicNo.3)  Re[1]: サーバにあるPDFファイルをクライント側から直接印刷する方法
□投稿者/ やじゅ (1599回)-(2010/04/28(Wed) 00:06:44)
やじゅ さんの Web サイト
2010/04/28(Wed) 00:40:45 編集(投稿者)
2010/04/28(Wed) 00:39:47 編集(投稿者)

No49196 (MATSU さん) に返信
> 現状、JavaScript(ActiveX)を使用して下記のように制御していますが、どうしても最後のPDFを印刷した後に空のAdobe Readerが
> 起動したままになってしまいます、印刷するたびにAdobe Readerを閉じなければならないとのことで、

Adobe Reader 7.0なら、/cjs を使ってみるとか でも8.1で廃止
close just started ? 新規に起こしたときだけウィンドウを閉じる?

Adobe Reader 7.0のPDFファイルの関連付けを改善する。
http://scripting.cocolog-nifty.com/blog/2007/01/adobe_reader_7p_9f62.html
http://scripting.cocolog-nifty.com/blog/2007/01/pdfadobereader7_8a57.html
http://forums.adobe.com/thread/406574

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -