pdfやhtmlを印刷したいと思います。
これを自動で印刷する、しかもキーボード操作なしで、アドレスをブラウザに入力してページに遷移しただけで印刷するjavascriptはできますか?IE8を想定しています。セキュリティの設定などはあらかじめ任意に設定できるものとします。
pdfは「pdfを表示するhtmlに自動印刷のjavascriptを記述したもの」で印刷して、
htmlは「htmlに自動印刷のjavascriptを記述したもの」で印刷する、
そのjavascriptについてお聞きしたいと思います。
●VBA IE操作 JavaScriptの挿入(promptとalertをつぶす)
http://ken3-info.blog.ocn.ne.jp/objie/2010/04/vba_ie_javascri.html
標準関数であるpromptやalertを上書きする処理ですが、これを応用してできるのではないかと思いましたが、知識が足りませんので皆様のお力をお借りしたいと思いました。
その他、追加事項をコメント欄に書きました。よろしくお願いします♪
【1】ブラウザ外部の部分まで自動化はできません
ブラウザ内部から印刷の自動実行が実現出来てしまうと、
ブラウザクラッシャーどころの騒ぎではなくなってしまいます
(ページを開くだけで大量に自動プリントされたら大変ですよね)
ただし、HTMLであれば下記で印刷ダイアログが出るところまでは自動化できます
<body onload="self.print();">
関数として定義しておくならば下記のようになります
<script type="text/javascript"> <!-- function autoPrint() { self.print(); } //--> </script> </head> <body onload="autoPrint();">
【2】PDFプラグインの監視や制御は見当たりません
PDFはブラウザに組み込まれたプラグインが独自に非同期通信を行うため、
監視(完全に読み込まれたかどうかの判断など)も制御(印刷など)も用意されていないようです
【3】外部からであれば可能であるかもしれません
今回の質問と路線が逆(内から外ではなく、外から内)なので参考までとさせていただきますが、
VBAなどを使ってIE8やAdobeReaderを操作するという形でよければ可能かもしれません
(1)HTML
VBA+IEでWEBページが表示されるまで待ってからブラウザの印刷機能を使えば良いでしょう
印刷に関しては、こちらもken3さんが示してくださってますので検証は楽でしょう
http://ken3-info.blog.ocn.ne.jp/day/2009/06/qa_vba_ie_9a3d.html
(2)PDF
VBA+AdobeReaderで同様のことが可能なようですが、こちらは経験ありません
http://kb2.adobe.com/jp/cps/255/2556.html
Adobe Reader 7.0 と Adobe Reader 8.0 では DDE メッセージによるコントロールに加えて、
OLE オートメーションを利用して PDF 文書の閲覧や印刷を制御することが可能です。
古いものですが8.0の開発者向けガイドです
http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CCoQFjAA&u...
できればpdfやhtmlの種類によって、印刷するトレーも分けて指定したい。
使用するのは
●DocuPrint 205 N3300012 富士ゼロックス
http://www.amazon.co.jp/dp/product/B0002FGIOU
で2台並べて合計4トレー、4パターンの印刷を可能にしたいです。
【2】についてはもっともっと調べてみれば、
もしかすれば「監視できる」という情報が見つかるかもしれませんが、
【1】の制約のほうが強力なので、つっこんだ調査はしてません
ScriptX って ActiveX があるんですわ。
印刷ダイアログをすっ飛ばしたり、トレーの指定とかが javascript からできる。
でも、自分で使う分には良いけど、仕事で使うのは注意してね。
最新のバージョンではどうか知らんけど、リソースリークをしたり、フリーズしたりする、ってのを聞いたことがあるから。
PrintPDF とか BatchPrintPDF というようなメソッドもあって、PDF の印刷もできるんだけど、
Acrobat Reader の V4 とか V5 じゃないと問題が出る、って書いてある。
http://www.meadroid.com/scriptx/docs/printdoc.asp#PrintPDF
ライセンスにも注意してね。
スパム投稿者がまた出没していますので、回答オープン前にご注意ください。
id:hgijgbnfhfgは、質問と関係のないURLを投稿しています。
http://q.hatena.ne.jp/1288418686#a1044738
http://q.hatena.ne.jp/1288417880#a1044739
http://q.hatena.ne.jp/1288446042#a1044714
外部から操作するなら出来そうな気がするんですけど。
補足をありがとうございます。
>a-kuma3さん
ありがとうございます。
「ScriptXを使えば、(フリーズやリソースリーク等のバグが出るかもしれないけど、ライセンスに注して使用すれば)可能」ということでしょうか。
印刷はPDFだけじゃなくHTMLにも対応したいので、「PrintPDF とか BatchPrintPDFとかのメソッド」の利用はちょっと自分の中では保留です。ScriptXが熱いですね♪
>rouge_2008さん
ありがとうございます。あやうくオープンしそうになりました。
>Silvanusさん
そうですね、できるだけクライアントにはブラウザ以外のアプリを使わせたくないのですが、最悪VBA等マクロの導入やアプリインストールでも良いです。できるだけ簡便な導入で、できることは全てブラウザにやらせたいと思っています。
というオチ。il||li _| ̄|○ il||li
Googleガジェットさ~~ん、ばーかーやーろー!www
でも、しらべて出来たから、回答載せときます。
以下、Python
import win32com.client
READYSTATE_COMPLITE = 4
OLECMDEXECOPT_DONTPROMPTUSER = 2
OLECMDID_PRINT = 6
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = True
ie.Navigate("http://www.google.com")
while ie.ReadyState != READYSTATE_COMPLITE:
pass
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER)
このように、COMを使えばできます。
ついでなので、JavaScript版もつくってみます。
READYSTATE_COMPLITE = 4;
OLECMDEXECOPT_DONTPROMPTUSER = 2;
OLECMDID_PRINT = 6;
var ie = WScript.CreateObject("InternetExplorer.Application");
ie.Visible = true;
ie.Navigate("http://www.google.com");
while (ie.ReadyState != READYSTATE_COMPLITE);
;
ie.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER);
できました。ヽ(´ー`)ノ
OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
なんてあったんですね!
このモジュールは若干諦めたんですが、
javascriptも知れて勉強になりました。
何でもできるものなんですね。