网站首页
docker 容器支持中文
客户有个需求:将table内容转换成图片显示;
后端语言采用java;
使用组件 HtmlImageGenerator
结果发现,windows下中文不乱码,但是用docker部署到linux就乱码了
所以先尝试不使用docker,结果还是乱码,然后给服务器安装中文字体(安装方法自行百度),安装好字体骤然见效!
继续使用docker,发现还是不行,
于是就有一个大胆的想法,将宿主机的字体拷贝到docker,还真别说,这种方法果然有效,
下面是具体操作
1:docker cp /usr/share/fonts/chinese/ 容器名称:/usr/share/fonts/chinese/
2:fc-cache -fv
下面附上转换方法
import gui.ava.html.image.generator.HtmlImageGenerator;
import org.apache.commons.codec.binary.Base64;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping(value = "/api/table2image")
public class Table2ImageController {
@RequestMapping(value = "/do")
public void table2image(HttpServletResponse response, HttpServletRequest request) throws IOException {
//tableContent是表格HTML内容,参数需要url转码一下
String table = request.getParameter("table");
if (table.equals("") || table == null) {
return;
}
String tableContent = table;
String htmlTemplate = "<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"<head>\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\">" +
" <meta name=\"format-detection\" content=\"telephone=no,email=no,date=no,address=no\">" +
" <meta charset=\"UTF-8\">\n" +
" <title></title>\n" +
"<style>body{padding:0;margin:0;} td{font-size:24px;white-space: nowrap;background-color: #fff;line-height:1.8}</style></head>\n" +
"<body>";
htmlTemplate = htmlTemplate + tableContent + "</body>\n" +
"</html>";
HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
// Dimension ds = new Dimension(4010,4000);
// imageGenerator.setSize(ds);
//加载html模版
imageGenerator.loadHtml(htmlTemplate);
BufferedImage image = imageGenerator.getBufferedImage();
//取得图片的长和宽
int imgHeight = image.getHeight();
int imgWidth = image.getWidth();
//取得背景色的代码
int c = image.getRGB(3, 3);
BufferedImage bi = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_BGR); //设置有8位RGB颜色分量图像
//逐点扫描image,把需要透明的颜色setRGB成控件背景色
for (int i = 0; i < imgWidth; ++i)//把原图片的内容复制到新的图片,同时把背景设为透明
{
for (int j = 0; j < imgHeight; ++j) {
if (image.getRGB(i, j) == c)
bi.setRGB(i, j, c & 0x00ffffff);//这里把背景设为透明
else
bi.setRGB(i, j, image.getRGB(i, j));
}
} //直接输出图像
ByteArrayOutputStream stream = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", stream);
response.setContentType("image/jpeg");//浏览器不要缓存
response.setDateHeader("expries", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
ImageIO.write(bi, "jpg", response.getOutputStream());
}
}
相关推荐
-
centos7 docker安装openjdk并运行jar包
第一步:docker pull openjdk第二步:创建一个java_app的数据卷 docker volume create java_app第三步:将jar包上传到/var/lib/docker/volumes/java_app/_data/下,然后启动镜像第四步:启动docker ...
-
docker下php容器 curl本机无法访问【curl: (7) Failed to connect to x.x.x.x port 80: Host is unreachable)】
问题描述:centos 7.9 服务器上 使用docker容器部署了php环境,但是使用curl的时候 ,访问其他机器ip正常,但是curl本机ip 出现 curl: (7) Failed to connect to x.x.x.x port 80: Host is unreachable...
-
Intellij IDEA 快捷键整理
【常规】Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示当前文件的结构Ctrl+F7...
-
centos7刚安装的docker 1.13.1启动报错Docker failed to start
yum install docker device-mapper-event-libs -y 安装dockersystemctl start docker 报错解决 关闭seliunx 修改文件 /etc/sysconfig/docker加上=false...
-
Scheduled 定时任务
Scheduled 定时任务1 cron表达式指定定时器执行时间// 固定每天1点执行,无论上一次执行完没有,到时间会再执行。@Scheduled(cron = "0 0 1/1 * ?")//每一个小时执行一次@Scheduled(cron = "0 0 * * * ?") //每天上午...
-
php7下安装event扩展
一·、安装支持库libevent,需要编译高版本(这里以最新版本release-2.1.8-stable为例)1. wget -c https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent...
-
centos7/linux 服务器 添加新硬盘并挂载
一、查看现有磁盘设备 fdisk -l 发现/dev/sdb 为新加的硬盘;二、开始分区 fdisk /dev/sdb fdisk -l #再次查看分区情况,已经有了/dev/sdb1三、创建文件系统,并格式化 mkfs.ext4 /dev/sdb1四、将新分区挂在到文件系统 mk...
-
一款超级好用的驾校预约系统-公众号预约系统【驾校预约系统】
“驾校教练微信预约系统”可用于“驾校微信预约系统”、“教练微信预约系统”,其主要预约对象是学车学员,学员可依据教练信息、自身空闲时间合理选择预约时间,及时掌握学车学时。本系统一共包含三个端(学员端/教练端/管理端):1、学员在线预约教练(可单笔支付,可购买课时);2、教练收到预约推送,教练可以自由开...