Javascript 用Java截图显示整个网页

Javascript 用Java截图显示整个网页,javascript,java,jsp,screenshot,dc.js,Javascript,Java,Jsp,Screenshot,Dc.js,我想知道如何在整个网页上截图。我正在使用20多个dc.js图表制作一个仪表板,对所有图表进行交叉筛选,并使用JSP。客户端希望有一个按钮,用户点击,它将屏幕截图整个网页。我通过java运行它,因为我们必须使用IE11作为标准,而所有其他js库,如HTML2canvas.js,都不起作用(它不显示dc.js图表),虽然它在Chrome上可以工作,但我们必须使用IE11(任何建议都会有帮助) 到目前为止,当我点击一个按钮时,它将运行JAVA中的一个main方法来进行屏幕截图。到目前为止,我正在使用j

我想知道如何在整个网页上截图。我正在使用20多个dc.js图表制作一个仪表板,对所有图表进行交叉筛选,并使用JSP。客户端希望有一个按钮,用户点击,它将屏幕截图整个网页。我通过java运行它,因为我们必须使用IE11作为标准,而所有其他js库,如HTML2canvas.js,都不起作用(它不显示dc.js图表),虽然它在Chrome上可以工作,但我们必须使用IE11(任何建议都会有帮助)

到目前为止,当我点击一个按钮时,它将运行JAVA中的一个main方法来进行屏幕截图。到目前为止,我正在使用java.awt.Robot,但我进行了研究,它说它只基于主监视器的屏幕截图。我正在尝试截屏我的网页。有办法吗?如果是,怎么做?下面是我的Java代码。它的屏幕截图基于显示器

 package com.customer_inquiry;

import java.net.URL;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

    public class screenshotAction {

        public static void main(String[] args) throws Exception {

    String outFileName = args[0];
    if (!outFileName.toLowerCase().endsWith(".png")) {
                System.err.println("Error: output file name must " + "end with \".png\".");
                System.exit(1);
            }
            // determine current screen size
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Dimension screenSize = toolkit.getScreenSize();
            Rectangle screenRect = new Rectangle(screenSize);
            // create screen shot
            Robot robot = new Robot();


            BufferedImage image = robot.createScreenCapture(screenRect);
            // save captured image to PNG file
            ImageIO.write(image, "png", new File(outFileName));
            // give feedback
            System.out.println("Saved screen shot (" + image.getWidth() + " x " + image.getHeight() + " pixels) to file \""
                    + outFileName + "\".");
            // use System.exit if the program hangs after writing the file;
            // that's an old bug which got fixed only recently
            // System.exit(0);
        }
    }

有html2canvas可能适合您的需要:

除此之外,如果你想自己做,你会想到:

  • 首先创建一个svg
  • foreignObject标记
  • 使用XMLSerializer序列化整个html,然后通过innerHTML将其设置为foreignObject。或者使用克隆节点
  • 在画布上绘制svg
  • 下载画布

我确实尝试过使用html2canvas,但在IE11中,它在开发画布后没有显示dc.js图表。我的仪表板的开发方式是,所有图表都是使用js库创建的,它需要dc.js、dc.css和我们的外部应用程序css。我必须在画布上设置每个图表吗?ie11不会很好:)我想知道,是否只想导出图表?我只想在屏幕上打印整个网页(仪表板),并将文件保存为jpeg或png。用户可以共享图表中的过滤器图片。对不起,客户想要,哈哈,是的,IE11在踢我的屁股。我试着研究类似的库,比如html2canvas,但似乎这是唯一最好的。我试图在后端完成这项工作,但我对Java相关领域的GUI非常陌生。有什么建议吗?如果你的仪表板是由多个SVG组成的,你可以试着拍下它们?我听说了。如果这也不起作用,作为最后的手段,我有一个将svg导出为png的工具。我将尝试实现jspdf。不过,我没有使用Node.js,我需要将任何库应用到我们的服务器中。仅使用jspdf.min.js库是否有效?或者它需要所有这些库。