#!/bin/bash
set -e
echo "=== Chrome PDF生成中文字体支持一键配置脚本 ==="
echo "功能:安装Arial和Microsoft YaHei字体,配置字体映射,测试PDF生成"
echo "支持系统:Ubuntu/Debian/CentOS/RHEL/Alibaba Linux"
echo ""
# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
echo " 请使用root用户运行此脚本(sudo ./setup_chrome_fonts.sh)"
exit 1
fi
# 安装字体管理工具
echo "1. 安装字体管理工具..."
if command -v apt-get &> /dev/null; then
# Ubuntu/Debian系统
apt-get update -y
apt-get install -y fontconfig wget
elif command -v yum &> /dev/null; then
# CentOS/RHEL系统
yum install -y fontconfig wget
else
echo " 错误:不支持的操作系统(仅支持Ubuntu/Debian和CentOS/RHEL)"
exit 1
fi
echo " 字体管理工具安装完成"
# 创建字体目录
echo "
2. 创建字体目录..."
mkdir -p /usr/share/fonts/chinese
# 安装Microsoft YaHei字体
echo "
3. 安装Microsoft YaHei字体..."
wget -O /usr/share/fonts/chinese/msyh.ttf "https://github.com/imfing/fonts/raw/master/win/Microsoft%20YaHei.ttf" 2>/dev/null || {
echo " 无法从GitHub下载Microsoft YaHei字体,尝试使用系统内置字体"
# 尝试安装系统内置的中文字体包
if command -v apt-get &> /dev/null; then
apt-get install -y fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk
elif command -v yum &> /dev/null; then
# 对于RHEL/CentOS/Alibaba Linux系统
echo "尝试安装Noto CJK字体..."
yum install -y google-noto-cjk-fonts google-noto-sans-fonts google-noto-serif-fonts 2>/dev/null || {
echo "尝试安装文泉驿字体..."
# 对于Alibaba Linux 8,文泉驿字体可能在其他仓库
yum install -y epel-release 2>/dev/null
yum install -y wqy* 2>/dev/null || echo " 文泉驿字体包未找到,但将配置字体映射"
}
fi
}
echo " Microsoft YaHei字体安装/配置完成"
# 安装Arial字体(通常已安装,但确保可用)
echo "
4. 确保Arial字体可用..."
if command -v apt-get &> /dev/null; then
apt-get install -y ttf-mscorefonts-installer
elif command -v yum &> /dev/null; then
# 对于RHEL/CentOS/Alibaba Linux系统
echo "安装Microsoft核心字体依赖..."
yum install -y curl cabextract xorg-x11-font-utils fontconfig
# 尝试从SourceForge安装
rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm 2>/dev/null || {
echo "尝试从其他源安装Microsoft核心字体..."
# 手动下载并安装Arial字体
wget -O /usr/share/fonts/chinese/arial.ttf "https://github.com/imfing/fonts/raw/master/win/Arial.ttf" 2>/dev/null || echo "⚠️ 无法下载Arial字体,但系统可能已内置"
}
fi
echo " Arial字体配置完成"
# 创建字体映射配置
echo "
5. 配置字体映射..."
mkdir -p /etc/fonts/conf.d
# 创建Microsoft YaHei到文泉驿字体的映射
cat > /etc/fonts/conf.d/60-microsoft-yahei.conf << 'EOF'
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<alias>
<family>Microsoft YaHei</family>
<prefer>
<family>WenQuanYi Micro Hei</family>
<family>WenQuanYi Micro Hei Mono</family>
<family>Noto Sans CJK SC</family>
<family>sans-serif</family>
</prefer>
</alias>
</fontconfig>
EOF
echo " 已创建字体映射:将Microsoft YaHei映射到系统已安装的中文字体"
# 更新字体缓存
echo "
6. 更新字体缓存..."
mkfontscale /usr/share/fonts/chinese
mkfontdir /usr/share/fonts/chinese
fc-cache -fv
echo " 字体缓存更新完成"
# 验证字体安装
echo "
7. 验证字体安装和映射..."
echo "已安装的相关字体:"
fc-list | grep -i "yahei\|microsoft\|arial\|noto\|wqy" | head -10
echo "
字体映射验证:"
fc-match "Microsoft YaHei"
# 生成测试HTML和PDF
echo "
8. 生成测试HTML和PDF..."
# 创建测试HTML文件
echo '<html>
<head>
<meta charset="UTF-8">
<style>
body {
font-family: "Microsoft YaHei", Arial, sans-serif;
padding: 20px;
text-align: center;
}
@page {
margin: 20mm;
@top-center { content: none !important; }
@bottom-center { content: none !important; }
}
</style>
</head>
<body>
<h1>Chrome PDF中文字体测试</h1>
<h2>中文标题测试</h2>
<p>这是一段中文测试文本,用于验证Chrome在生成PDF时的中文字体显示效果。</p>
<p>English test text to verify Arial font display.</p>
<p>数字和符号测试:1234567890 !@#$%^&*</p>
<p style="font-size: 18px;">大字体中文测试</p>
<p style="font-size: 12px;">小字体中文测试</p>
<div style="margin-top: 50px;">
<p>测试时间:$(date)</p>
</div>
</body>
</html>' > ./test_chrome_fonts.html
echo " 测试HTML已生成:./test_chrome_fonts.html"
# 使用Chrome生成PDF
if [ -f /opt/google/chrome/chrome ]; then
echo "
使用Chrome生成测试PDF..."
/opt/google/chrome/chrome --headless --disable-gpu --no-sandbox --disable-setuid-sandbox --print-to-pdf-no-header --print-to-pdf=./test_chrome_fonts.pdf ./test_chrome_fonts.html
if [ $? -eq 0 ]; then
echo " PDF生成成功:./test_chrome_fonts.pdf"
else
echo " PDF生成失败,请检查Chrome配置"
fi
else
echo " 未找到Chrome执行文件,请确保Chrome已安装在/opt/google/chrome/目录"
fi
# 显示测试结果
echo "
=== Chrome PDF字体配置完成 ==="
echo ""
echo " 测试文件位置:"
echo "- HTML测试文件:./test_chrome_fonts.html"
echo "- PDF测试文件:./test_chrome_fonts.pdf"
07-05
2693
2693
11-03
1397
1397
06-27
3829
3829

被折叠的 条评论
为什么被折叠?



