You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@react-pdf/renderer生成波斯语PDF时文本显示异常求助

@react-pdf/renderer波斯语文本PDF显示异常解决方案

网页端波斯语文本显示正常,但生成PDF后出现无效文本:
网页端显示效果
PDF下载后显示效果

用户代码如下:

import font from "./IRANsans.ttf";

Font.register({
  family: "IRANSans",
  format: "truetype",
  src: font,
});

const styles = StyleSheet.create({
  page: {
    fontFamily: "IRANSans",
  },
});

<Document style={{ backgroundColor: "white", padding: "10px" }}>
  <Page size="A4" style={styles.page}>
    <View>
      <Text>متن نوشته شده به فارسی</Text>
    </View>
  </Page>
</Document>

解决方案建议:

  • 使用支持波斯语排版的完整字体:确保你的IRANSans字体包含OpenType布局(OTL)特性,部分精简版TTF可能缺失RTL文本渲染所需的字形信息,建议更换为官方完整版OTF/TTF字体。
  • 注册字体时指定Unicode范围:明确限定波斯语字符范围,避免字体加载异常:
    Font.register({
      family: "IRANSans",
      format: "truetype",
      src: font,
      unicodeRange: "U+0600-06FF, U+0750-077F, U+08A0-08FF, U+FB50-FDFF, U+FE70-FEFF",
    });
    
  • 显式设置RTL文本属性:波斯语是从右到左语言,需在样式中指定方向和对齐方式:
    const styles = StyleSheet.create({
      page: {
        fontFamily: "IRANSans",
        direction: "rtl",
      },
      persianText: {
        textAlign: "right",
        fontFamily: "IRANSans",
      },
    });
    
    // 组件中使用
    <Text style={styles.persianText}>متن نوشته شده به فارسی</Text>
    
  • 检查字体加载路径:若使用CRA环境,可将字体放入public目录,改用绝对路径注册,避免打包时路径错误:
    Font.register({
      family: "IRANSans",
      format: "truetype",
      src: "/IRANSans.ttf",
    });
    
  • 升级依赖版本:旧版@react-pdf/renderer存在RTL渲染bug,升级到最新稳定版(如^3.1.14及以上)可修复部分问题。

内容的提问来源于stack exchange,提问作者Deli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:16:13