现在做一个项目,需要把html转换成image,并用报表生成。用JEditorPane可以显示html,但把JEditorPane转换成image的时候,input标签开头的内容都消失了(text,password等等)。我用的方法如下:
private RenderedImage getImage(Component component) { Dimension dim = component.getSize();
BufferedImage bi = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics();
component.paint(g2);
g2.dispose();
return bi;
}private byte[] image2bytes(URL url) throws IOException {
ByteArrayOutputStream result = new ByteArrayOutputStream(); JEditorPane editor = new JEditorPane();
editor.setPage(url);
editor.setSize(editor.getPreferredSize()); RenderedImage image = getImage(editor); try {
ImageIO.write(image, "JPEG", result);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
                return result.toByteArray();
}

解决方案 »

  1.   

    是不是getImage那个方法有问题?没有把文本框画出来?
      

  2.   

    可以呀,测试代码如下:import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.Graphics2D;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    @SuppressWarnings("serial")
    public class ReportImage extends JFrame { public ReportImage() {
    setTitle("Report Image Test");
    setBounds(100, 100, 600, 460);
    Container cp = getContentPane();
    final JEditorPane ep = new JEditorPane();
    try {
    ep.setPage("http://google.com");
    } catch (IOException e) {
    e.printStackTrace();
    }
    final JScrollPane sp = new JScrollPane(ep);
    cp.add(sp, BorderLayout.CENTER);
    final JButton btn = new JButton("Save");
    btn.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
    BufferedImage img = new BufferedImage(ep.getWidth(), ep.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = img.createGraphics();
    ep.paint(g2d);
    g2d.dispose();
    img.flush();
    try {
    ImageIO.write(img, "PNG", new File("C:/ZCG/downloads/FFD/test.png"));
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }
    });
    cp.add(btn, BorderLayout.SOUTH);
    } public static void main(String[] args) {
    new ReportImage().setVisible(true);
    }}
      

  3.   

    我换了不同 UI LookAndFeel(感观)都可以正常保存成图片。
      

  4.   

    谢谢,我找到原因了,我做的是eclipse插件,不需要显示Jframe,不过不显示好像就会出现上述问题.请问还有没有其他方法直接把html转换成image