最近在用一个前端画图工具(纯js)在前端页面画图,现在我想把画出的内容转换成一幅图片(jpg、pdf等格式)。
页面中工具画完的图我可以通过js取得这个图像的innerHTML。但如何将这个innerHTML转换成图呢?
具体操作时这样子:用户点击某个按钮,然后象下载一样弹出一个对话框,程序将页面中制定的画面生成了一张图片供用户下载。
1、前端可以用js直接实现吗?怎么实现?
2、还是必须借助后台,将innerHTML传到后台,然后再模拟下载?
innerHTML传到后台了,用java怎么将它变成二进制图像数据流?大家给个思路或方法,谢谢啊!
页面中工具画完的图我可以通过js取得这个图像的innerHTML。但如何将这个innerHTML转换成图呢?
具体操作时这样子:用户点击某个按钮,然后象下载一样弹出一个对话框,程序将页面中制定的画面生成了一张图片供用户下载。
1、前端可以用js直接实现吗?怎么实现?
2、还是必须借助后台,将innerHTML传到后台,然后再模拟下载?
innerHTML传到后台了,用java怎么将它变成二进制图像数据流?大家给个思路或方法,谢谢啊!
synchronized (this)
{
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB); //取得绘图对象
Graphics2D g = (Graphics2D) image.getGraphics(); g.setColor(new Color(198, 221, 254));
//填充背景色
g.fillRect(0, 0, width, height);
g.setColor(new Color(165, 199, 255));
g.drawRect(0, 0, width - 1, height - 1);
g.setColor(new Color(255, 255, 255));
g.drawRect(1, 1, width - 3, height - 3);
//设置字体颜色
g.setColor(Color.DARK_GRAY);
//绘画干扰线
for (int i = 0; i < 4; i++)
{
int x_b = ran.nextInt(width);
int x_e = ran.nextInt(width);
int y_b = ran.nextInt(height + 10);
int y_e = ran.nextInt(height + 10);
g.drawLine(x_b, y_b, x_e, y_e);
}
//设置字体样式
g.setFont(new Font("System", Font.BOLD, 14));
//写入指定文字
g.drawString(sb_str, 5, 15); g.dispose();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.
getOutputStream());
encoder.encode(image);
}
而是将前端用js画的图(这个图在浏览器的内存就是一长串html语句)的innerHTML内容转换成一副真正的图片文件--ph1.jpg,格式可以是jpg,也可以是pdf。
说白了就是把 html语句转化成图片。
innerHTML 只能取得到html代码而已,简而言之取的是文本. 想法虽好,一些web基础问题要加强.
我现在用的这个画图表的工具HighCharts就可以做到,我看了源码,导出图片这部分就是把innerHTML作为表单(动态构造的)内容提交到了它们网站处理。然后返回了下载对话框。
但是我不能要求用户在使用时能上互联网,所以我必须自己处理。
也许这部分功能HighCharts要收费。
我把那段innerHTML截获以后放在一个html文件的div中直接打开,就可以在浏览器中看到那幅图。
div中就是一段段html代码。
item里面可以是子标签的名字,或者是div中标签的顺序。
说的再直白一点就是怎么把一个html页面变成一幅图。
9楼的办法我试了可行,就是有点麻烦,而且似乎不太稳定。但算是把问题解决了吧。
9楼的思路是可行的,就是希望有更好的转换工具。我可能有点求完美,呵呵。