网站首页
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());
}
}
相关推荐
-
mysqlbinlog 保存为sql文件。
执行如下命令:mysqlbinlog -vv --base64-output=decode-rows binlog路径 --result-file=要保存的sql路径例如:/www/server/mysql/bin/mysqlbinlog -vv --base64-output=decode-row...
-
.htaccess中301强制跳转到带www前缀或不带www的域名
相信很多站长朋友都有这样的的问题出现。即带www前缀的域名与不带www前缀的顶级域名收录情况是不同的。这个问题主要是由于搜索引擎对于顶级域名与二级域名权重判定不同造成的。毫无疑问地,唯一的域名能够给你带来更多的好处。不管它是带www还是不带www。因为,这样无论用户还是搜索引擎都会记住你网站的唯一域...
-
docker 容器支持中文
客户有个需求:将table内容转换成图片显示;后端语言采用java;使用组件 HtmlImageGenerator结果发现,windows下中文不乱码,但是用docker部署到linux就乱码了所以先尝试不使用docker,结果还是乱码,然后给服务器安装中文字体(安装方法自行百度),安装好...
-
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...
-
centos7/linux 服务器 添加新硬盘并挂载
一、查看现有磁盘设备 fdisk -l 发现/dev/sdb 为新加的硬盘;二、开始分区 fdisk /dev/sdb fdisk -l #再次查看分区情况,已经有了/dev/sdb1三、创建文件系统,并格式化 mkfs.ext4 /dev/sdb1四、将新分区挂在到文件系统 mk...
-
PHP性能优化方案
常用性能优化方案1.使用单引号替换双引号,单引号在运行的时候不检查运行引号内部的变量,执行效率是双引号的两倍;2.使用PHP内置的数组操作方法,PHP内置的数组操作方法的运行效率是自行编写代码的10倍以上;3.使用字符串函数替换正则函数,例如:使用 str_replace 替换&...
-
html js 前端下载文件并且给文件重命名
今天有一个需求,甲方要求 下载的文件名为 “标题.doc”,而我数据库存储的是时间戳(123072747621318656.doc),同时我又不想修改后端代码了,想着让前端实现一下 前端下载并指定名称。下面是下载的实现代码<div onclick="downLoad()">downLoa...
-
centos上libreoffice+unoconv安装步骤,实现word转pdf(可以php读取pdf页码)
php读取docx页码比较难操作,并且读取doc格式的页码数更难搞了,所以先将doc/docx/pptx/ppt 先转换为pdf,然后通过pdf读取页码就比较精确了一、libreoffice安装1、yum search libreoffice查询一下系统自带的安装包安装libreoffi...