1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.image.BufferedImage;
  6. import java.io.ByteArrayOutputStream;
  7.  
  8. import javax.imageio.ImageIO;
  9. import javax.swing.JTextPane;
  10. import javax.swing.border.EmptyBorder;
  11. import javax.swing.plaf.basic.BasicEditorPaneUI;
  12.  
  13. /**
  14. * 将html转换成Image图片
  15. *
  16. *
  17. *
  18. */
  19. public class HtmlToImageUtils {
  20.  
  21. /**
  22. * 画页面的方法
  23. *
  24. * @param g 画笔
  25. * @param panel 画板
  26. * @return
  27. */
  28. public static void paintPage(Graphics g, JTextPane panel) {
  29. Graphics2D g2 = (Graphics2D) g;
  30. g2.translate(0f, 0f);
  31. panel.paint(g2);
  32. }
  33.  
  34. /**
  35. * html转换为png文件
  36. *
  37. * @param bgColor 图片的背景色
  38. * @param html html的文本信息
  39. * @param width 显示图片的text容器的宽度
  40. * @param height 显示图片的text容器的高度
  41. * @param eb 設置容器的边框
  42. * @return
  43. * @throws Exception
  44. */
  45. public static byte[] html2png(Color bgColor, String html, EmptyBorder eb) throws Exception {
  46. JTextPane tp = new JTextPane();
  47. if (eb == null) {
  48. eb = new EmptyBorder(0, 50, 0, 50);
  49. }
  50. if (bgColor != null) {
  51. tp.setBackground(bgColor);
  52. }
  53. tp.setBorder(eb);
  54. tp.setContentType("text/html");
  55. tp.setText(html);
  56. byte[] bytes = null;
  57. Dimension d = ((BasicEditorPaneUI) tp.getUI()).getPreferredSize(tp);
  58. int height = d.height + 20;
  59. int width = d.width + 15;
  60. tp.setSize(width, height);
  61. BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  62. Graphics g = image.getGraphics();
  63. g.setClip(0, 0, width, height);
  64. paintPage(g, tp);
  65. g.dispose();
  66. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  67. ImageIO.write(image, "png", baos);
  68. baos.flush();
  69. bytes = baos.toByteArray();
  70. baos.close();
  71. return bytes;
  72. }

  调用方法:

  1. byte[] bytes = HtmlToImageUtils.html2png(Color.white, html, new EmptyBorder(0, 0, 0, 0));

  html样例

  1. String htmlstr =
  2. ""+"<body style=\"background:#f4f4f4;margin:0;padding:0;font-size:14px;color:#333;line-height: 1;box-sizing:border-box;\">" +
  3. "<div style=\"box-sizing:border-box;width:980px;padding: 32px 40px;overflow: hidden;margin:0 auto;\">" +
  4. "<div style=\"box-sizing:border-box;text-align: right;width:100%;height:16px;font-size: 16px;line-height: 16px;\">住院</div>" +
  5. "<div style=\"box-sizing:border-box;width:100%;height:60px;line-height: 1;overflow:hidden;text-align: center;\">" +
  6. "<div style=\"box-sizing:border-box;display: inline-block;margin:0 auto;\">" +
  7. "<div style=\"box-sizing:border-box;display:block;font-size: 24px;\">首都医科大学附属北京儿童医院</div>" +
  8. "<div style=\"box-sizing:border-box;display:block;font-size: 20px;margin-top:16px;\">影像检查诊断报告单</div>" +
  9. "</div>" +
  10. "</div>" +
  11. "<div style=\"box-sizing:border-box;width:100%;border:solid 2px #000;border-right:none;border-left:none; line-height:28px;height:62px;margin-top:10px;padding:2px 8px;\">" +
  12. "<table border=\"0\" style=\"width:100%;border-spacing:0px ; \">" +
  13. "<tr style=\"width:100%;height:16px;\" border=\"0\">" +
  14. "<td style=\"width:25%;\">姓名:张三丰</td>" +
  15. "<td style=\"width:25%;\">性别:男</td>" +
  16. "<td style=\"width:25%;\">年龄:4岁</td>" +
  17. "<td style=\"width:25%;\">ID号: 0009090990</td>" +
  18. "</tr>" +
  19. "<tr style=\"width:100%;height:16px;\" border=\"0\">" +
  20. "<td style=\"\">科室:内分泌</td>" +
  21. "<td style=\"width:25%;\">HIS号:987922</td>" +
  22. "<td style=\"width:25%;\">检查类别:MR</td>" +
  23. "<td style=\"width:25%;\">检验号:201209090909</td>" +
  24. "</tr>" +
  25. "</table>" +
  26. "</div>" +
  27. "<div style=\"min-height:30px;clear:both;overflow:hidden;margin-top:8px;\">" +
  28. "<table border=\"0\" style=\"width:100%;border-spacing:0px ; \">" +
  29. "<tr style=\"width:100%;height:16px;\" border=\"0\">" +
  30. "<td style=\"width:90px;font-size: 16px;line-height:24px;color:#000;font-weight:700;\">检查部位:</td>" +
  31. "<td style=\"width:810px;padding-left:8px;line-height:20px;padding-top:2px;\">小腿哦UI电话小腿小腿哦U话小腿哦UI电话</td>" +
  32. "</tr>" +
  33. "</table>" +
  34. "</div>" +
  35. "<div style=\"min-height:100px;clear:both;overflow:hidden;margin-top:20px;\">" +
  36. "<table border=\"0\" style=\"width:100%;border-spacing:0px ; \">" +
  37. "<tr style=\"width:100%;\" border=\"0\" valign=\"top\">" +
  38. "<td style=\"width:90px;font-size: 16px;line-height:24px;color:#000;font-weight:700;\">影像表现:</td>" +
  39. "<td style=\"width:810px;padding-left:8px;line-height:20px;padding-top:2px;\">小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UIUI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UIUI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话</td>" +
  40. "</tr>" +
  41. "</table>" +
  42. "</div>" +
  43. "<div style=\"min-height:100px;clear:both;overflow:hidden;margin-top:30px;\">" +
  44. "<table border=\"0\" style=\"width:100%;border-spacing:0px ; \">" +
  45. "<tr style=\"width:100%;\" border=\"0\" valign=\"top\">" +
  46. "<td style=\"width:90px;font-size: 16px;line-height:24px;color:#000;font-weight:700;\">印象:</td>" +
  47. "<td style=\"width:810px;padding-left:8px;line-height:20px;padding-top:2px;\">小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UIUI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UIUI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话小腿哦UI电话</td>" +
  48. "</tr>" +
  49. "</table>" +
  50. "</div>" +
  51. "<div style=\"margin-top:20px;height:24px;line-height:24px;\">" +
  52. "<table border=\"0\" style=\"width:100%;border-spacing:0px ; \">" +
  53. "<tr style=\"width:100%;height:24x;\" border=\"0\">" +
  54. "<td style=\"width:36%;\">报告日期:2017-11-22 11:12:09</td>" +
  55. "<td style=\"width:34%;\">报告医生:唐小小</td>" +
  56. "<td style=\"\">审核医生:李若曦</td>" +
  57. "</tr>" +
  58. "</table>" +
  59. "</div>" +
  60. "<div style=\"border-top:solid 2px #000;margin-top:6px;font-size:10px;font-weight:600;line-height:26px;padding-left:10px;\"> " +
  61. "注:本报告仅供临床医师参考,影像科医师签字 后生效" +
  62. "</div>" +
  63. "" +
  64. "</div>" +
  65. "</body>"
  66. ;
  67. try {
  68. // FileUtil.readAscFile(
  69. byte[] bytes = HtmlToImageUtils.html2jpeg(Color.white, htmlstr,
  70. 1300, 1200, new EmptyBorder(0, 0,
  71. 0, 0));
  72. //写入阿里云
  73. InputStream instreams = new ByteArrayInputStream(bytes);
  74. String resUrl= ossService.uploadObject(instreams, "mrUpload/",
  75. UUID.randomUUID().toString(), com.hecross.common.util.FileUtils.getFileExt(".jpg"));
  76. System.out.println(resUrl);
  77. res.put("resUrl",resUrl);
  78. } catch (Exception e) {
  79. e.printStackTrace();
  80. }

  

  

  

将html转换成image图片png格式的更多相关文章

  1. Excel将秒转换成标准的时间格式HH:MM:SS

    Excel将秒转换成标准的时间格式HH:MM:SS 比如120秒,转换成00:02:00 Excel公式为: =TEXT(A1/86400,"[hh]:mm:ss") A1为秒数据 ...

  2. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  3. Ghostscript 将PDF文件转换成PNG图片 问题一二

    由于项目需求,需要将原来的PDF文档转换成图片文件,在网上找了一些PDF转图片的方法:测试了几个后,都有这样或那样的问题 1.PDFLibNet.dll,这个类型最初还是挺好用的,能转图片和HTML, ...

  4. 将psd格式批量转换成jpg或png格式(C#自制软件)

    此项目基于.net framework 4.0 将psd格式批量转换成jpg或png格式. 链接:https://pan.baidu.com/s/16IEjX0sHaY9H3Ah7mv6IPQ 提取码 ...

  5. Openssl生成RSA公私钥以及将公钥转换成C#支持的格式

    Openssl生成RSA公私钥以及将公钥转换成C#支持的格式 1.RSA算法介绍 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密.RSA ...

  6. 【Spring Boot】Spring Boot之利用Logstash将日志转换成以JSON的格式存储和输出

    一.Logstash的作用 Logstash是一个完全开源的工具,它可以对日志进行收集.过滤,能非常方便地将日志转换成以JSON的格式存储和输出,并将其存储供以后使用. 二.整合Logstash的步骤 ...

  7. JS框架_(Qrcode.js)将你的内容转换成二维码格式

    百度云盘 传送门 密码:304e 输入网址点击按钮生成二维码,默认为我的博客首页 二维码格式演示 <!DOCTYPE html> <html lang="en"& ...

  8. C#使用FFmpeg 将视频格式转换成Gif图片示例

    根据EFmpeg封装的视频转换gif工具:https://my.oschina.net/tianma3798/blog/825317 一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 ...

  9. mpp文件转换成jpg图片,可以用pdf文件做中转站

    用project软件做了一个表,发现不能转换成图片,先把mpp文件转换成pdf文件,然后用PS打开pdf文件,存储为jpg格式就行了

随机推荐

  1. SQL FORMAT() 函数实例

    FORMAT()函数用于对字段的显示进行格式化. SQL FORMAT() 语法 SELECT FORMAT(column_name,format) FROM table_name; 参数 描述 co ...

  2. python多重继承C3算法

    python多重继承的MRO算法选择: 经典方式.Python2.2 新式算法.Python2.3 新式算法(C3).Python 3中只保留了最后一种,即C3算法 C3算法的解析: 1.多继承UML ...

  3. storm的定时任务

    应用场景: 第一种方法 参考代码StormTopologyTimer1.java package yehua.storm; import java.util.Map; import org.apach ...

  4. c++官方文档-class

    #include <iostream> using namespace std; class Circle { double radius; public: Circle(double r ...

  5. 18.scrapy中selector的用法

    Selector是一个独立的模块. Selector主要是与scrapy结合使用的. 开启Scrapy shell: 1.打开命令行cmd 2.scrapy shell http://doc.scra ...

  6. angular 获取当前值

  7. event 实现两个程序的交互

    event.wait() 等待一定时间,或者当遇到event.set() 时,继续执行 event.clear() 清除信号 event.set() 设置信号 event.isset() 判断信号 例 ...

  8. requireJS-初识

    浅谈requireJS 2016-04-26 21:44 by 猴子猿, 726 阅读, 0 评论, 收藏, 编辑 项目中大都使用模块化开发,requireJS作为AMD模块开发的典范,所以有必要学习 ...

  9. tensorflow UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

    tensorflow读取图像出现错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid s ...

  10. Mysql 5.8安装报错

    1 mysql安装过程中报下面这个错 解决方法:只要将目录改成反斜杠即可. 2 修改密码错误:ERROR 1064 (42000): You have an error in your SQL syn ...