Chrome PDF生成中文字体支持一键配置脚本

 #!/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"
通过短时倒谱(Cepstrogram)计算进行时-倒频分析研究(Matlab代码实现)内容概要:本文主要介绍了一项关于短时倒谱(Cepstrogram)计算在时-倒频分析中的研究,并提供了相应的Matlab代码实现。通过短时倒谱分析方法,能够有效提取信号在时间与倒频率域的特征,适用于语音、机械振动、生物医学等领域的信号处理与故障诊断。文中阐述了倒谱分析的基本原理、短时倒谱的计算流程及其在实际工程中的应用价值,展示了如何利用Matlab进行时-倒频图的可视化与分析,帮助研究人员深入理解非平稳信号的周期性成分与谐波结构。; 适合人群:具备一定信号处理基础,熟悉Matlab编程,从事电子信息、机械工程、生物医学或通信等相关领域科研工作的研究生、工程师及科研人员。; 使用场景及目标:①掌握倒谱分析与短时倒谱的基本理论及其与傅里叶变换的关系;②学习如何用Matlab实现Cepstrogram并应用于实际信号的周期性特征提取与故障诊断;③为语音识别、机械设备状态监测、振动信号分析等研究提供技术支持与方法参考; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,先理解倒谱的基本概念再逐步实现短时倒谱分析,注意参数设置如窗长、重叠率等对结果的影响,同时可将该方法与其他时频分析方法(如STFT、小波变换)进行对比,以提升对信号特征的理解能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值