java项目在Windows系统运行正常,部署在linux系统出字体初始化失败和乱码问题解决方法


前言

java 项目部署linux系统是会出现字体问题,此时需要在linux上安装字体

一、项目中出现的错误日志

二、解决方案

1、先从你本机 C:\Windows\Fonts 拷贝或者网络上下载你想要安装的字体文件(*.ttf文件)到 /usr/share/fonts/chinese/TrueType 目录下(如果系统中没有此目录,则自行mkdir创建,亦可重命名为自己喜欢的文件夹名)

2、修改字体文件的权限,使root用户以外的用户也可以使用

# cd /usr/share/fonts/chinese/TrueType
# chmod 755 *.ttf

3、建立字体缓存

# mkfontscale (如果提示 mkfontscale: command not found,需自行安装 # yum install mkfontscale )
# mkfontdir 
# fc-cache -fv (如果提示 fc-cache: command not found,则需要安装# yum install fontconfig )

4、重启计算机
# reboot

三、 字体对照表

在这里插入图片描述

三、 使用方法

点开字体文件获取字体名称,下面打水印为例,使用的是simsunb.ttf字体文件,点开文件获取文件名称,进行使用,此方式可以解决中文乱码问题

在这里插入图片描述
在这里插入图片描述

package com.yunhenedu.core.utils.pdf;

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;

/**
 * 描述
 *
 * @author
 * @version 1.0
 * @date 2022/04/12 16:57:26
 */
public class pdfUtils {
    
    static void insertWatermark(PdfPageBase page, String watermark){
        Dimension2D dimension2D = new Dimension();
        dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
        PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
        brush.getGraphics().setTransparency(0.3F);
        brush.getGraphics().save();
        brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
        brush.getGraphics().rotateTransform(-45);
        // 读取pdf
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("SimSun-ExtB", Font.PLAIN, 24), true);
        brush.getGraphics().drawString(watermark,font, PdfBrushes.getViolet(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
        brush.getGraphics().restore();
        brush.getGraphics().setTransparency(1);
        Rectangle2D loRect = new Rectangle2D.Float();
        loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
        page.getCanvas().drawRectangle(brush, loRect);
    }

    /**
     * 描述  给pdf添加水印(调用入口)
     *  
     * @param inFile  未打水印输入文件地址
     * @param outFile  打打水输出文件地址
     * @param watermark 水印内容
     * @return void 
     * @author gx
     * @date 2022/4/12 17:16:32
     * @version 1.0
     */
    public static void addWatermarkToPDF(String inFile, String outFile, String watermark){
        //创建PdfDocument对象
        PdfDocument pdf = new PdfDocument();
        //加载示例文档
        pdf.loadFromFile(inFile);
        //添加一个空白页,目的为了删除jar包添加的水印,后面再移除这一页
        pdf.getPages().add();
        for (int i = 0; i < pdf.getPages().getCount(); i++) {
            //调用insertWatermark方法插入文本水印
            insertWatermark(pdf.getPages().get(i), watermark);
        }
        //移除第一个页
        pdf.getPages().remove(pdf.getPages().get(pdf.getPages().getCount()-1));
        //保存文档
        pdf.saveToFile(outFile);
        pdf.close();
    }
}

总结

以上方法是解决在windows下系统运行项目不出错,发布在linux项目上出现字体问题,以及使用指定字体解决中文乱码问题。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值