2009-08-12 6 views
1

これが可能かどうかわかりませんが、Webページにコントロール/オブジェクトを追加して、エンドユーザーがボタンをクリックしてブラウザに表示されている内容をキャプチャして、ウェブサイトのレビュープロセスのクライアントサイドからブラウザページのレンダリングをキャプチャするにはどうすればよいですか?

私はActiveXコントロールを考えていましたが、もしフラッシュやシルバーライトを使うことができれば良いでしょう。

ありがとうございます。

答えて

1

Windowsでは、Alt + PrintScreenを押して現在のウィンドウをクリップボードにコピーできます。

FireFoxを使用できる場合は、ScrapBook+をご覧ください。

自動化プロセスが必要な場合は、SWTを試してください。このライブラリには、HTMLを読み込んで表示し、その結果を画像にコピーするためのブラウザコンポーネントがあります。問題は、ブラウザがドキュメントのレンダリングを完了したときを知ることです。このコードは次のように始める必要があります。

public HTML2Png() 
{ 
    display = new Display(); 
    shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 
    shell.setSize(920, 700); 
    shell.setLocation(10, 20); 
    browser = new Browser(shell, SWT.NONE); 

    browser.addProgressListener(new ProgressListener() { 
     public void changed (ProgressEvent progressevent) 
     { 
     } 

     public void completed (ProgressEvent progressevent) 
     { 
      boolean result = browser.execute("window.status=document.bgColor;"); 
      if (!result) 
      { 
       System.err.println("Executing script failed!"); 
       return; 
      } 

      System.out.println("Loading completed."); 
      completed.set(true); 
     } 
    }); 
    browser.addPaintListener(new PaintListener() { 
     public void paintControl (PaintEvent paintevent) 
     { 
      System.out.println(paintevent); 
     } 
    }); 
} 

void createPNG (String url, String pngFile) 
{ 
    System.out.println("Working on "+url); 
    completed.set(false); 

    shell.open(); 

    browser.setText("<html><body bgcolor=\"#FF00FF\"></body></html>"); 
    GC source = new GC (shell); 
    int testColor = 0xFF00FF00; 
    Image image = new Image (display, new Rectangle(0, 0, 1, 1)); 

    int i = 100; 
    while (display.readAndDispatch() && i > 0) 
    { 
     source.copyArea(image, 0, 0); 
     if (image.getImageData().getPixel(0,0) == testColor) 
      break; 
     sleep(); 
     i --; 
    } 

    if (i == 0) 
     throw new RuntimeException("Loading took too long"); 

    completed.set(false); 
    browser.setUrl(url); 
    i = 50; 
    while (!shell.isDisposed() && i > 0) 
    { 
     if (completed.get()) 
     { 
      source.copyArea(image, 0, 0); 
      if (image.getImageData().getPixel(0,0) != testColor) 
      { 
       image = new Image (display, browser.getClientArea()); 
       source.copyArea(image, 0, 0); 

       //if (checkImage(image, testColor)) 
        break; 
      } 

      i --; 
     } 

     while (display.readAndDispatch()) 
      ; 

     sleep(); 
    } 

    if (i == 0) 
     throw new RuntimeException ("Loading timed out"); 

    ImageLoader io = new ImageLoader(); 
    io.data = new ImageData[] { image.getImageData() }; 
    File f = new File (pngFile); 
    io.save (f.getAbsolutePath(), SWT.IMAGE_PNG); 

    System.out.println("Saved image "+f+", "+f.length()+" bytes"); 
} 
+0

これはクライアントのマシンに保存しますが、サーバーに戻すことはありません。 – MusiGenesis

-1

「Print Screen」ボタン?それ以外のものは適切に行うのがかなり難しいでしょう。

関連する問題