- PR -

サーバーサイドでのHTMLイメージファイル出力

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-08-07 11:46
表題のとおり、
サーバサイドでブラウザ上でHTMLを表示したときのイメージを
ファイル出力したいと思っております。
ビットマップファイルのようなもので出力したいのですが、
どのような方法がありますでしょうか?

ブラウザを起動して画面をキャプチャすれば
簡単にできることはわかりますが
コストを抑えるためGUIは使いたくないと思っております。

方法論だけでもいいので力をお貸し願います。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-08-07 11:56
サーバサイドでクライアント側のハードコピーを?
無理だし。だいたいなんのために必要なの?
iwamu
会議室デビュー日: 2005/10/27
投稿数: 16
投稿日時: 2006-08-07 12:24
↓こういうのですか?
http://img.simpleapi.net/
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-08-07 13:01
> ぶさいくろうさん
クライアント側というよりはブラウザで表示したときの
ハードコピーです。
自分のHPにそういう機能をつけるのが目的です。

>iwamuさん
こんなサイトですね。
これはサムネイル画像になっているようですが、
実際の大きさの画像をファイル出力したいと思ってます。


IEコンポーネントを使えばできそうですが
GUIになる必要があるのではないかと思ってます。
サーバーサイドでHTMLをレンダリングするだけ、
というのが希望です。

Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-08-07 13:09
以前同じことを考えました。

Javaで実現するならば、JEditorPaneクラスを使うととても簡単にできます。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html
これのコンストラクタ(↓)が使えます。
JEditorPane(String url)

JFrameか何か適当なコンテナに配置して、オフスクリーンに描画してから、
getGraphicsしたものをJPEGなりPNGなりにすればよいでしょう。

私が試したときには headlessサポートもImage I/Oも無かったですが、
今ならこれらを使えばさらに簡単そうです。(100ライン以下で書けちゃう!?)

(参考)
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/awt/AWTChanges.html#headless
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/headless/index.html
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/imageio/spec/imageio_guideTOC.fm.html

でも結局実用しませんでした。なぜ使わなかったか、ですが、
世の中の大多数を占めるIEとレンダリング結果が異なる場合があるのが
問題になったためです。
該当ページにFLASHがあったりすると特に顕著です。
だからこの方法は用途によりますね。

WindowsサーバならIEをOLEでごにょごにょして作れば上記の問題は
解決できると思います。こちらは詳しくありません。

※"GUI無しで"の部分にこだわりを感じたのでheadless関連URLを追記

[ メッセージ編集済み 編集者: Java僧 編集日時 2006-08-07 13:20 ]

[ メッセージ編集済み 編集者: Java僧 編集日時 2006-08-07 13:24 ]
未記入
ベテラン
会議室デビュー日: 2005/02/24
投稿数: 55
投稿日時: 2006-08-07 14:49
>Java僧さん

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6751&forum=12&start=8&15

こちらのサンプルを実行してyahooを表示してみましたが
かなりレイアウトが崩れますね。
ちょっと使い物になりそうもないですが、
こんなにもレイアウトが崩れるものなのですか?
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-08-07 17:41
引用:
ちょっと使い物になりそうもないですが、
こんなにもレイアウトが崩れるものなのですか?



「こんなにも」の部分が主観だと思うので、
私に聞かれても答えにくいのですが、
いくつかヒントがあります。

- isEditableの真偽でHTMLレンダラの動作が違います。
- Java1.4.xのHTMLレンダラとJava5のそれは違います。

検証用のミニマムコードも貼っておきます。
コード:
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
/**
 * @author Java僧
 * 
 * All Rights Reserved (C)Java僧  2006.
 */
public class YahooViewer extends JFrame {

	public static void main(String[] args) {
		YahooViewer frame = new YahooViewer();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	public YahooViewer() {
		this.setSize(800, 800);
		try {
			JEditorPane html = new JEditorPane("http://www.yahoo.co.jp/");
			html.setEditable(false);
			this.getContentPane().add(new JScrollPane(html));
		} catch (IOException e) {
            e.printStackTrace();
        }
	}
}


Java6でもエンハンスされているといいですね。
時間があったら試してみてください。
1

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