首页 > 系统相关 >linux系统docker容器部署项目字体问题-Graphics2D在容器里面不显示字体

linux系统docker容器部署项目字体问题-Graphics2D在容器里面不显示字体

时间:2023-09-18 17:34:18浏览次数:57  
标签:容器 Graphics2D zh fonts share 字体 usr

继上一个博客中生成 签章图片后,今日遇到一个问题,
本地不管如何改代码,都会将签名文字显示出来。

但是....
.......
一旦部署在linux系统后,一直打印不出来,,纠结的呀。。
完全没想到,
原来是linux系统里面不兼容本地的字体,也就是没有那么多中文字体,除非安装。

可以惊醒安装字体:参考文档:http://www.ay1.cc/article/18658.html

另外一种方式是在项目的dockerfile文件中把字体simsun.ttf加进去,打成镜像。

 



 

 

 

解决思路:

其实就像解决linux本身没有宋体的问题一样,也可以用来解决容器问题。发现其实很多docker容器的问题最后都可以仿照linux的解决思路来处理。大体就是下载宋体ttf、ttc文件,然后将其考入容器字体目录下,重启容器即可。

解决办法:

1、查看容器支持的字体。

fc-list :lang=zh

当看到下列情况,说明没有安装字体管理,需要安装字体

2、安装字体库。

yum -y install fontconfig #安装字体库
yum -y install ttmkfdir mkfontscale #安装字体索引信息

安装完成后,在/usr/share目录下就能看到fontconfig、fonts文件夹,如图:

3、将下载下来的字体ttc、ttf文件拷贝到容器的/usr/share/fonts文件中。

cp simsun.ttc 容器:/usr/share/fonts
cp simsun.ttf 容器:/usr/share/fonts
docker cp /usr/share/fonts/zh/msyh.ttc 容器:/usr/share/fonts/zh
docker cp /usr/share/fonts/zh/simsun.ttc 容器:/usr/share/fonts/zh

cd /usr/share/fonts

mkdir fonts

mkdir zh

chmod -R 755 /usr/share/fonts/

chmod -R 755 /usr/share/fonts/zh/

4、生成字库索引信息

上传完字体后,进入zh目录

执行如下:

cd zh

mkfontscale

mkfontdir

该命令在当前zh目录下生成 fonts.dir fonts.scale 两个文件

5. 更新字体缓存

执行 fc-cache

6.再次上看是否安装了中文字体 fc-list :lang=zh

 

4、然后重启容器,就可以看到安装的中文字体。

5、也可以将此步骤写到Dockerfile中,在构建镜像的时候自动实现。

补充:Docker | Docker容器中安装中文字体 和 更改 utf-8 编码(解决中文乱码问题)

docker exec -it 62f8c8c2afff bash
docker exec -it 62f8c8c2afff /bin/bash


docker cp /usr/share/fonts/zh/msyh.ttc 62f8c8c2afff:/usr/share/fonts/zh
docker cp /usr/share/fonts/zh/simsun.ttc 62f8c8c2afff:/usr/share/fonts/zh

 

 在Dockerfile中添加字体库路径:

FROM alpine
RUN apk add wqy-zenhei && \
ln -sf /usr/share/fonts/truetype/wqy/wqy-zenhei.ttf /usr/share/fonts/truetype/wqy-zenhei.ttf && \
fc-cache -vf && \
apk del fontconfig
CMD ["bash"]

 #拷贝字体文件到容器
COPY /packages/chinese/fonts/* /usr/share/fonts/truetype/dejavu/
#重新加载字体
RUN cd /usr/share/fonts/truetype/dejavu/ && fc-cache -fv >> fc.log

 

 

 

3.2. 安装中文字体,显示中文

3.2.1 查看现有字体

查看Linux目前的所有字体

fc-list

查看Linux目前的所有中文字体

fc-list :lang=zh

3.2.2 获取其他字体

在 windows 系统中,字体存在于 C:\Windows\Fonts 下。复制后,打上传到 Linux 服务器 /opt/software/chinese 中(我是要在docker容器中安装字体,如果要在linux主机中安装字体,则直接放在服务器的 /usr/share/fonts/ 文件夹下)。

3.2.2 容器安装字体

docker ps -a
#查看容器

docker cp /opt/software/chinese tomcat:/usr/share/fonts/
#tomcat为容器名称
docker exec -it tomcat /bin/bash
#进入容器
chmod 644 -R chinese/
授权文件夹
fc-list :lang=zh
#查看中文字体

 

fc-cache -fv
#刷新缓存

 

3.3. 验证

pagoffice ---- 改动docker 容器后,需要重启容器

word2pdf ---- 刷新字体缓存即可,不需要重启容器

标签:容器,Graphics2D,zh,fonts,share,字体,usr
From: https://www.cnblogs.com/wjsqqj/p/17712527.html

相关文章

  • Linux安装字体 java生成pdf中文乱码或提示未安装字体错误
    当使用java在生成pdf或者图片时,如生成的文档包含有中文在inux上运行,会出现未安装字体的错误活字体乱码,此时需要我们在服务器上安装中文字体:1、首先先看是否安装中文字体:fc-list:lang=zh-bash:list-fc:commandnotfound如出现上边提示,还未安装相关字体的软件包请按如下安......
  • gitlab迁移到新的docker容器中
    迁移步骤1、备份旧gitlab数据gitlab-rakegitlab:backup:create默认会保存在/var/opt/gitlab/backups,实际情况可以使用find查找下文件路径2、在新服务器上使用docker搭建相同版本的gitlabversion:'3'services:gitlab:image:'gitlab/gitlab-ce:11.9.8-ce.0'......
  • docker容器里gitlab备份
    一、数据的备份docker容器里的gitlab备份chatgpt/2023/9/185:35:56一、数据的备份1.进入容器dockerexec-itgitlab/bin/bash2、执行备份命令gitlab-rakegitlab:backup:create默认将备份文件保存至/var/opt/gitlab/backups/3.将json和rb文件也复制到备份目录下......
  • Spring源码分析(一)Spring容器及Spring Bean
    (一)Spring容器及SpringBean1.Spring容器1.1什么是容器官网中有一句话Theorg.springframework.context.ApplicationContextinterfacerepresentstheSpringIoCcontainerandisresponsibleforinstantiating,configuring,andassemblingthebeans.翻译下来的意思是:Spr......
  • Docker中如何将容器重新打包成镜像
    最近做项目,建好了不少不同规则的容器。需要以后重复利用,于是重新打包为镜像。使用以下命令,查看容器名称:dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES3e08cb5b24f8gareenbeam/kyv10:v4......
  • 盛最多水的容器
    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。 示例1:输入:[1,8,6,2,5,4,8,3,7]输出:49......
  • Docker-compose容器编排
    Docker容器编排的作用是管理和协调多个Docker容器的部署、启动、停止和扩展等操作。它可以确保应用程序在分布式环境中以可靠、高效和可伸缩的方式运行。1)安装步骤参考官网文档,选择对应的系统版本即可,官网提供两种安装方式请根据需要自行选择。https://docs.docker.com/desktop/in......
  • 合并果子题解-C++ STL priority_queue容器的使用
    说明:本博文关于priority_queue容器的说明来源于www.cnblogs.com/fusiwei/p/11823053.html本人是刚刚接触算法竞赛的萌新,如果有大佬发现了错误,还望指出(真的有人会看本蒟蒻的博文吗)这是我的第一篇博文,更多是作为测试以后会将博客作为笔记记录学习的体会基本概念priority_queu......
  • Spring - 1( 相关了解 + IOC 容器 + DI 依赖注入 + )
    Spring-1目录Spring-1了解SpringFramework系统架构系统架构图一、核心容器相关概念存在问题解决引出IOC仍存在问题并引出DI完成目标:充分解耦最终结果IOC入门案例分析实现DI入门案例分析实现IOC相关内容bean配置id、class基础配置name别名配置scope作用范围思考bea......
  • STL常用容器用法总结
    vector变长数组,倍增的思想size()返回元素个数empty()返回是否为空clear()清空front()/back()push_back()/pop_back()begin()/end()[]支持比较运算,按字典序pair<int,int>first,第一个元素second,第二个元素支持比较运算,以first为第一关键字,以second为第二关......