- PR -

Plug-inを用いたAppletの印刷をしたい

1
投稿者投稿内容
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2003-01-06 19:06
こんにちは。Appletの印刷についてご質問します。
(環境は、OSはWindows98・2000、ブラウザはIE5.0〜6.0限定です。)

■ブラウザからの印刷■
 Plug-inを使用したアプレットを含むWebページを印刷したいのですが
 ブラウザの印刷機能で印刷すると、端末の環境によってアプレット領域が
 空白になったり真っ黒になったりアイコン表示されたりして、正しく印刷されません。
 ネットで調べたところ、NetscapeNavigatorでの不具合についてはよく見かけましたが
 IEで印刷出来ないという情報はほとんどありませんでした。
 IEのブラウザ機能から、Plug-inアプレットを正しく印刷することは出来るのでしょうか?

■Javaからの印刷■
 Java2Dからプログラミングで印刷させる場合、調べてみたところ
 大体以下のコーディングで実現するのが通常のようでした。

Toolkit tk = Toolkit.getDefaultToolkit();
PrintJob pj = tk.getPrintJob((Frame)getParent(), "Print", null);
if (pj != null) {
Graphics g = pj.getGraphics();
this.printAll(g);
g.dispose();
pj.end();
}
 
 しかし、Plug-inを使用しているため、2行目のgetParent()で
 Frameクラスにキャスト出来るオブジェクトが取得できませんでした。
 (sun.applet.AppletViewerが返ってくる)
 上記のソースを応用してPlug-in使用アプレットを印刷したいのですが
 どのように修正すればいいのでしょうか?


 上のどちらの手段でも、Plug-in使用アプレットの印刷が実現出来れば良いので
 何かご意見がありましたら、よろしくお願い致します。
parolibre
常連さん
会議室デビュー日: 2002/12/30
投稿数: 33
投稿日時: 2003-01-21 13:32
引用:

■ブラウザからの印刷■


これは早めに諦めた方が幸せになれたように思います。
おっしゃる通り、ブラウザの微妙なバージョンで挙動が異なりますし、何より、
今はIE+MSVMというより、IE+Plug-inという組み合わせの方がややもすると普及してい
るかもしれませんから、こうなるとどうなるのかちょっと見当が付きません。
# かすかな記憶だとIE4の頃は、ブラウザの印刷機能でアプレット領域も印刷できたよ
# うな記憶があるのですが…


引用:

■Javaからの印刷■
 Java2Dからプログラミングで印刷させる場合、調べてみたところ
 大体以下のコーディングで実現するのが通常のようでした。

...x8...snip...x8...snip...
PrintJob pj = tk.getPrintJob((Frame)getParent(), "Print", null);
...x8...snip...x8...snip...
 
 しかし、Plug-inを使用しているため、2行目のgetParent()で
 Frameクラスにキャスト出来るオブジェクトが取得できませんでした。
 (sun.applet.AppletViewerが返ってくる)


Frameの取得の仕方が間違っているように思えます。
いや、合っているのですが、getParentを辿ってFrameが出てくるまで辿り、それを使
うのが正解であったように思えます。
1999/07月の私は↓のように実装していました。

public Frame getFrame() {
Container container = this.getParent();
if (!(container instanceof Frame)) {
do {
container = container.getParent();
} while ((null != container) && !(container instanceof Frame));
}
return (Frame )container ;
}

引用:

 上のどちらの手段でも、Plug-in使用アプレットの印刷が実現出来れば良いので
 何かご意見がありましたら、よろしくお願い致します。


 アプレットで印刷を挑戦する前に、アプレットのセキュリティについて調べられることを
お勧めします。
 これをしておかないと、実装ができても「SecurityExceptionで印刷ができない」とシャレにもならない状態になってしまいますから
# IE4の頃は、セキュリティの設定が甘甘で「アプレットから印刷」とかが出来てしまったんですよねぇ…。

_________________
--
parolibre
Cookie
ベテラン
会議室デビュー日: 2002/11/05
投稿数: 59
投稿日時: 2003-03-05 13:15
>parolibre様
お返事が遅くなりまして申し訳ありません。
丁寧なご回答ありがとうございました。

あれからいろいろ調べて見ましたが、概ねparolibre様のおっしゃる通りでした。
端末によっては、普通にブラウザの印刷機能でアプレット領域がきれいに出てきたりも
したのですが、同じ環境を作っても同じ印刷結果が必ずしも出なかったので
「うまくいけばたまに出る」程度で期待することにしました。

ということで、基本的にはJavaのコーディングから印刷というスタンスになりました。
Frameの取得に関しては、紹介していただいたメソッドを使わせていただいたところ
ちゃんとうまくいってくれました。ありがとうございます。
(あとは、SeculityException問題をなんとかするだけです(笑)

おかげさまで、ずいぶん前進できました。
また何か発見がありましたらここで報告させていただきます。
1

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