求助, Java 只能用全局安装的 fontconfig 来使用字体吗?

2023-12-04 13:30:08 +08:00
 zackzergzeng
用的是 openjdk 1.8,使用 apache batik 写了个 svg 转 png 的功能,结果放到 centos 服务器运行报错,调查是因为没有安装 fontconfig ,虽然安装 fontconfig 就能解决,但是想要自动化部署,而且要兼容很多系统( centos ,欧拉,红帽...,还得区分 x86 和 arm),所以自动化脚本那边不想安装 fontconfig ,之后又研究了下泪痣 libfontconfig.so 的形式,但是内置后 sun.font.FontConfigManager.getFontConfig 方法一直返回为空,还是报错,所以在这里咨询各位大神,有什么解决方案能够绕开安装 fontconfig 来正常运行 batik
1948 次点击
所在节点    Java
22 条回复
Ayanokouji
2023-12-04 14:06:53 +08:00
如果是 docker ,可以将字体打包到镜像,如果是裸机,可以写脚本,安装字体
adoal
2023-12-04 14:13:07 +08:00
说得好像安装 fontconfig 这个包不能做到自动化部署里去似的
adoal
2023-12-04 14:14:10 +08:00
你想像的自动化部署是什么,只包括用脚本或者其它系统把你的打包好的业务软件拷过去这一件事,不包括对目标环境的配置?
kd9yYw2RyhQwAwzn
2023-12-04 14:16:59 +08:00
自动化部署不是也需要基础镜像吗 把 fontconfig 直接安装到基础镜像就可以了
zackzergzeng
2023-12-04 14:46:25 +08:00
@adoal 我描述的有点问题,其实就是产品有个一键安装脚本,内部讨论了下不同意在脚本那层安装,因为基本安装环境不联网,所以要准备的安装包就太多了
thofx
2023-12-04 14:57:26 +08:00
@zackzergzeng 离线 rpm 包 可以啊
cheng6563
2023-12-04 14:59:08 +08:00
内核版本够的话,可以用 nerdctl ,一步解压就装好容器环境。
adoal
2023-12-04 15:46:44 +08:00
@zackzergzeng 又想马儿跑又想马儿不吃草。不联网的环境就不能装包了吗?那客户当初按安装操作系统的介质总还在的吧,fontconfig 这么基础的东西你说的这几个发行版的安装盘里应该都有的。如果确定一定要离线安装,方案一是没必要把发行版这种东西也放到一键安装里去,这事可以让客户自己先解决好(别笑,没必要太舔客户,我(甲方)就遇到过供应商的文档里的 requirement 一张明确写了要预装哪些包)。方案二是把你们要兼容的几个发行版的 fontconfig 及其直接依赖先准备好,现场环境里没装的就从你们介质装,“要兼容很多系统”是你们自己贪心的商务策略,那就要付出相应的劳动代价。NO SILVER BULLET, NO SILVER BULLET, NO SILVER BULLET 。
McZoden
2023-12-04 15:58:58 +08:00
怀疑是客户服务器压根没有装 X ,所以 fontconfig 之类的 X 环境的基础都没有,不止缺少这单个包的
wjup
2023-12-04 16:25:27 +08:00
上周刚遇到个类似的问题。业务是数据根据模板导出 pdf ,用到了字体,本地开发试着没问题,打成 jar 包后运行字体总是返回空,最终发现打包时二进制会破坏字体文件,大概是这样原因,然后在 pom 里添加 nonFilteredFileExtensions 解决的
zackzergzeng
2023-12-04 17:30:52 +08:00
@thofx 要准备至少 4-5 个系统的 rpm ,还有 x86 和 arm 两种架构,还得准备 fontconfig 依赖的 rpm ,甚至依赖的依赖
ldyisbest
2023-12-04 21:23:34 +08:00
字体打包到 java 项目里面
siweipancc
2023-12-05 08:11:29 +08:00
(⊙o⊙)还有这么难搞的吗,上次出问题我直接打包一个字体注册到虚拟机就完事了
janus77
2023-12-05 10:18:59 +08:00
要不你先在一台机器上试试,装了 fontconfig 以后能不能解决
说不定,依然解决不了呢?
我的意思是,客户的环境有时候是很坑的,他们从嘴里说的话不一定靠谱,要亲自调研过才能确定。不然你们又做了无用功
zackzergzeng
2023-12-05 10:49:25 +08:00
@janus77 安装 fontconfig 是肯定解决的,而且卸载了 fontconfig 就会报原来的错
bigfei
2023-12-05 10:53:06 +08:00
用 js 在浏览器实现呢? svg 到 png
zackzergzeng
2023-12-05 10:55:33 +08:00
@bigfei 没有浏览器的,用来生成图片放入 word 文档的
bigfei
2023-12-05 11:01:18 +08:00
bigfei
2023-12-05 11:05:59 +08:00
或者这个:
https://www.npmjs.com/package/convert-svg-to-png
用 java 的话确实没有 nodejs 方便
buliugu
2023-12-05 11:27:29 +08:00
to B 其实非常建议用 docker 做部署,把部署的复杂度统一搞到开发阶段处理掉,通过租赁云服务器的方式测试各种不同的操作系统与硬件环境,不然客户千奇百怪的服务器环境会把你的实施工程师逼疯的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/997458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX