博客
关于我
Linux 添加中文字体库,解决Java 生成中文水印不显示问题
阅读量:434 次
发布时间:2019-03-06

本文共 2421 字,大约阅读时间需要 8 分钟。

 

本机 Windows 环境测试以下代码生成中文水印完全没问题,但是发布到Linux下不显示,一开始以为是报错了没打印出来,搜索发现直接提示中文乱码的或者不显示的,才明白原来是字体库原因,于是开始解决这个问题。

/**     * @param srcImgPath 源图片路径     * @param tarImgPath 保存的图片路径     * @param waterMarkContent 文字内容     * @param markContentColor 文字颜色     * @param font 字体     */    public static void addLetterXY(String srcImgPath, String tarImgPath, String content,Color color,Font font, int x,int y) {        try {            // 读取原图片信息            File srcImgFile = new File(srcImgPath);//得到原图片            Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片            int srcImgWidth = srcImg.getWidth(null);//获取图片的宽            int srcImgHeight = srcImg.getHeight(null);//获取图片的高            // 加文字            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);            Graphics2D g = bufImg.createGraphics();            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);            g.setColor(color); //根据图片的背景设置水印颜色            g.setFont(font);              //设置字体            g.drawString(content, x, y);  //画出水印            g.dispose();              // 输出图片              FileOutputStream outImgStream = new FileOutputStream(tarImgPath);              ImageIO.write(bufImg, "png", outImgStream);            outImgStream.flush();              outImgStream.close();              System.out.println("添加文字完成");                      } catch (Exception e) {            System.out.println("生成图片出错啦:"+e.getMessage());        }    }

 

首先根据介绍了解到,从jdk15版本(即jdk1.5_*) 后,可以自定义字体库,添加方式如下链接: 但实际上在这里添加并没有作用,使用以下方式输出tomcat所拥有字体库,发现添加的字体并不存在。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();            String[] fontFamilies = ge.getAvailableFontFamilyNames();            for (String s : fontFamilies) {               System.out.println(s);            }

于是又有文章介绍说要在Linux 系统中添加字体库,添加方式如链接:  或 

我这只配置到前 5 步就可以了,不需要重启Linux 或字体服务,步骤总结为以下:

1、检查字体是否已经安装:

  fc-list  ----------检查所有已有的字体

  fc-list :lang=zh -----------只检查中文

2、到 C:\windows\fonts 复制对应字体库,微软雅黑、宋体、黑体等,各文件后缀可能不一样,有的为ttf,有的为ttc,不影响使用。

3、上传刚才复制的字体库到/usr/share/fonts/zh_CN目录下,如果没有该目录,用命令:mkdir /usr/share/fonts/zh_CN  来创建,然后再上传。

4、修改字体权限,使root以外的用户可以使用这些字体:chmod -R 777 /usr/share/fonts/zh_CN,使用777 赋予全部权限,chmod 指令可以查看该链接:

5、建立字体缓存:

  mkfontscale

  mkfontdir

  fc-cache -fv

6、重启 Tomcat,以上文章中有的说要重启 Linux系统,有的说要重启字体库服务,但我都没有,而且也没有字体服务,只是重启了Tomcat 执行后有效。

7、可以再次使用 fc-list 查看字体库,已经包含了新加入的字体,或者使用上边的Java 输出也包含了新字体,打印中文水印也OK。

 

转载地址:http://oxbyz.baihongyu.com/

你可能感兴趣的文章
net发布的dll方法和类显示注释信息(字段说明信息)[图解]
查看>>
Net和T-sql中的日期函数操作
查看>>
Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用
查看>>
Net操作Excel(终极方法NPOI)
查看>>
Net操作配置文件(Web.config|App.config)通用类
查看>>
net网络查看其参数state_dict,data,named_parameters
查看>>
Net连接mysql的公共Helper类MySqlHelper.cs带MySql.Data.dll下载
查看>>
NeurIPS(神经信息处理系统大会)-ChatGPT4o作答
查看>>
neuroph轻量级神经网络框架
查看>>
Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
查看>>
new Blob()实现不同类型的文件下载功能
查看>>
New Concept English three (35)
查看>>
NEW DATE()之参数传递
查看>>
New Journey--工作五年所思所感小记
查看>>
new Queue(REGISTER_DELAY_QUEUE, true, false, false, params)
查看>>
New Relic——手机应用app开发达人的福利立即就到啦!
查看>>
new work
查看>>
new 一个button 然后dispose,最后这个button是null吗???
查看>>
NewspaceGPT的故事续写能力太强了
查看>>
NewspaceGPT绘制时序图
查看>>