锚点设置: <a href="#1">锚点</a> <a name="1"></a> table表格格式: <table width="100" height="100" border="1"
2021-10-26 12:02:25
204
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import javax.imageio.ImageIO;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.basic.BasicEditorPaneUI;
/**
* 将html转换成Image图片
*
*
*
*/
public class HtmlToImageUtils {
/**
* 画页面的方法
*
* @param g 画笔
* @param panel 画板
* @return
*/
public static void paintPage(Graphics g, JTextPane panel) {
Graphics2D g2 = (Graphics2D) g;
g2.translate(0f, 0f);
panel.paint(g2);
}
/**
* html转换为png文件
*
* @param bgColor 图片的背景色
* @param html html的文本信息
* @param width 显示图片的text容器的宽度
* @param height 显示图片的text容器的高度
* @param eb 設置容器的边框
* @return
* @throws Exception
*/
public static byte[] html2png(Color bgColor, String html, EmptyBorder eb) throws Exception {
JTextPane tp = new JTextPane();
if (eb == null) {
eb = new EmptyBorder(0, 50, 0, 50);
}
if (bgColor != null) {
tp.setBackground(bgColor);
}
tp.setBorder(eb);
tp.setContentType("text/html");
tp.setText(html);
byte[] bytes = null;
Dimension d = ((BasicEditorPaneUI) tp.getUI()).getPreferredSize(tp);
int height = d.height + 20;
int width = d.width + 15;
tp.setSize(width, height);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setClip(0, 0, width, height);
paintPage(g, tp);
g.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
baos.flush();
bytes = baos.toByteArray();
baos.close();
return bytes;
}
调用方法:
byte[] bytes = HtmlToImageUtils.html2png(Color.white, html, new EmptyBorder(0, 0, 0, 0));
html样例
String htmlstr =
""+"<body style="background:#f4f4f4;margin:0;padding:0;font-size:14px;color:#333;line-height: 1;box-sizing:border-box;">" +
"<div style="box-sizing:border-box;width:980px;padding: 32px 40px;overflow: hidden;margin:0 auto;">" +
"<div style="box-sizing:border-box;text-align: right;width:;height:16px;font-size: 16px;line-height: 16px;">住院</div>" +
"<div style="box-sizing:border-box;width:;height:60px;line-height: 1;overflow:hidden;text-align: center;">" +
"<div style="box-sizing:border-box;display: inline-block;margin:0 auto;">" +
"<div style="box-sizing:border-box;display:block;font-size: 24px;">首都医科大学附属北京儿童医院</div>" +
"<div style="box-sizing:border-box;display:block;font-size: 20px;margin-top:16px;">影像检查诊断报告单</div>" +
"</div>" +
"</div>" +
"<div style="box-sizing:border-box;width:;border:solid 2px #000;border-right:none;border-left:none; line-height:28px;height:62px;margin-top:10px;padding:2px 8px;">" +
"<table border="0" style="width:;border-spacing:0px ; ">" +
"<tr style="width:;height:16px;" border="0">" +
"<td style="width:25%;">姓名:张三丰</td>" +
"<td style="width:25%;">性别:男</td>" +
"<td style="width:25%;">年龄:4岁</td>" +
"<td style="width:25%;">ID号: 0009090990</td>" +
"</tr>" +
"<tr style="width:;height:16px;" border="0">" +
"<td style="">科室:内分泌</td>" +
"<td style="width:25%;">HIS号:987922</td>" +
"<td style="width:25%;">检查类别:MR</td>" +
"<td style="width:25%;">检验号:201209090909</td>" +
"</tr>" +
"</table>" +
"</div>" +
"<div style="min-height:30px;clear:both;overflow:hidden;margin-top:8px;">" +
"<table border="0" style="width:;border-spacing:0px ; ">" +
"<tr style="width:;height:16px;" border="0">" +
"<td style="width:90px;font-size: 16px;line-height:24px;color:#000;font-weight:700;">检查部位:</td>" +
"<td style="width:810px;padding-left:8px;line-height:20px;padding-top:2px;">小腿哦UI电话小腿小腿哦U话小腿哦UI电话</td>" +
"</tr>" +
"</table>" +
"</div>" +
"<div style="min-height:100px;clear:both;overflow:hidden;margin-top:20px;">" +
"<table border="0" style="width:;border-spacing:0px ; ">" +
"<tr style="width:;" border="0" valign="top">" +
"<td style="width:90px;font-size: 16px;line-height:24px;color:#000;font-weight:700;">影像表现:</td>" +
"<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>" +
"</tr>" +
"</table>" +
"</div>" +
"<div style="min-height:100px;clear:both;overflow:hidden;margin-top:30px;">" +
"<table border="0" style="width:;border-spacing:0px ; ">" +
"<tr style="width:;" border="0" valign="top">" +
"<td style="width:90px;font-size: 16px;line-height:24px;color:#000;font-weight:700;">印象:</td>" +
"<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>" +
"</tr>" +
"</table>" +
"</div>" +
"<div style="margin-top:20px;height:24px;line-height:24px;">" +
"<table border="0" style="width:;border-spacing:0px ; ">" +
"<tr style="width:;height:24x;" border="0">" +
"<td style="width:36%;">报告日期:2017-11-22 11:12:09</td>" +
"<td style="width:34%;">报告医生:唐小小</td>" +
"<td style="">审核医生:李若曦</td>" +
"</tr>" +
"</table>" +
"</div>" +
"<div style="border-top:solid 2px #000;margin-top:6px;font-size:10px;font-weight:600;line-height:26px;padding-left:10px;"> " +
"注:本报告仅供临床医师参考,影像科医师签字 后生效" +
"</div>" +
"" +
"</div>" +
"</body>"
;
try {
// FileUtil.readAscFile(
byte[] bytes = HtmlToImageUtils.html2jpeg(Color.white, htmlstr,
1300, 1200, new EmptyBorder(0, 0,
0, 0));
//写入阿里云
InputStream instreams = new ByteArrayInputStream(bytes);
String resUrl= ossService.uploadObject(instreams, "mrUpload/",
UUID.randomUUID().toString(), com.hecross.common.util.FileUtils.getFileExt(".jpg"));
System.out.println(resUrl);
res.put("resUrl",resUrl);
} catch (Exception e) {
e.printStackTrace();
}
15
2022-09
15
2022-09
15
2022-09
15
2022-09
15
2022-09
15
2022-09