代码之家  ›  专栏  ›  技术社区  ›  Richard

如何从客户端捕获浏览器页面呈现?

  •  1
  • Richard  · 技术社区  · 15 年前

    不确定这是否可行,但我想将控件/对象添加到网页,以便最终用户可以单击一个按钮来捕获他们在浏览器中看到的内容,以便他们可以将图像作为网站审阅过程的一部分提交回去。

    我曾经想过ActiveX控件,但如果我们可以使用Flash或Silverlight,那就更好了。

    谢谢你的建议。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Aaron Digulla    15 年前

    在Windows上,可以按Alt+PrintScreen将当前窗口复制到剪贴板中。

    如果你能使用火狐,我建议你看看 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");
    }
    
        2
  •  -1
  •   krdluzni    15 年前

    打印屏幕按钮?其他任何事情都很难做好。