- 前言
- java 项目部署linux系统是会出现字体问题,此时需要在linux上安装字体
- 一、项目中出现的错误日志
- 二、解决方案
- 三、 字体对照表
- 三、 使用方法
- 总结
前言 java 项目部署linux系统是会出现字体问题,此时需要在linux上安装字体 一、项目中出现的错误日志 二、解决方案
1、先从你本机 C:WindowsFonts 拷贝或者网络上下载你想要安装的字体文件(*.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;
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);
}
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项目上出现字体问题,以及使用指定字体解决中文乱码问题。



