7 返信 最新の回答 日時: Jun 18, 2008 4:02 PM ユーザー:(miya777)

    直接印刷時の警告メッセージを抑止する方法

      JavaScriptにて、直接印刷を行うアプリケーションを作成しております。
      以下に記載した<実装方法>の通りに実装すると、直接印刷は出来るのですが、『PrintAll』メソッドを実行すると『警告!スクリプトでAcrobat
      ファイルの印刷が要求されました。文書全体が印刷される可能性があります。
      印刷を実行しますか?』
      メッセージが表示されてしまいます。
      このメッセージを表示せずに印刷する方法をご存知の方、ご教授頂けないでしょうか?

      <実装方法>
      オブジェクトタグにてクラスIDを指定してAdobeReaderオブジェクトを定義する(Reader7,8はAcroPDF.dllを利用、Reader6はPDF.OCXを利用するはず )
      AdobeReaderオブジェクトの『PrintAll』メソッドにて直接印刷を行う

      <再現環境>
      AdobeReader8
      AdobeReader7
      AdobeReader6
      ※調査したAdobeReaderは、全て再現しました。
      ※AdobeReader5以前は未確認
        • 1. Re: 直接印刷時の警告メッセージを抑止する方法
          Level 1
          内容のない投稿があるので、投稿者で削除してください(投稿者には削除権があります)。

          > メッセージが表示されてしまいます。
          以下のサイトのような画面?

          http://tukaenai-pg.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/pdf.gif

          > 『PrintAll』メソッドにて直接印刷を行う
          以下のサイトでも説明があるようで。

          ・OLE Automation:AxAcroPDFLib.AxAcroPDF 一覧
          http://pdf-file.jugem.jp/?eid=79

          個人的にはprintallで警告ダイアログが出るというのでよいと思う。
          なぜなら、ユーザーが望まない形で全ページを印刷されるのは困るのでは? 例えば、500ページのPDF文書があったばあい、これをいきなり全ページ印刷されてはちょっと・・・。変なイタズラをされそうで。

          ちなみにAcrobat製品版で作成できるAcrobat Javascriptのprintメソッドには印刷ダイアログの表示/非表示のオプション、キャンセルダイアログボックス表示/非表示のオプションが用意されている。

          非サポートではあるが、「Adobe Reader を起動し、印刷ダイアログボックスを表示せずにファイルを印刷 」という手法もある。

          文書番号 : 3821
          Acrobat 8.0 SDK : Developer FAQ 日本語版
          • 2. Re: 直接印刷時の警告メッセージを抑止する方法
            Level 1
            brazil様
            ご教授頂き、ありがとう御座いました。
            また、内容のない投稿へのご指摘、別案をご教授頂き、
            どうもありがとう御座いました。

            >> メッセージが表示されてしまいます。
            >以下のサイトのような画面?
            >http://tukaenai-pg.cocolog-nifty.com/.shared/image.html?/photos/uncategorized/pdf.gif
            はい、その通りです。

            >個人的にはprintallで警告ダイアログが出るというのでよいと思う。
            確かにそうですね。これが出来ると悪意のあるコードが書けてしまいますね。

            AxAcroPDFのメソッド群を確認しても『警告!・・・』ダイアログの表示/非表示に関わる設定は見つからなかったので
            薄々は仕様だと判断しておりましたが、それが仕様だと記載したドキュメントも見つけることが出来なかったので
            『警告!・・・』ダイアログを表示せずに印刷する方法があることを期待しての投稿でした。

            >ちなみにAcrobat製品版で作成できるAcrobat Javascriptのprintメソッドには印刷ダイアログの表示/非表示のオプション、キャンセルダイアログボックス表示/非表示のオプションが用意されている。
            なるほど、Acrobat製品版でPDFドキュメントにJavascriptのコードを埋め込むと言うことですね。
            この辺り勉強不足なんですが、JavascriptのprintメソッドをPDFドキュメントに埋め込むことにより、PDFドキュメントをブラウザでオープンすると印刷ダイアログを表示するこ となく直接プリンタに出力できるかも知れないと言うことですね?
            時間を見つけて実験してみたいです。

            >非サポートではあるが、「Adobe Reader を起動し、印刷ダイアログボックスを表示せずにファイルを印刷 」という手法もある。
            非サポートとのことですが、コマンドプロンプト(Acrobat 8.0 SDK : Developer FAQ 日本語版のP24)のことでしょうか?
            『AcroRd32.exe /t path』
            コマンドプロンプトで実行すると『警告!・・・』ダイアログも表示されずに思い通りに印刷されますが、
            Webアプリケーションではセキュリティの関係で上記コマンドを発行できなかったと理解しているのでこの対応は、難しいと考えます。
            • 3. Re: 直接印刷時の警告メッセージを抑止する方法
              Level 1
              以下は当事者には周知のことなのでしょうけど。

              > Reader7,8はAcroPDF.dllを利用、Reader6はPDF.OCXを利用するはず
              以下のような情報が出てますね。

              文書番号 : 2566
              PDF 表示用 ActiveX コントロールについて (PDF.OCX / AcroPDF)

              以下のAdobeサイトだと、Adobe Reader 7.0から7.0.8までには脆弱性があり、AcroPDF.dllファイルの更新が必要とあります。

              ・Adobe ReaderおよびAdobe Acrobat 7の潜在的な脆弱性に対処するためのアップデート公開
              http://www.adobe.com/jp/support/security/bulletins/apsb06-20.html

              通常のPrint?メソッドでダイアログ無しが可能で、なおかつページ数が取得できれば、実質上はPrintAllになりませんかね?

              PrintAllメソッドは以下の仕様書で見られますね(大文字小文字は区別する?)。
              PrintPagesSilent、PrintPagesSilentExとかも気になるところ。Acrobat SDKなのでReaderとは違う?

              ・Interapplication Communication API Reference
              http://www.adobe.com/devnet/acrobat/pdfs/iac_api_reference.pdf

              Adobe Readerを起動しないで連続印刷するというフリーソフトがある。

              ・Adobe Readerを起動せずに印刷できる「PDF連続印刷」
              http://www.forest.impress.co.jp/article/2007/10/12/okiniiri.html
              • 4. Re: 直接印刷時の警告メッセージを抑止する方法
                Level 1
                ご回答、有難う御座います。

                >> Reader7,8はAcroPDF.dllを利用、Reader6はPDF.OCXを利用するはず
                >以下のような情報が出てますね。

                >文書番号 : 2566
                >PDF 表示用 ActiveX コントロールについて (PDF.OCX / AcroPDF)
                すみません、上記情報は持ってました。
                記載しないとダメでしたね。すみません。

                >通常のPrint?メソッドでダイアログ無しが可能で、なおかつページ数が取得できれば、実質上はPrintAllになりませんかね?

                >PrintAllメソッドは以下の仕様書で見られますね(大文字小文字は区別する?)。
                >PrintPagesSilent、PrintPagesSilentExとかも気になるところ。Acrobat SDKなのでReaderとは違う?
                >・Interapplication Communication API Reference
                >http://www.adobe.com/devnet/acrobat/pdfs/iac_api_reference.pdf

                Interapplication Communication API Reference の
                P106〜P119が AxAcroPDFLib.AxAcroPDF の記載ですよね。
                その中の印刷系のメソッドが以下の通りで、全て動作確認しました。
                結果は、以下の通りでした。

                ○AcroPDF.Print・・・PDFの印刷ダイアログを表示する。
                ○AcroPDF.PrintAll・・・PDFの印刷ダイアログを表示せず、『警告!・・・』ダイアログが表示される。
                ○AcroPDF.PrintAllFit・・・Fitの有無以外は、AcroPDF.PrintAllと同じ。
                ○AcroPDF.PrintPages・・・PDFの印刷ダイアログを表示せず、『警告!・・・』ダイアログが表示される。ページ指定可能。
                ○AcroPDF.PrintPagesFit・・・Fitの有無以外は、AcroPDF.PrintPagesと同じ。
                ○AcroPDF.PrintWithDialog・・・AcroPDF.Printと同じ。(と認識している)

                以下は、確かに気になりますね。
                ○AVDoc.PrintPagesSilent
                ○AVDoc.PrintPagesSilentEx

                AVDocのメソッドって、Webでも使えるのかなぁ?
                ちょっと調べてみます。

                >Adobe Readerを起動しないで連続印刷するというフリーソフトがある。

                >・Adobe Readerを起動せずに印刷できる「PDF連続印刷」
                >http://www.forest.impress.co.jp/article/2007/10/12/okiniiri.html
                情報有難う御座います。
                ヒントが隠れているかも・・・
                試してみます。
                • 5. Re: 直接印刷時の警告メッセージを抑止する方法
                  Level 1
                  気になるところを調べてみました。

                  >以下は、確かに気になりますね。
                  >○AVDoc.PrintPagesSilent
                  >○AVDoc.PrintPagesSilentEx

                  >AVDocのメソッドって、Webでも使えるのかなぁ?
                  >ちょっと調べてみます。

                  AVDoc.PrintPagesSilent は、
                  どんなダイアログボックスも表示しないで、指定された範囲のページを印刷するとのことで
                  気にはなったのですが、ブラウザウィンドウ内のPDFファイル操作するためのコントロールは、
                  AcroPDF.dll しかないと判断しました。
                  (サービス&サポート FAQ情報で検索しましたが、Webで使用できる旨の情報を得ることが出来ませんでした)

                  >>Adobe Readerを起動しないで連続印刷するというフリーソフトがある。
                  >>
                  >>・Adobe Readerを起動せずに印刷できる「PDF連続印刷」
                  >>http://www.forest.impress.co.jp/article/2007/10/12/okiniiri.html
                  >情報有難う御座います。
                  >ヒントが隠れているかも・・・
                  >試してみます。

                  『PDF連続印刷』を使用しました。
                  複数のPDFを一気に印刷できるので結構便利だと思いました。

                  処理的には、「AcroRd32.exe」の格納場所と出力プリンタ名の設定を必要とするため、

                  AcroRd32.exe /t path printername drivername portname

                  で実装していると判断しました。
                  • 6. Re: 直接印刷時の警告メッセージを抑止する方法
                    Level 1
                    > 『AcroRd32.exe /t path』
                    > コマンドプロンプトで実行すると『警告!・・・』ダイアログも表示されずに思い通りに印刷されますが、
                    > Webアプリケーションではセキュリティの関係で上記コマンドを発行できなかったと理解しているのでこの対応は、難しいと考えます。

                    署名付きJavaアプレットで、ローカルのロードモジュールを実行することができます。
                    Javaプログラミングが必須ですが、レベルとしてはかなり簡単です。
                    • 7. Re: 直接印刷時の警告メッセージを抑止する方法
                      Level 1
                      >署名付きJavaアプレットで、ローカルのロードモジュールを実行することができます。
                      >Javaプログラミングが必須ですが、レベルとしてはかなり簡単です。

                      アドバイスを頂き、有難う御座いました。
                      私の理解が浅かったと言うことですね(^^);

                      >かなり簡単です。
                      を期待してチャレンジしてみます。

                      (今日、明日は時間を取れそうに無いのでまた後日報告します)