网站首页

docker 容器支持中文

中文Lee 2022/02/24 1794人围观
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); //设置有8RGB颜色分量图像
//逐点扫描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());
}

}

相关推荐

  • 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 安装docker 并且配置mariadb

    第一步:安装docker:curl -sSL https://get.daocloud.io/docker | sh等待安装完成后运行一下命令:systemctl start docker (启动)dockersystemctl enable docker (开机启动)至此docker 安装完成第二...

  • 面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)

    1、什么是 Redis?.2、Redis 的数据类型?3、使用 Redis 有哪些好处?4、Redis 相比 Memcached 有哪些优势?5、Memcache 与 Redis 的区别都有哪些?6、Redis 是单进程单线程的?7、一个字符串类型的值能存储最大容量是多少?8、Redis 的持久化机...

  • centos7 docker 安装配置nginx

    第一步:docker pull nginx第二步:宿主机文件映射Nginx里的配置访问页面目录位置 /data/nginx/html主配置文件nginx.conf位置 /data/nginx/nginx.confnginx.conf文件内容###################user  ...

  • Intellij IDEA 快捷键整理

    【常规】Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示当前文件的结构Ctrl+F7...

  • docker 容器支持中文

    客户有个需求:将table内容转换成图片显示;后端语言采用java;使用组件 HtmlImageGenerator结果发现,windows下中文不乱码,但是用docker部署到linux就乱码了所以先尝试不使用docker,结果还是乱码,然后给服务器安装中文字体(安装方法自行百度),安装好...

  • Linux内核调优(大并发场景下)

    为了让系统能够支持更大的并发,除了必须安装event扩展(或libevent扩展)之外,优化linux内核也是重中之重,以下优化每一项都非常非常重要,请务必按逐一完成。打开文件 /etc/sysctl.conf,增加以下设置#该参数设置系统的TIME_WAIT的数量,如果超过默认值则会被立即清除 ...

  • [LuPHP] PHPMVC精简框架第一讲(基本MVC框架配置)

    LuPHP是一个精简版的PHPMVC框架,该框架经历了N个高可用系统的测验(数据存储量千万级别,并发1000),该框架结合了市面上流行的PHP框架,去除了臃肿的代码;本框架遵循即用即写的原则,做到项目中绝不存在多余(实际根本用不上)代码!该框架作者历经10年以上项目研发经验,总结并写出一套适合自己的...