网站首页

docker 容器支持中文

中文Lee 2022/02/24 3351人围观
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());
}

}

相关推荐

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

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

  • centos7 安装docker 并且配置mariadb

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

  • 11个代码质量审核和管理工具,程序员收藏

    如今,代码质量分析和审核已成为每个企业的基本流程。随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要。不良的代码不仅会影响代码的可维护性,而且还会在某些情况下影响其性能。此外,更好的代码质量还有助于企业将来减少维护和降低成本。幸运的是,有很多审核和管理代码的工具,为开发者和程序员提...

  • Intellij IDEA 快捷键整理

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

  • centos7通过yum安装JDK1.8

    安装之前先检查一下系统有没有自带open-jdk命令:rpm -qa |grep javarpm -qa |grep jdkrpm -qa |grep gcj如果没有输入信息表示没有安装。如果安装可以使用rpm -qa | grep java |&n...

  • JAVA 前后端分离jwt 工具类

    package com.lup.util;import com.auth0.jwt.JWT;import com.auth0.jwt.algorithms.Algorithm;import com.auth0.jwt.interfaces.DecodedJWT;import com.auth0.jw...

  • 常用PHP框架有哪些?[PHP框架排行TOP7]

    PHP是一种国内外流行的开源服务器端脚本开发语言。能适应大、中、小型项目的发展需要。PHP框架的真正开发始于PHP5。事实上,PHP4时代也有一些框架,但是由于使用的复杂性,没有一个纯粹的PHP易于使用,所以在PHP5才有很大的发展。随着PHP5面向对象功能的实现。基PHP的产品越来越多。在PHP开...

  • 如何安装php7的event扩展

    最近api系统遇到了高并发的瓶颈,想通过workerman重构。在看workerman文档时发现这么一句话:Event扩展不是必须的,当业务需要支撑上万并发连接时,推荐安装Event,能够支持巨大的并发连接。如果业务并发连接比较低,例如1000并发连接,则可以不用安装。如果无法安装Event扩展,可...