现在做一个项目,需要把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();
}
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();
}
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);
}}